AIX 6.1, Solaris 10, and HP-UX and the System p

Comparing the big three

In recent years, HP, Sun, and IBM® have all released new versions of their commercial UNIX®-based operating systems. This article compares and contrasts some of the innovations in their releases. Learn the differences on how to work with certain tasks, such as networking and performance tuning. Also, see at a high level some of the virtualization differences among these big three.


Ken Milberg, Writer/site expert

Ken Milberg is a technology writer and site expert for and provides Linux technical information and support at He is also a writer and technical editor for IBM Systems Magazine, Power Systems edition, and a frequent contributor of content for IBM developerWorks. He holds a bachelor's degree in computer and information science, as well as a master's degree in technology management from the University of Maryland University College. He is the founder and group leader of the N.Y. Metro POWER-AIX/Linux Users Group. Through the years, he has worked for both large and small organizations and has held diverse positions from CIO to senior AIX engineer. He is currently president and managing consultant for UNIX-Linux Solutions, is a PMI-certified Project Management Professional (PMP), an IBM Certified Advanced Technical Expert (CATE), and is also IBM SCon certified.

26 May 2009

Also available in Chinese

Let's begin by covering the new features and innovations in the latest releases of the three major commercial UNIX operating systems.

HP-UX innovations

HP-UX, HP's flavor of UNIX, is now up to release 11iV3. HP-UX is based on System V and runs on both HP9000 RISC servers and HP Integrity Itanium systems. In this respect, it is similar to Solaris, which can run on their SPARC RISC architecture, as well as x86 machines. AIX can only run on the POWER® architecture; however, given how UNIX is a high-end operating system, it is a positive thing that AIX and the POWER architecture are tightly integrated.

HP-UX 11Iv3 supports up to 128 processor cores, 2TB of memory, 2TB of filesystem, a 16TB filesystem size, and 100 million ZB of storage. Recent innovations and improvements include:

  • 10% reduced power usage with dynamic savings capability
  • Improved application performance by up to 20%, with locality optimized resource alignment
  • Increased performance sensitive workloads with tune-N-Tools tuning

About a year ago, HP made available sets of operating system environments, which provide new choices for clients. They include the following builds: datacenter, high availability, virtual server, and the base environment, without all the bells and whistles.

  • Accelerated virtual I/O provides for increased bandwidth and up to a 60% greater CPU efficiently when working with HP Integrity virtual machines. It does this by providing for a gatekeeper function that helps prioritize critical data traffic to go first.
  • Online JFS, through VxFS, deploys a new method of indexing files and provides for increased performance for directories.
  • HP Logical Volume Manager improvements:
    • Support for on-line disk replacement
    • Dynamic line support
    • Support for multi-path I/O
    • Performance improvements
    • Increased maximum logical volume size: 2 - 16TB
  • Virtualization enhancements, through Dynamic nPartitions. This allows cell-based HP Integrity and HP9000 servers to be configured into partitions of varying sizes, which can be adjusted for application workload, while applications continue to become available.
  • Network enhancements:
    • Improved through-put with mobile clients by avoiding unnecessary TCP communications.
    • Enhancements to TCP stack to improve performance.
    • Change in tunable tcphasize. This is now auto-tunable; the system can actually determine the optimal value at boot time.

Certainly it's good that improvements were made in LVM, but in most cases, AIX already had these features.

Solaris innovations

Solaris 10 was first released in 2005. The latest update to Solaris is version 10 10/08. Recent enhancements in this particular version include:

  • Enabling the ability to boot from ZFS and using ZFS as its root filesystem. A lot of other improvements were also made to Solaris ZFS, including: the ability to rollback a fileset without umounting, enhancements to the ZFS send command, allowing for ZFS quotas and reservations (for file system data only), command line enhancements including zpool history, allowing you to use the upgrade command to upgrade your existing filesystem with the new filesystem enhancements, and providing for the ability of non-root users to do ZFS administration of granular tasks.
  • Allowing Solaris containers to automatically update its environment when moving from one system to another.
  • LDOM support for dynamically reconfigurable disk and network I/O.
  • Support for up to 256 processors on x86 systems -- up from 64.
  • Improvements in Solaris zones, including: the ability to set default router in Shared IP Zones, allowing for the zonepath being on ZFS.
  • Security enhancements, including: allowing for the separation of data enhancement though the Solaris Management Console and improved encryption algorithms.
  • Networking enhancements: the ability to provide SIP end-to-end traffic measurements and logging, and new communication protocol parser utilities.

These recent improvements to ZFS are very important. When ZFS first came out, it looked incredible, but the root issue was a glaring omission in feature functionality. With this ability now added, Solaris compares favorably in many ways to JFS2 from AIX and VxFs from HP.

AIX innovations

