Salesforce

AIX Performance Issues: -directio and syncd

« Go Back

Information

 
TitleAIX Performance Issues: -directio and syncd
URL Name17228
Article Number000120589
EnvironmentProduct: Progress
Version: 8.x, 9.x
Product: OpenEdge
Version: 10.x, 11.x, 12.x
OS: AIX
Question/Problem Description
Explanation of the use of the -directio option.
Performance problems.
Steps to Reproduce
Clarifying Information
Error Message
Defect Number
Enhancement Number
Cause
Resolution
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 provided.

When -directio is enabled, all database writes are written directly to disk thereby subverting the filesystem buffer cache. The database needs to be re-tuned with this in mind: Since every database I/O is more expensive than it was without -directio , consider:
  • Decrease the size of the filesystem buffer cache and instead use that memory to increase the size of the Database Buffer Cache (-B) in shared-memory.
  • Adjust the database bicluster size and add page writers so that there are fewer buffers that need to be flushed at checkpoint time.
  • Further tune by monitoring the Buffer Hit Rate %
Decrease the syncd interval:

An alternate option to enabling -directio is to decrease the sycnd interval which causes the sync() system call in earlier Progress versions and fdsync() used currently that the database manager issues at Checkpoint time not to be as expensive.

AIX comes with a syncd deamon that is started at boot time. The job of syncd is to perform a sync() at a specified interval. Benchmark Tests have shown the following performant results:
  • syncd 60 - sync every 60 seconds - long pauses when checkpointing (default)
  • 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, verify the process listing to terminate any that exist and start a new one:

$ ps -ef | grep syncd

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/null 2>&1 &
Workaround
Notes
Keyword Phrase
Last Modified Date4/8/2021 5:19 PM

Powered by