Kbase 17228: AIX Performance Issues: -directio and syncd
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  11/3/2008 |
|
Status: Verified
GOAL:
Explanation of the use of the -directio option.
SYMPTOM(s):
Performance problems.
FACT(s) (Environment):
IBM AIX
OpenEdge 10.x
Progress 9.x
Progress 8.x
FIX:
Due to the sync() being synchronous on AIX, unlike some other UNIX platforms, Progress on some occasions has had some performance problems directly related to this system call on this OS.
In order to get Progress to work more efficiently, the belief was not to issue the sync() system call. In order to do this Progress needed a way to get around using the UNIX buffer pool. In order to circumvent the buffer pool problem, direct writes must be made to disk. Consequently the -directio option was enabled.
When -directio is enabled in the database startup parameters, all database writes are written directly to disk, thereby subverting the filesystem buffer cache. You must retune your system with this in mind.
During the retune, some considerations since every database I/O is now more expensive than it was when -directio was disabled.are:
- Decreasing the size of the filesystem buffer cache and using that memory to increase the size of the Progress buffer cache (-B).
- Adjusting the bicluster size and/or adding page writers so that there are few buffers (ideally no) flushed at checkpoint and checkpoints are > 1 minute
- In general, watch the buffer hit rate %
An alternative to using -directio startup option is to decrease the syncd interval.
A replacement option to the -directio parameter, decreasing the sycnd interval causes the sync() system call that Progress issues at checkpoint time not to be so expensive.
AIX comes with a syncd that should be started at boot time. The job of the syncd is to perform a sync() at a specified interval.
By default, it performs a sync() every 60 seconds. Tests have displayed the following:
syncd 60 - sync every 60 seconds - long pauses when checkpointing
syncd 15 - sync every 15 seconds - 10 second pauses at checkpoints
syncd 5 - sync every 5 seconds - 2 -5 second pauses at checkpoints
syncd 1 - sync every second - < 1 second pauses at checkpoints
To change this value, find the startup script that contains the startup option for the syncd. When found, change the default to "syncd <value>"
When testing, it is important to make sure that there is only one syncd running at a time. To guarantee only one syncd is running, do the following:
$ ps -ef | grep syncd
At this point kill any that exist and restart a new one.
Once the optimum values have been decided, syncd can be set permanently in /sbin/rc.boot
For example: To set the sync interval from the default 60 to 10 seconds after reboot:
nohup /usr/sbin/syncd 10 > /dev
ull 2>&1 &