AIX 6.1, first released about two years ago, is now available in two editions: standard, which includes only the base AIX, and the Enterprise edition, which includes workload partition manager and several Tivoli® products. In this respect, it has some similarities to HP, which has several versions. Recent enhancements include:

  • Workload partitions: operating systems virtualization, similar to Solaris containers, called WPARs allow for the creation of multiple AIX 6.1 environments inside of one AIX 6.1 instance. Application WPARs, a wrap-around that can run inside of a global instance, can be created in seconds, which allows for the quick testing of new applications.
  • Live Application mobility: this allows for partitions to be moved from one system to another without restarting applications or causing system disruption to end-users. In addition to allowing for planned outages, this feature helps manage workload by allowing for the movement of servers off of systems during non-peak periods, to save energy, cost and efficiencies.
  • Support for concurrent AIX kernel updates: allows you to update systems without having to do a reboot for this to take effect.
  • Support for storage key: allows you to reduce the number of outages associated with memory overlays inside the AIX kernel.
  • Support for dynamic tracing: allows simplified debugging of system or application code.
  • Enhanced functional recovery routine: allows for one to recover from errors that would normally crash the system.
  • Improvement in default tuning parameters for AIX 6.1 allowing for better performance.
  • New name resolver caching daemon allowing requests to resolve hostnames to improve the efficiencies of these requests.
  • Improved NIM support for NFS version 4.
  • Improved manageability features, such as IBM Systems Director Console for AIX.

Recent security enhancements include:

  • Role-Based Access Control (RBAC) allows for improved security and manageability, by allowing administrators to delegate administration duties to non-root users.
  • Trusted AIX allows AIX 6.1 to become an option that can meet the most critical of government and private industry security requirements.
  • Encrypted Filesystems provides JFS with greater security, through its ability to encrypt data in a filesystem.
  • Enhancements to AIX security expert include an enhancement to store security templates in LDAP.
  • The Secure-by-Default installation allows only a minimum number of services and packages to enable a higher level of security on installation.
  • Support for long password phrases.

These AIX 6.1 innovations are supported on all platforms, except for the following, which are only supported on the POWER6™ architecture: application storage keys, kernel storage keys, automatic variable page size, firmware assisted dump and hardware decimal floating point. Most IBM POWER administrators are very excited about AIX 6.1, and have already started taking it out of the closet-sandbox and putting it into production. What about AIX 6.1 that has so many people excited about it and how it compares to recent versions of Solaris and HP-UX is covered next.

First and foremost, there is workload partitioning and Live application mobility. While Solaris has zones/containers, which are similar in some respects to workload partitions (WPARs), it cannot do what WPARs can. No other UNIX can boast the ability to move over running workloads on a workload partition from one system to another without shutting down the partition. Why is this important? Because it allows one to increase their availability by keeping systems up during planned outages. It does this by allowing either the systems administrator or even operators (through WPAR manager) to move these virtual operating system partitions to other systems, without incurring any downtime. It also lends itself to green computing because it allows operators to shift partitions from underutilized boxes to more heavily utilized boxes, during non-peak periods. This feature alone can save a company a lot of money, while at the same time helping the environment. Of all the innovations discussed, AIX WPARs and Live application mobility are clearly the biggest winners.

Virtualization capabilities

Now, let's take a high-level look at the virtualization capabilities available on the big three.


  • nPartitions: These are hard partitions, similar in some respects to SUN DSDs. One feature that this has which Sun does not is its ability to service one partition while others are on-line. They also support multiple operating systems such as HP-UX, VMS, Linux® and Windows®, albeit only on the Itanium processor, not PA-RISC. Similar to Solaris, they are also only available on high-end systems and also do not support moving around resources without a reboot.
  • vPars. These are separate and distinct operating systems instances that can reside on either one nPartition or physical box. They allow you to dynamically move both CPU and RAM resources between partitions, as requirements evolve. Its important to note that resources cannot be shared or moved between partitions.
  • Integrity Virtual Machines: These allow you to have separate guest instances on one partition, which have fully isolated environments. They allow for partitions to have their own copy of the OS. Of all the virtualization strategies that HP or Sun offers for that matter, this most clearly mimics IBM's PowerVM™. The granularity actually increases what is available with PowerVM as you can partition a box with as little as 1/20th of a micro partition. The huge downside here is that this system simply does not scale very well. There is a limitation of 4 CPUs and only 64GB of memory. Other limitations include the inability to move around storage adapters, while the system is up nor the ability to dedicate processes to a single partition.
  • Resource Partitions: This is HPs equivalent to Solaris containers and AIX WPARs.

Among these three hardware vendors, IBM clearly is the only vendor that has a single consolidated technology and vision. Each of the other vendors have myriad strategies that have a tendency to confuse even the most experienced of systems persons. With IBM, you have PowerVM. Period. It's more scalable than anything that HP or Sun has, more innovative, with its ability to move around live partitions, and has a 40-year history of virtualization (I include the mainframe here) behind it. Finally, its features and functionality extend themselves to the entire POWER product line. This is a sever shortcoming of both HP and Sun, each of which have products that are only supported on either low-end, high-end models, and/or a given architecture.


