London Stock Exchange smashes world record trade speed with Linux
computerworlduk.com
computerworlduk.com
Microsoft had run huge ads on how LSE was using .NET and Windows in critical financial applications. Within a year LSE had suffered crashes in the same critical areas.
In fairness, though, it may not have been MS' fault - crappy programming is crappy, no matter the underlying OS. And Linux fanboys should wait to see if the new system has roll-out issues...
http://www.a-teamgroup.com/article/voltaire-powering-fastest...
Can you elaborate on this? Are they developing a fork of the Linux kernel? A new Linux distro? Or could it be that they are developing the trading "platform", using a commodity Linux distro?
... these days I can't help thinking "is faster really a good idea?"
They already do that. Now they are able to trade faster than their machines can think.
Honestly, is the reason Microsoft can even get consideration for these projects because there are so many tech executives at major corporations who used to be Microsofties?
Accenture developed .NET software for the LSE and a company in Sri Lanka made the new LSE software for Linux
The amount of work the matching engine has to do is non-trivial but straightforward. Take order, look at type, if market order look for a match on the limit order book, if not handle appropriately (this bit is not included in the latency as it might involve routing to other venues, etc). If it is a limit order it must find the right place to position that order within the order book. Building an order book data structure that is cache friendly and thus very fast is not rocket science but it certainly isn't easy.
Every exchange we negotiate with quotes us their ping-test results. I always have to remind them that there's a lot more to getting an order into the book (especially via FIX) than just TCP.
In general, I would blame the incompetence of Accenture for the failure: bad decisions, bad architecture, bad management, using the wrong tools, crappy code.
Isn't it something Red Hat did a long time ago that was widely regarded as a Very Bad Idea?
And why would you use HTTP in this scenario anyway?
The speed of a system as complex as an exchange is influenced by many factors--network infrastructure, language of choice, software architecture, OS tuning.
In fact, garbage collected languages are known to perform well in serious low-latency systems.
Some firms have been known to rewrite the network stack for performance.
So presuming that it is an OS issue, or a language issue, or a vendor issue alone is not likely to arrive at a useful answer.
For example: improved infraestructure management, overall performance increase, fast patches for security bugs, and a long etcetera.
Of course, as JoachimSchipper says, if the applications on top of the OS ar crap, a different OS won't solve the problem, but to have a good underlying OS is a good start.
(I would love to get my hands on one of those suckers and outfit it with Redis.)
Despite being RAM bound it's easy to parallelize because each stock is its own isolated exchange, so they can be distributed across hardware in proportion to the average volume in each stock. In other words, it's localized but embarrassingly parallel.
The only traditional databases are for reporting purposes e.g. who traded with whom and are append-only as far as the core exchange code is concerned. The reporting database is coupled through the same firehose feed that you can get as an exchange member, albeit with more redundancy. There are also access control systems that only come into play when you first open a session, and lots of other moving parts each with their own task. For example, if you lose your connection to the exchange you can ask a certain (non-core) server to replay all the events that happened from a given point in time in order to catch up. These, too, would be listening to the main event stream and spooling to disk, but the central exchange processes are RAM-only.
How do they handle machine failures? That's harder to speculate on from the outside, but if I were them I'd be running the same exchange in parallel on 2-3 machines. I don't know how it could be done without serializing the incoming order flow to make sure that each machine sees the same order of events, but it's not impossible.
I've maintained that the standard increment for trades should be hours or days, not microseconds. This way liquidity is maintained on a macro scale, and parasitic orders based on micro manipulations of the system are eliminated.
Drawing assumptions about underlying systems is speculative and somewhat ignorant.