[Quickfix-users] Performance tests for various QuickFix flavors (with numbers)
Brought to you by:
orenmnero
From: Ted G. <tg...@Co...> - 2007-10-15 19:05:31
|
I'm building an arbitrage system, so responding to FIX messages quickly is essential. I don't need to process hundreds of messages a second, but I need to respond to the messages that arrive very quickly. I wrote a simple Initiator client that just logs in. Once Logon is complete, I change the client's heartbeat interval to be very long, so the client quits sending HeartBeats. Therefore the server will send a TestRequest every few seconds, and QuickFix will respond with a heartbeat. I'm interested in the turnaround time to do that message processing. I used Wireshark to capture the network traffic so I could see how long it takes the client to respond. To make the times as fast as possible, I've done the following: + The Log level is WARN, so nothing is being logged + Using the MemoryStore for messages + UseDataDictionary, ValidateFieldsHaveValues, CheckCompID and CheckLatency are all turned off + SocketTcpNoDelay is turned on I did this for QuickFix, QuickFix/JNI, QuickFix from C# and QuickFix/J. I was pleased with how easy it was to get this test running using the various flavors of QuickFix. The average time to respond in MICROseconds is as follows: QuickFix: 235 QuickFix/JNI: 550 QuickFix/C#: 483 QuickFix/J: 501 I don't think the JVI vs .NET vs QuickFixJ differences are significant, but the C++ times are significantly faster than anything else. For the two Java apps, I spent some time tuning the JVM's params; I also tried the JRockit JVM. My question for the group: Is there an architectural reason why QuickFix outperforms QuickFix/J? Or is this a case of C++ being faster than Java in this problem domain (network programming and byte manipulation)? Thanks, Ted |