Sun has multiple methods by which they implement virtualization on Solaris:

  • Containers or zones: In essence, this feature allows for the ability to have multiple virtual operating systems running inside of one kernel instance of Solaris. This is a form of operating system virtualization, similar to AIX 6.1's implementation of WPARs.
  • xVM server: This innovation, introduced in February of 2008, is a hypervisor based solution, based on Xen, which can run under Solaris on x86 machines. On Sparc, it is still based on logical domains.
  • Logical Domains (LDOMs): This enables customers to run multiple operating systems simultaneously. The truth is that it has many issues, among them, scalability, limited micro partitioning and no dynamic allocation between systems. It also can run only on low-end SPARC servers.
  • Hardware partitioning (DSDs): These are similar in some ways to IBM's logical partitioning, which is not part of PowerVM. Hardware partitioning does not have any real virtualization capabilities because you cannot share resource between partitions.


PowerVM's virtualization is based on IBM's paravirtualization hypervisor strategy. It includes the following features:

  • Micro-partitioning: This feature allows you to slice up a POWER CPU on as many as 10 logical partitions, each with 1/10th of a CPU. It also allows for the capability of your system to exceed the amount of entitled capacity that the partition has been granted. It does this by allowing for uncapped partitions.
  • Shared Processor pools: This feature allows virtual partitions to reach into a shared pool to gain more resources as the demand increases. When demand is light, shared partitions give-back to the shared processor community.
  • Virtual I/O servers. This defines a special type of partition that allows for shared I/O in the form of Shared Ethernet and Virtual SCSI.
  • Live Partition Mobility. This innovation allows you to move entire running partitions from one machine to another. This increases the availability of systems by allowing the system to keep running during planned outages, without incurring downtime. This feature is only available on POWER6.
  • Shared Dedicated Capacity. This feature allows partitions that have dedicated processors to contribute towards the shared processor pools.


This section compares and contrasts the differences of configuring networking on HP-UX, Solaris, and AIX and configures a default router on all three systems.


When you first boot an HP-UX system after installation, the /sbin/set_parms program is run. You can also do this later using the set_parms initial command. This is used to configure the systems hostname, IP address, DNS and other network parameters. So let's run it: # set_parms initial (see Listing 1).

Listing 1. Running the set_parms program

                       Welcome to HP-UX!

Before using your system, you will need to answer a few questions.

The first question is whether you plan to use this system on a network.

Answer "yes" if you have connected the system to a network and are ready
to link with a network.

Answer "no" if you:

     * Plan to set up this system as a standalone (no networking).

     * Want to use the system now as a standalone and connect to a
       network later.

Are you ready to link this system to a network?

Press [y] for yes or [n] for no, then press [Enter]

Do you wish to use DHCP to obtain networking information?

Press [y] for yes or [n] for no, then press [Enter]

From here you will also enter your IP address and add additional network parameters.

Let's also configure an Ethernet card. After installing the LAN card, you would run ioscan (see Listing 2).

Listing 2. Running ioscan
# ioscan -fnC lan
Class     I  H/W Path  Driver S/W State   H/W Type     Description
lan       0  0/0/1/0   iether   CLAIMED     INTERFACE    HP  PCI/PCI-X 1000Base-T

Let's look at the IP addresses, which are configured using netstat (see Listing 3).

Listing 3. Configuring the IP addresses using netsat
# netstat -in
Name      Mtu  Network         Address         Ipkts      Ierrs Opkts        Oerrs Coll
lan0      1500   32657      0     24500        0     0
lo0      32808       131689     0     131689       0     0

From here we can clearly see that lan0 is correlated with (see Listing 4).

Listing 4. Checking the the lan0 correlation
# ifconfig lan0
        inet netmask ffffff80 broadcast

Next, you'll want to configure your default router. First you'll need to modify this file: /etc/rc.config.d/netconf filesystem. The netconf file stores your configuration values (see Listing 5).

Listing 5. Checking your configuration values in the netconf file
# more /etc/rc.config.d/netconf
# netconf:  configuration values for core networking subsystems
# @(#) netconf $Date: 2007/10/05 20:09:28 $Revision: r11.31/1 PATCH_11.31 (PHNE_
# HOSTNAME:           Name of your system for uname -S and hostname
# OPERATING_SYSTEM:   Name of operating system returned by uname -s
#                     ---- DO NOT CHANGE THIS VALUE ----
# LOOPBACK_ADDRESS:   Loopback address
#                     ---- DO NOT CHANGE THIS VALUE ----




Then you use the route command to put the new route into effect: # route add default 1.

To initiate the new route, you need to start services and initiate the route (see Listing 6).

