Hi All,

I have read a lot about setting the maxpgio parameter on Solaris 8 and
how it can "magically" improve the performance of the system. I would
like to see if setting maxpgio on a server will help out, but I do not
know how to check the existing value of this parameter. When I use adb
it shows the foll -

maxpgio:        0

Before I go around playing with this parameter how do I find out what
the existing setting is but do not know how to check it. Any ideas on
how to do so ?

Time permitting - following is the problem on the server

I have an Oracle server on a Netra t1 low end server (its not a
production box so could not allocate a high end server for it) with
1CPU/1GB RAM and 2x36GB disks on it. I have created a RAID 0 stripe
for the slice holding the database using Disksuite.

Currently the system is extremely slow (uptime shows load of 8, vmstat
shows around 7-10 in the run queue, and the faults col under vmstat
show number over 110k, iostat asvc_t shows around 20+ numbers etc)

Any help is highly appreciated !
"Max Paging IO" is a throttle on the number of I/O 's you can make
each second to the SWAP areas.

Historically this was set at a fraction of the I/O throughtput available
I beleive the value was set to 40 on a standard system.

The only reason to increase MAXPGIO  is if you have set up a number
of addidtional SWAP areas on additional disk drives.

If you system already is IO-Bound, increasing the number of
transfers to the swap area is not a good idea.

Check the load on your disk's  "iostat -x"  or "sar -d"
if diskload is less than 30%  i guess you could experiment
with MAXPGIO.  If diskload is more than 50%  increasing
MAXPGIO without adding more diskdrives will only make the system
slower still.
You're using the wrong display option.  maxpgio on 64 bit Solaris is a
64 bit quantity, so you need to use /E instead of /D

How can I tell?  Firstly because of my vast experience which tells me
that a value of zero for maxpgio is just plain silly ;-)

Secondly, and perhaps a little more usefully, I've looked at the size of
the variable:

$ /usr/ccs/bin/nm /dev/ksyms |grep maxpgio
[18565] |      21283984|           8|OBJT |GLOB |0    |ABS    |maxpgio

The '8' in the third column is the size of the object in bytes - 8
bytes, 64 bits, which means you use "E", not "D" (using "D" you just see
the value in the topmost bits of the variable).


# mdb -k
Loading modules: [ unix krtld genunix sd ufs_log ip usba nca sppp nfs
random ptm ipc logindmux cpc ]


> maxpgio/E

maxpgio:        40

To see values in hex you'd use J instead of X for the same reason.

If you're writing a 64 bit value (NOT something I'd recommend on a
running kernel) use Z instead of W

Note however that you can't just assume that everything's a 64 bit
quantity; some variables are still 32 bits long on a 64 bit kernel.  For

# /usr/ccs/bin/nm /dev/ksyms|grep semmns
[12309] |       2013479920|                     4|OBJT |GLOB |0
|ABS       |seminfo_semmns

A size of 4 bytes in column 3 shows that this is a 32 bit quantity.

# mdb -k
Loading modules: [ unix krtld genunix sd ufs_log ip usba nca sppp nfs
random ptm ipc logindmux cpc ]


> seminfo_semmns/E

seminfo_semmns: 257698037790

Obvious twaddle.


> seminfo_semmns/D

seminfo_semmns: 60

That's better.

This will be documented as Infodoc 44604.

Other related Topics: