This benchmark adds the ability to calculate wiretime latency for each message and report this as a statistic. This involves the following configuration changes from the above benchmark configurations :

  • Instead of the NYSE XDP decoder (which uses C++ decoder technology), we are decoding the NYSE XDP protocol using the Advanced Configurable Decoder™

  • The ACD™ is less high performing than the C++ decoder, but compensates for that with its flexibility (for example, the ability to easily extend the decoder to support extra message fields).

  • A premapper is used prior to the ACD decoding layer of the stack (the filter/MDPort1_nyse_arca_bbo.datafilter.json file referenced for the premapper config is the same configuration file as the mdFeedMapper listed above).

  • A protocolNormalizingMapper is added as an additional transform collector. This adds the wiretime latency calculation logic (it is performed for each message).

  • Instead of outputting to a SummaryDumper, you can see that the vmxanomalyconnector is configured instead.

For more information about the above concepts, see the Configuration Guide for VMX-Capture and in particular the Worked Example for Market Data Gap Detection.

Market Data - full BAM config, IP stats + gap detection + wiretime latency: Stack Probe Configuration

{
"probe": {
"parameters": {
"name": "MDPort1_nyse_arca_bbo",
"debug": false,
"filter": "vlan and vlan and (udp and (dst 224.0.59.154 or dst 224.0.59.153 or dst 224.0.59.157 or dst 224.0.59.28 or dst 224.0.59.24 or dst 224.0.59.25 or dst 224.0.59.26 or dst 224.0.59.152 or dst 224.0.59.29 or dst 224.0.59.155 or dst 224.0.59.27 or dst 224.0.59.156) ) ",
"protocols": [
{
"type": "module",
"value": "ethernet"
},
{
"type": "module",
"value": "ip"
},
{
"type": "module",
"value": "premapper",
"id": "gap_detection_exclusion_filter"
},
{
"type": "module",
"value": "acd",
"id": "dec_acd"
}
],
"transform_collector": [
{
"type": "module",
"value": "mapper",
"id": "mdFeedMapper"
},
{
"type": "module",
"value": "mapper",
"id": "internalEntitiesMapper"
},
{
"type": "module",
"value": "mapper",
"id": "protocolNormalizingMapper"
}
],
"stat_collector": [
{
"type": "module",
"value": "vmxanomalyconnector",
"id": "coll_vmxanomalyconnector"
}
]
},
"tables": {
"static_datafields": [
{
"name": "beeks.vp",
"type": "string",
"value": "VP"
},
{
"name": "beeks.extgroup",
"type": "string",
"value": "ICE_Full"
},
{
"name": "beeks.switchport",
"type": "string",
"value": "MDPort1"
},
{
"name": "beeks.protocol",
"type": "string",
"value": "UDP"
},
{
"name": "beeks.venue",
"type": "string",
"value": "NYSE ARCA Equities"
},
{
"name": "beeks.feed",
"type": "string",
"value": "NYSE ARCA BBO"
}
]
}
},
"gap_detection_exclusion_filter": {
"parameters": {
"json_filename": "$VMX_HOME/../server/config/agent/pmux/VP/filter/MDPort1_nyse_arca_bbo.datafilter.json"
}
},
"coll_vmxanomalyconnector": {
"parameters": {
"blocking": false,
"pool_size": 1000,
"type": "SEQBRK",
"gap_writer_json_filename": "$VMX_HOME/../server/config/agent/global/gapWriter/md.stack.gw.json"
}
},
"mdFeedMapper": {
"parameters": {
"json_filename": "$VMX_HOME/../server/config/agent/pmux/VP/mdMapper/MDPort1_nyse_arca_bbo.stack.mapper.json"
}
},
"internalEntitiesMapper": {
"parameters": {
"json_filename": "$VMX_HOME/../server/config/agent/pmux/VP/entsMapper/MDPort1_nyse_arca_bbo.stack.mapper.json"
}
},
"protocolNormalizingMapper": {
"parameters": {
"json_filename": "$VMX_HOME/../server/config/agent/global/mapper/acd.stack.mapper.json"
}
},
"dec_acd": {
"parameters": {
"decoder_json_config": "/opt/tsa/share/decoders/acd/market_data/US/nyse_arca_integrated/nyse_arca_integrated.json"
}
}
}