Listing 6. Starting services and initiating the route
/sbin/init.d inetd start
/sbin/init.d net start

Let's examine SAM, HP's answer to IBM's SMIT. While not as powerful as SMIT, HP does at least provide a text-based menuing system.

Listing 7. HP's SAM
# sam

                   HP-UX System Management Homepage (Text User Interface)
 a - Auditing and Security
 c - Auditing and Security Attributes Configuration(new)
 d - Peripheral Devices
 e - Resource  Management
 f - Disks and File Systems
 g - Display
 k - Kernel Configuration
 l - Printers and Plotters(new)
 m - Event Monitoring Service
 n - Networking and Communications
 p - Printers and Plotters
 s - Software Management
 u - Accounts for Users and Groups

From here, navigate to Networking and Communications >Network Interfaces Configuration>Network Interface Cards. Here is the output (see Listing 8).

Listing 8. Output for network interface cards
Interface  Subsystem  Hardware   Interface  Interface    IPv4 Address   IPv6 Address
Name                  Path       State      Type
lan0       iether     0/0/1/0    up         1000Base-T  Not Configured

The way to configure networking in HP-UX is fairly straightforward, though I did find it a bit cumbersome at times.


With Solaris, you need to work with text files; there is no SAM or SMIT equivalent. Let's first check the hostname of your box in /etc/nodename (see Listing 9).

Listing 9. Checking the hostname of your box
# more /etc/nodename

You should also use ifconfig to gather information (see Listing 10).

Listing 10. Using ifconfig to gather information
# ifconfig -a
  mtu 8232 index 1
        inet netmask ff000000
bge0:9: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
  mtu 1500 index 2
        inet netmask ffffff00 broadcast

To enable a card, you would use the plumb parameter.

For example, to enable bge0: # ifconfig bge0 plumb.

To bring up the interface, you would do this: # ifconfig bge0 up.

To make the change permanent, you need to edit the following files:

  • /etc/hosts
  • /etchostname/bge0 (for our bge0 interface)
  • /etc/netmasks
  • /etc/defaultrouter

Let's change a default route. Changing a default route in Solaris requires the following steps:

  1. You need to first edit your /etc/defaultrouter file.
  2. Delete your default router's IP address: # route delete theipadress.
  3. Assign your new one: # route add default newipadress.

While at times I enjoy the ability to just edit text files, most administrators prefer the flexibility and ease of a menu-driven system to configure networking. Furthermore, with Solaris you need to plumb the interface -- other UNIX operating systems do not require this. Both IBM and HP have system administration menu systems, though IBM's SMIT is more powerful.


With AIX, you usually go straight to SMIT when configuring networking. This is how you list the ethernet adapters: # smit devices >communication >Ethernet adapter>adapter>list all Ethernet adapters (see Listing 11).

Listing 11. Listing the Ethernet adapters
                                COMMAND STATUS

Command: OK            stdout: yes           stderr: no

Before command completion, additional instructions may appear below.

ent0 Available  Virtual I/O Ethernet Adapter (l-lan)
ent1 Available  Virtual I/O Ethernet Adapter (l-lan)

F1=Help             F2=Refresh          F3=Cancel           F6=Command
F8=Image            F9=Shell            F10=Exit            /=Find
n=Find Next

To make changes go to Change/Show characteristics of an Ethernet adapter (see Listing 12).

Listing 12. Change/Show characteristics of an Ethernet adapter
              Change / Show Characteristics of an Ethernet Adapter

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]
  Ethernet Adapter                                    ent0
  Description                                         Virtual I/O Ethernet >
  Status                                              Available
  Enable ALTERNATE ETHERNET address                   no                     +
  ALTERNATE ETHERNET address                         [0x000000000000]        +
  Minimum Tiny Buffers                               [512]                   +#
  Maximum Tiny Buffers                               [2048]                  +#
  Minimum Small Buffers                              [512]                   +#
  Maximum Small Buffers                              [2048]                  +#
  Maximum Medium Buffers                             [128]                   +#
  Maximum Medium Buffers                             [256]                   +#
  Minimum Large Buffers                              [24]                    +#

With AIX, you can also use ifconfig. But be advised that any changes you make with ifconfig are not saved in the Object Data Manager (ODM) and on a reboot will be lost. This is why ifconfig is not the preferred method; you should always use SMIT when doing work on your networks with AIX.

To add a default route on AIX, all you need to do is go to SMIT>TCP/IP Minimum Configuration&Startup and click on your interface to get this screen shown in Listing 13.

Listing 13. Adding a default route on AIX
                        Minimum Configuration & Startup

To Delete existing configuration data, please use Further Configuration menus

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]
* HOSTNAME                                           [lpar21ml162f_pub]
* Internet ADDRESS (dotted decimal)                  []
  Network MASK (dotted decimal)                      []
