mechanical-sympathy.blogspot.com
Mechanical Sympathy: Simple Binary Encoding
http://mechanical-sympathy.blogspot.com/2014/05/simple-binary-encoding.html
Hardware and software working together in harmony. Monday, 5 May 2014. Financial systems communicate by sending and receiving vast numbers of messages in many different formats. When people use terms like "vast" I normally think, "really.how many? So lets quantify "vast" for the finance industry. Market data feeds from financial exchanges typically can be emitting tens or hundreds of thousands of message per second, and aggregate feeds like OPRA. Last year the CME, who are a member the FIX community.
mechanical-sympathy.blogspot.com
Mechanical Sympathy: Memory Access Patterns Are Important
http://mechanical-sympathy.blogspot.com/2012/08/memory-access-patterns-are-important.html
Hardware and software working together in harmony. Sunday, 5 August 2012. Memory Access Patterns Are Important. The 1994 paper " Hitting the memory wall: implications of the obvious. Describes the problem and goes on to argue that caches do not ultimately help because of compulsory cache-misses. I aim to show that by using access patterns which display consideration for the cache hierarchy, this conclusion is not inevitable. Memory accessed recently will likely be required again soon. Pseudo randomly wal...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: Java Garbage Collection Distilled
http://mechanical-sympathy.blogspot.com/2013/07/java-garbage-collection-distilled.html
Hardware and software working together in harmony. Tuesday, 16 July 2013. Java Garbage Collection Distilled. Serial, Parallel, Concurrent, CMS, G1, Young Gen, New Gen, Old Gen, Perm Gen, Eden, Tenured, Survivor Spaces, Safepoints, and the hundreds of JVM startup flags. Does this all baffle you when trying to tune the garbage collector while trying to get the required throughput and latency from your Java application? Wise folk keep telling us, “You do not get something for nothing”. The time taken by sys...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: December 2012
http://mechanical-sympathy.blogspot.com/2012_12_01_archive.html
Hardware and software working together in harmony. Wednesday, 19 December 2012. Mechanical Sympathy Discussion Group. Lately a number of people have suggested I start a discussion group on the subject of mechanical sympathy, so I've taken the plunge and done it! The group can be a place to discuss topics related to writing software which works in harmony with the underlying hardware to gain great performance. Https:/ groups.google.com/forum/? Posted by Martin Thompson. Location: London, UK. In my last po...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: Printing Generated Assembly Code From The Hotspot JIT Compiler
http://mechanical-sympathy.blogspot.com/2013/06/printing-generated-assembly-code-from.html
Hardware and software working together in harmony. Thursday, 27 June 2013. Printing Generated Assembly Code From The Hotspot JIT Compiler. This blog illustrates how to install a Disassembler Plugin. And provides command line options for targeting a particular method. Previously it was necessary to obtain a debug build for printing the assembly code generated by the Hotspot JIT for the Oracle/SUN JVM. Since Java 7, it has been possible to print the generated assembly code if a Disassembler Plugin. It is p...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: False Sharing
http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
Hardware and software working together in harmony. Saturday, 30 July 2011. Doubles (8) and longs (8). Ints (4) and floats (4). Shorts (2) and chars (2). Booleans (1) and bytes (1). Repeat for sub-class fields. With this knowledge we can pad a cache line between any fields with 7 longs. Within the Disruptor. We pad cache lines around the RingBuffer. To show the performance impact let’s take a few threads each updating their own independent counters. These counters will be volatile long. Will be laid out i...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: June 2013
http://mechanical-sympathy.blogspot.com/2013_06_01_archive.html
Hardware and software working together in harmony. Thursday, 27 June 2013. Printing Generated Assembly Code From The Hotspot JIT Compiler. This blog illustrates how to install a Disassembler Plugin. And provides command line options for targeting a particular method. Previously it was necessary to obtain a debug build for printing the assembly code generated by the Hotspot JIT for the Oracle/SUN JVM. Since Java 7, it has been possible to print the generated assembly code if a Disassembler Plugin. It is p...
mechanical-sympathy.blogspot.com
Mechanical Sympathy: Fun with my-Channels Nirvana and Azul Zing
http://mechanical-sympathy.blogspot.com/2012/03/fun-with-my-channels-nirvana-and-azul.html
Hardware and software working together in harmony. Thursday, 22 March 2012. Fun with my-Channels Nirvana and Azul Zing. Since leaving LMAX I have been neglecting my blog a bit. This is not because I have not been doing anything interesting. Quite the opposite really, things have been so busy the blog has taken a back seat. I’ve been consulting for a number of hedge funds and product companies, most of which are super secretive. One company I have been spending quite a bit of time with is my-Channels.
real-logic.github.io
real-logic.github.io/simple-binary-encoding
http://real-logic.github.io/simple-binary-encoding
Simple Binary Encoding (SBE). SBE is an OSI layer 6 presentation for encoding/decoding messages in binary format to support low-latency applications. The SBE project. On GitHub is the reference implementation for the FIX SBE. Standard for the encoding of financial messages. SBE provides a compiler for taking a message schema and generating stubs for messaging parsing in multiple languages. Currently Java, C , and C# (courtesy of Adaptive. The design follows a number of principles.
real-logic.github.io
Agrona
http://real-logic.github.io/agrona
Agrona provides a library of data structures and utility methods that are a common need when building high-performance applications in Java and C . The sort of things you can find in Agrona. Buffers - Thread safe direct and atomic for working with on and off heap memory with memory ordering semantics. Maps - Open addressing and linear probing with int/long primitive keys to object reference values. Maps - Open addressing and linear probing with int/long primitive keys to int/long values.