Latency measurement

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Latency measurement


I am trying to measure QuickFix performance, but have several questions.
I hope anyone has some clues about them.

*Some  information: I am using MSVC2013 + QuickFix c++
*I use QueryPerformanceFrequency and QueryPerformanceCounter to measure to micro second precision

(1) To measure sending out messages.
Basically, I have no problem on measuring this part.
But I have seen some commercial FIX engines, which publish their benchmark.
Some of them list their measuring results on QuickFIX to compare to their product.
And usually, it shows QuickFix can handle sending message at about 7500~10000 messages per second.
(100~130 micro second / msg)

BUT, in my testing, it can only support up to 2000 messages per second. (500 micro seconds / msg)
So I wonder if anyone also test this, and share your results.
Why there is a 4x difference?

*My cpu has 3.0 Ghz, which is not super fast, but I thought it can support up to 5000 at least.

(2) To measure receiving message
About this part, I totally have no idea how to measure.

The message shown in fromApp is also processed (it should be binary information first, and then translated to string, and then translated to QuickFIX message format.) I dont know how to measure the time of this processing before the message shows in fromApp.

Simply put: How to measure from when the "information" arrived computer to when the message in fromApp is ready to be used.

(3) To measure receiving message (extracting)

In QuickFIX, we can use fromApp to get message components.
So what I do is to measure how quick QuickFIX is extracting message components.
My results show QuickFIX performances at about 50~100 micro seconds for extracting one single component (OrdID, price, symbol etc)
I am aware that QuickFIX is mostly for education purpose, so one probably shouldnt compare it with other dedicated commerical FIX engine. But I am quite surprised the performance can have such a big difference, more than 50 x (some commercial FIX engine claims they can achieve 1 micro for extracting).

What makes this such big difference? Or commercial FIX engine just brag? Or I just didnt correctly use QuickFIX, so it has a poor performance?

Many thanks