* Network INTERFACE                                   en0
           Internet ADDRESS (dotted decimal)         []
           DOMAIN Name                               []
  Default Gateway
       Address (dotted decimal or symbolic name)     []
       Cost                                          [0]                      #
       Do Active Dead Gateway Detection?              no                     +

F1=Help             F2=Refresh          F3=Cancel           F4=List
F5=Reset            F6=Command          F7=Edit             F8=Image

Then change your default gateway and hit the enter key twice (see Listing 14).

Listing 14. Changing the default gateway
                                 COMMAND STATUS

Command: OK            stdout: yes           stderr: no

Before command completion, additional instructions may appear below

inet0 changed
en0 changed
inet0 changed

The simplicity with which AIX allows you to configure networking is very clear.

Performance tuning

This section compares and contrasts the differences of tuning systems in HP-UX, Solaris, and AIX.


With HP-UX, remember that it runs under Itanium and PA-RISC. As such, Integrity servers that run programs that have been compiled for Itanium will run better than on programs compiled on PA-RISC. It could run on emulation mode, but it will not run as fast. HP-UX 11.31 has per-thread locks and as such there are significant performance enhancements with the latest version of HP-UX -- up to 30% more performance compared to 11iV2. With disk I/O it is recommended that you use VxFS with 8 kb block sizes. You will get better performance using HP Online JFS.

See kctune and kcweb in SAM to tune.

Here is the list of parameters, as seen by kctune (see Listing 15).

