Testing the Raw Performance of Your MQ Transaction Log Filesystem on Linux, Using MQLDT
The capabilities of the infrastructure hosting your MQ transaction log can be critical to the performance of persistent messaging. Tools like fio can be misleading, when reporting the capability of the filesystem, unless you set the properties right. Whilst data for more than one user may be aggregated in the MQ logger, improving I/O efficiency, the writes of persistent messages to the transaction log must be synchronous to ensure consistency of the data. This means that simple log disk tests may be unrepresentative, where they take advantage of OS buffers, which ware not suitable for committing important data.
MQLDT is a simple tool which can be used to lay out a set of files, similar to the MQ transaction log, and test the performance of synchronous writes to these files, in a similar way to the MQ logger, testing with one or more sizes of write. It is available for download on GitHub here
Used in conjunction with some MQ configuration data (log parameters), and system topic monitoring data (which from MQ V9.0.4 reports the average size of the writes to the transaction log, viewable from amqsrua), you can gain some useful performance information with regard to a key component of your persistent messaging solution.
MQLDT will report the maximum bandwidth achievable at a given write size. This will always be larger than the MQ write bandwidth, as MQ has other work to do, apart from just writing to the log. THe tool will enable you to determine whether your filesystem is capable, in principle, of writing at the rate you require however, and can be used to report the latency of writes.
The chart blow shows results from tests of a varying number of concurrent applications (x-axis) connected to MQ, driving a persistent workload. As the level of concurrency increases, the log write bandwidth increases (along with an increase of blocksize written, caused by aggregation of data in the MQ log buffers). MQLDT has been run with the same write sizes reported by MQ to show raw filesystem performance.
MQLDT Sample Output:
Options (specified or defaulted to) ===================================================================================== Write blocksize (--bsize) : 128K Directory to write to (--dir) : /var/san1/testdir Test file prefix (--filePrefix) : mqtestfile Number of files to write to (--numFiles) : 24 Size of test files (--fileSize) : 67108864 Test duration (--duration) : 20 Creating files... Executing test for write blocksize 131072 (128k). Seconds elapsed -> 20/20 Total writes to files : 46,178 Total bytes written to files : 6,052,642,816 Max bytes/sec written to files (over 1 sec interval) : 311,689,216 Min bytes/sec written to files (over 1 sec interval) : 297,795,584 Avg bytes/sec written to files : 302,732,356 Max latency of write (ns) : 4,977,438 (#24,649) Min bytes/sec (slowest write) : 26,333,226 Min latency of write (ns) : 375,889 (#42,421) Max bytes/sec (fastest write) : 348,698,688 Avg latency of write (ns) : 4,935,648