Listing 15. List of parameters for kctune
# kctune
Tunable                           Value  Expression  Changes
NSTREVENT                            50  Default
NSTRPUSH                             16  Default
NSTRSCHED                             0  Default
STRCTLSZ                           1024  Default
STRMSGSZ                              0  Default
acctresume                            4  Default
acctsuspend                           2  Default
aio_iosize_max                        0  Default     Immed
aio_listio_max                      256  Default     Immed
aio_max_ops                        2048  Default     Immed
aio_monitor_run_sec                  30  Default     Immed
aio_physmem_pct                      10  Default     Immed
aio_prio_delta_max                   20  Default     Immed
aio_proc_max                          0  Default     Immed
aio_proc_thread_pct                  70  Default     Immed
aio_proc_threads                   1024  Default     Immed
aio_req_per_thread                    1  Default     Immed
allocate_fs_swapmap                   0  Default
alwaysdump                            0  Default     Immed
audit_memory_usage                    5  Default     Immed
audit_track_paths                     0  Default     Auto
base_pagesize                         4  Default
copy_on_write                         1  Default     Immed
core_addshmem_read                    0  Default     Immed
core_addshmem_write                   0  Default     Immed
create_fastlinks                      0  Default
default_disk_ir                       0  Default
diskaudit_flush_interval              5  Default     Immed
dlpi_max_ub_promisc                   1  Default     Immed
dma32_pool_size                 4194304  4194304
dmp_rootdev_is_vol                    0  Default
dmp_swapdev_is_vol                    0  Default
dnlc_hash_locks                     512  Default
dontdump                              0  Default     Immed
dst                                   1  Default
dump_compress_on                      1  Default     Immed
dump_concurrent_on                    1  Default     Immed
executable_stack                      0  Default     Immed
expanded_node_host_names              0  Default     Immed
fcache_fb_policy                      0  Default     Immed
fcache_seqlimit_file                100  Default     Immed
fcache_seqlimit_system              100  Default     Immed
fcd_disable_mgmt_lun                  0  Default     Immed
fclp_ifc_disable_mgmt_lun             0  Default     Immed
filecache_max                1018863616  Default     Auto
filecache_min                 101883904  Default     Auto
fr_statemax                      800000  Default
fr_tcpidletimeout                 86400  Default
fs_async                              0  Default
fs_symlinks                          20  Default     Immed
ftable_hash_locks                    64  Default
gvid_no_claim_dev                     0  Default
hires_timeout_enable                  0  Default     Immed
hp_hfs_mtra_enabled                   1  Default
intr_strobe_ics_pct                  80  Default     Immed
io_ports_hash_locks                  64  Default
ipf_icmp6_passthru                    0  Default
ipl_buffer_sz                      8192  Default
ipl_logall                            0  Default
ipl_suppress                          1  Default
ipmi_watchdog_action                  0  Default     Immed
ksi_alloc_max                     33600  Default     Immed
ksi_send_max                         32  Default
lcpu_attr                             0  Default     Auto
max_acct_file_size              2560000  Default     Immed
max_async_ports                    4096  Default     Immed
max_mem_window                        0  Default     Immed
max_thread_proc                    1100  1100        Immed
maxdsiz                      1073741824  Default     Immed
maxdsiz_64bit                4294967296  Default     Immed
maxfiles                           2048  Default
maxfiles_lim                       4096  Default     Immed
maxrsessiz                      8388608  Default
maxrsessiz_64bit                8388608  Default
maxssiz                         8388608  Default     Immed
maxssiz_64bit                 268435456  Default     Immed
maxtsiz                       100663296  Default     Immed
maxtsiz_64bit                1073741824  Default     Immed
maxuprc                             256  Default     Immed
mca_recovery_on                       0  Default     Auto
msgmbs                                8  Default     Immed
msgmnb                            16384  Default     Immed
msgmni                              512  Default     Immed
msgtql                             1024  Default     Immed
ncdnode                             150  Default
nclist                             8292  Default
ncsize                             8976  Default
nflocks                            4096  Default     Auto
nfs2_max_threads                      8  Default     Immed
nfs2_nra                              4  Default     Immed
nfs3_bsize                        32768  Default     Immed
nfs3_do_readdirplus                   1  Default     Immed
nfs3_jukebox_delay                 1000  Default     Immed
nfs3_max_threads                      8  Default     Immed
nfs3_max_transfer_size          1048576  Default     Immed
nfs3_max_transfer_size_cots     1048576  Default     Immed
nfs3_nra                              4  Default     Immed
nfs4_bsize                        32768  Default     Immed
nfs4_max_threads                      8  Default     Immed
nfs4_max_transfer_size          1048576  Default     Immed
nfs4_max_transfer_size_cots     1048576  Default     Immed
nfs4_nra                              4  Default     Immed
nfs_portmon                           0  Default     Immed
ngroups_max                          20  Default     Immed
ninode                             8192  Default
nkthread                           8416  Default     Immed
nproc                              4200  Default     Immed
npty                                 60  Default
nstrpty                              60  Default
nstrtel                              60  Default
nswapdev                             32  Default
nswapfs                              32  Default
numa_policy                           0  Default     Immed
pa_maxssiz_32bit               83648512  Default
pa_maxssiz_64bit              536870912  Default
pagezero_daemon_enabled               1  Default     Immed
patch_active_text                     1  Default     Immed
pci_eh_enable                         1  Default
pci_error_tolerance_time           1440  Default     Immed
process_id_max                    30000  Default     Auto
process_id_min                        0  Default     Auto
pwr_idle_ctl                          0  Default     Auto
remote_nfs_swap                       0  Default
rng_bitvals                  9876543210  Default
rng_sleeptime                         2  Default
rtsched_numpri                       32  Default
sched_thread_affinity                 6  Default     Immed
scroll_lines                        100  Default
secure_sid_scripts                    1  Default     Immed
semaem                            16384  Default
semmni                             2048  Default
semmns                             4096  Default
semmnu                              256  Default
semmsl                             2048  Default     Immed
semume                              100  Default
semvmx                            32767  Default
shmmax                       1073741824  Default     Immed
shmmni                              400  Default     Immed
shmseg                              300  Default     Immed
streampipes                           0  Default
swchunk                            2048  Default
sysv_hash_locks                     128  Default
tcphashsz                             0  Default
timeslice                            10  Default
timezone                            420  Default
uname_eoverflow                       1  Default     Immed
vnode_cd_hash_locks                 128  Default
vnode_hash_locks                    128  Default
vol_checkpt_default               10240  Default
vol_dcm_replay_size              262144  Default
vol_default_iodelay                  50  Default
vol_fmr_logsz                         4  Default
vol_max_bchain                       32  Default
vol_max_nconfigs                     20  Default
vol_max_nlogs                        20  Default
vol_max_nmpool_sz               4194304  Default     Immed
vol_max_prm_dgs                    1024  Default
vol_max_rdback_sz               4194304  Default     Immed
vol_max_vol                     8388608  Default
vol_max_wrspool_sz              4194304  Default     Immed
vol_maxio                           256  Default
vol_maxioctl                      32768  Default
vol_maxkiocount                    2048  Default
vol_maxparallelio                   256  Default
vol_maxspecialio                    256  Default
vol_maxstablebufsize                256  Default
vol_min_lowmem_sz                532480  Default     Immed
vol_mvr_maxround                    256  Default
vol_nm_hb_timeout                    10  Default
vol_rootdev_is_vol                    0  Default
vol_rvio_maxpool_sz             4194304  Default     Immed
vol_subdisk_num                    4096  Default
vol_swapdev_is_vol                    0  Default
vol_vvr_transport                     1  Default
vol_vvr_use_nat                       0  Default
volcvm_cluster_size                  16  Default
volcvm_smartsync                      1  Default
voldrl_max_drtregs                 2048  Default
voldrl_min_regionsz                 512  Default
voliomem_chunk_size               65536  Default
voliomem_maxpool_sz             4194304  Default
voliot_errbuf_dflt                16384  Default
voliot_iobuf_default               8192  Default
voliot_iobuf_limit               131072  Default
voliot_iobuf_max                  65536  Default
voliot_max_open                      32  Default
volpagemod_max_memsz               6144  Default     Immed
volraid_rsrtransmax                   1  Default
vps_ceiling                          16  Default     Immed
vps_chatr_ceiling               1048576  Default     Immed
vps_pagesize                         16  Default     Immed
vx_maxlink                        32767  Default
vx_ninode                             0  Default     Immed
vxfs_bc_bufhwm                        0  Default     Immed
vxfs_ifree_timelag                    0  Default     Immed
vxtask_max_monitors                  32  Default

As you can see, there are two types of kernel parameters. One takes place immediately (immed), while the others take a reboot (Default) to take effect.

To view one parameter, let's use the kctune command. You can just type in kctune as shown in Listing 16.

Listing 16. Using kctune
# kctune vx_ninode
Tunable    Value  Expression  Changes
vx_ninode      0  Default     Immed

I like to use the -B parameter when making a change that backs up the older value. Let's make a change (see Listing 17).

Listing 17. Using the -B parameter
# kctune -B vps_ceiling=32
       * The automatic 'backup' configuration has been updated.
       * Future operations will update the backup without prompting.
       * The requested changes have been applied to the currently
         running configuration.
Tunable                Value  Expression  Changes
vps_ceiling  (before)     16  Default     Immed
             (now)        32  32

Let's look at SAM. In the kernel configuration section shown in Listing 18, you'll view the usage of the kernel tunables.

Listing 18. Kernel configuration section
 SMH->Kernel Configuration
    t - Tunables                        View or modify kernel tunables

    m - Modules                         View or modify kernel modules and drivers

    a - Alarms                          View or modify alarms for kernel tunables

    l - Log Viewer                      View the changes made to kernel tunables 
                                        or modules

    u - Usage                           View usage of kernel tunables

    c - Manage Configuration            View the  options available to manage 

    b - Restore Previous Boot Values    Restores Previous Boot Values for Tunables 
                                        And Modules

                            SMH->Kernel Configuration->Usage
                                  Usage Monitoring is On
Tunable                    Current Usage             Current Setting
filecache_max              76054528                  1018863616
maxdsiz                    11403264                  1073741824
maxdsiz_64bit              42663936                  4294967296
maxfiles_lim               38                        4096
maxssiz                    786432                    8388608
maxssiz_64bit              98304                     268435456
maxtsiz                    35823616                  100663296
maxtsiz_64bit              1409024                   1073741824
maxuprc                    3                         256
max_thread_proc            21                        1100
msgmni                     2                         512
msgtql                     0                         1024
nflocks                    27                        4096
ninode                     727                       8192
nkthread                   330                       8416
nproc                      151                       4200
npty                       0                         60
nstrpty                    1                         60
nstrtel                    0                         60
nswapdev                   1                         32
nswapfs                    0                         32
semmni                     28                        2048
semmns                     146                       4096
shmmax                     17868904                  1073741824
shmmni                     7                         400
shmseg                     3                         300

HP-UX provides for a strong command-line in addition to using its menu-driven system, SAM, to perform tuning tasks. I like the overall approach that HP-UX uses with performance tuning, though I think there is just too much out there in kctune. AIX separates tuning parameters by area, as you'll see.


Unlike HP-UX or AIX, with Solaris you are going to use text files to do most of your work. The major text file is /etc/system. It is actually recommended that when moving to a new release you start with an empty file and only add tunables required by third party applications. Any changes made to /etc/system are applied only after a reboot.

Let's make a change in /etc/system: set nfs:nfs_nra=4.

This change sets the number of read-ahead blocks that are read for file systems mounted using NFS version 2 software. One important change in Solaris 10 is that many Solaris kernel parameters have now been replaced by resource controls. The command to change resource controls is the prctl command. For example, all shared memory and semaphore settings are now handled via resource controls. What this means is that any entries regarding shared memory or semaphores (I.E. sem) in /etc/system are no longer relevant. One example is with Oracle tuning. In earlier versions, we would configure SHMMAX in /etc/system and then reboot. Now we use prctl. The advantage here is that you do not need a reboot for the change to take effect. The downside is that the information gets lost on a reboot, so this needs to get entered in at a user-profile. The command to modify the value of max-shm-memory to 6 GB would be: # prctl -n project.max-shm-memory -v 6gb -r -i project user.root.

Other ways to tune include:

  • Using kmdb, the kernel debuger
  • Using mdb, the modular debugger
  • Using ndd to configure your TCP/IP parameters
  • Using /etc/default to tune NCA parameters
  • Using prtctl for changing resource controls

An example of tuning ndd is: # ndd -get /dev/tcp tcp_time_wait_interval.

What about NFS? These parameters are also in /etc/system. Some of the parameters include: nfs_cots_timeo, nfs_allow_preepoch_time and nfs4_pathconf_disable_cache

While I know some administrators prefer the old methods of editing text files, generally speaking most administrators prefer the simplicity and ease of use that either HP or IBM provides to tune systems. While in some ways the prtctl is helpful, it also confuses things, because for some areas you use prtctl and for others you still use /etc/system.


With AIX, there are several tuning commands, depending on whether you are tuning I/O (separate utilities for network and disk), Memory or CPU. They are as follows: ioo, no vmm, or schedo. For nfs, nfso is used to tune the nfs subsystem. There were also some nice improvements on the performance front for AIX. 6.1. Some of the more important changes include improving default parameters to more accurately day-to-day work and the incorporation of restricted tunables -- to help prevent administrators from messing things up. Here is a summary of the recent improvements:

  • Improvement on default tunables for each of the following areas: vmo, ioo, aio, no, nfso, schedo
  • On the filesystem front, changes were made to the Enhanced Journaling File System that allow you to mount a JFS2 f/s without logging. Sure this can improve performance, but I don't recommend it because it can cause availability issues.
  • I/O pacing allows for the ability to limit the number of pending I/O requests to a file and has the effect of preventing disk I/O-intensive processes. AIX 6.1 enables I/O pacing by default. In AIX 5.3, you needed to explicitly enable this feature.
  • AIO is an AIX software subsystem that allows processes to issue I/O operations without waiting for I/O to finish. With AIX 6.1 AIO subsystems are now loaded by default and not activated. They are automatically started at the time when the application initiates the AIO I/O request. Furthermore there is no more aioo command, which had been used to configure aio servers.
  • A new network caching daemon has also been introduced to improve performance when resolving using DNS. This is started up with AIX's System Resource Controller (SRC). The netcdctrol utility is used to manage this.

Let's make some changes.

This command allocates 16777216 bytes to provide large pages, which is particularly useful in an Oracle environment: # vmo -r -o lgpg_size=16777216 lgpg_regions=256.

Let's look at virtual memory. The AIX virtual memory manager serves all memory on the box, not just virtual memory. It's always important to reduce the amount of paging on UNIX systems. How can we force the AIX virtual memory manager to do so? Computational memory is used while your process is working on computing information and are transitory temporary segments. They have no permanent disk storage location. On the other hand, file memory uses persistent storage not working segments. Given the choice you would much rather have file memory pages to disk rather than computational memory. There are several parameters within the virtual memory settings that let us do this. We need to tune the minperm, maxperm and maxclient. To prevent AIX from paging working storage and to utilize the caching from your database, you need to set maxperm to a high value (greater than 90) and to make sure the lru_file_repage=0. This parameter indicates whether or not the VMM re-page counts should be considered and what type of memory it should steal. The default setting is 1, so you need to change it to 0. This is done using the vmo command. When you set the parameter to 0, it tells the VMM that you prefer that it steal only file pages rather than computational pages. In AIX 6.1, minperm, maxperm and maxclient are already set with the proper values. In AIX 5.3, you would do the following shown in Listing 19.

Listing 19. Setting the minperm, maxperm and maxclient values in AIX 5.3
# vmo -p -o minperm%=3
# vmo -p -o maxperm%=97
# vmo -p -o maxclient%=97

IBM wins out in performance tuning, because by far it is the most intuitive to use. While HP-UX has made tremendous strides in recent years towards becoming a self-tuning system, its not quite there yet. Solaris introduced some positive change with prtctl, though there are just too many facilities to configure changes. With IBM, it's all very simple. vmo for memory, ioo for disk/io, schedo for CPU, no for network and nfso for nfs. It can't be any easier. Furthermore, the improvements in AIX 6.1 with tuning parameters help separate IBM even that much more from the pack.


This article compared and contrasted recent innovations and feature/functionality improvements of AIX 6.1 compared to recent versions of HP-UX (11Iv3) and Solaris (10/08). It also looked at how some of the commands and approach differ as they relate to certain areas, such as configuring networking and performance tuning. The article also summarized virtualization and some of the basic differences between the UNIX flavors. You decide what you prefer best, but in my comparisons, IBM compared very favorably in every area. HP-UX was most similar to IBM, while Solaris mostly maintained their text-file centric approach to system administration.





developerWorks: Sign in

Required fields are indicated with an asterisk (*).

Need an IBM ID?
Forgot your IBM ID?

Forgot your password?
Change your password

By clicking Submit, you agree to the developerWorks terms of use.


The first time you sign into developerWorks, a profile is created for you. Information in your profile (your name, country/region, and company name) is displayed to the public and will accompany any content you post, unless you opt to hide your company name. You may update your IBM account at any time.

All information submitted is secure.

Choose your display name

The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerWorks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

Required fields are indicated with an asterisk (*).

(Must be between 3 – 31 characters.)

By clicking Submit, you agree to the developerWorks terms of use.


All information submitted is secure.

Dig deeper into AIX and Unix on developerWorks

Zone=AIX and UNIX
ArticleTitle=AIX 6.1, Solaris 10, and HP-UX and the System p