# US 2013/0159449 A1 · Method and Apparatus for Low Latency Data Distribution

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2013/0159449 A1
- Document ID: US20130159449A1
- Status: Published application
- Kind: A1
- Application number: 13/440,118
- Filed: 2012-04-05
- Published: 2013-06-20
- Earliest claimed: 2011-12-14
- Assignees: Exegy Incorporated
- Inventors: David E. Taylor; Scott Parsons; David Vincent Schuehler; Todd Alan Strader; Ryan L. Eder
- Web page: https://patentgrep.com/patent/US20130159449A1

## CPC

- G06F 15/167: using a common memory, e.g. mailbox
- G06F 9/54: Interprogram communication
- G06F 9/544: {Buffers; Shared memory; Pipes}
- G06F 15/17331: {Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Various techniques are disclosed for distributing data, particularly real-time data such as financial market data, to data consumers at low latency. Exemplary embodiments include embodiments that employ adaptive data distribution techniques and embodiments that employ a multi-class distribution engine.

## Claims

### Claim 1

A method for data distribution, the method comprising:
adaptively distributing data to a data consumer via a plurality of direct memory access (DMA) write operations to a shared memory in the data consumer;
wherein the adaptively distributing step is performed by a processor.

### Claim 2 (depends on 1)

The method of claim 1 wherein the processor is resident in a data producer, the processor performing the adaptively delivering step with a plurality of different data consumers independently of any read operations from the shared memory that are performed by the data consumers.

### Claim 3 (depends on 2)

The method of claim 2 further comprising:
the data producer maintaining a plurality of data records corresponding to a plurality of items, a plurality of the data consumers being subscribed to information about a plurality of the items;
the data producer receiving new data relating to the items;
the data producer updating the maintained data records in response to the received new data;
the data producer determining whether any data consumers are subscribers to the updated data records; and
the data producer performing the adaptively delivering step with respect to the updated data records for the data consumers that are subscribed to the items corresponding to the updated data records.

### Claim 4 (depends on 3)

The method of claim 3 further comprising:
the data producer maintaining a plurality of client distribution records (CDRs), each CDR comprising a data consumer identifier, an interface address, a base address, and a shared memory size identifier;
the data producer maintaining a plurality of record offsets, each corresponding to one of the items;
the data producer maintaining a queue of pending transfers to the data consumers;
the data producer updating the queue with events based on the new data receiving step; and
the data producer performing the adaptively delivering step for the updated data records corresponding to the events in the queue such that the data producer DMA writes data from the updated data records to the shared memories in the data consumers at locations in the shared memories determined from the CDRs.

### Claim 5 (depends on 4)

The method of claim 4 wherein the record offsets are applicable across all of the data consumers.

### Claim 6 (depends on 4)

The method of claim 4 wherein the step of maintaining the record offsets comprises the data producer maintaining different sets of record offsets for a plurality of the data consumers.

### Claim 7 (depends on 4)

The method of claim 4 wherein the data producer continues to update a data record for an item in response to received new data for that item even if there is a pending transfer in the queue for that data record.

### Claim 8 (depends on 4)

The method of claim 4 further comprising:
the data producer determining whether the same updated data record is pending for transfer to a plurality of data consumers; and
in response to determining that the same updated data record is pending for transfer to a plurality of data consumers, the data producer grouping the DMA write operations for the updated data record to those data consumers.

### Claim 9 (depends on 8)

The method of claim 8 further comprising the data producer performing the determining step using a hash table.

### Claim 10 (depends on 8)

The method of claim 8 further comprising the data producer performing the determining step using a Bloom filter.

### Claim 11 (depends on 3)

The method of claim 3 wherein the data producer performs the method steps across unicast DMA-capable interconnects.

### Claim 12 (depends on 3)

The method of claim 3 wherein the data producer performs the method steps across multicast DMA-capable interconnects.

### Claim 13 (depends on 3)

The method of claim 3 wherein the data comprises financial market data.

### Claim 14 (depends on 3)

The method of claim 3 wherein the processor is resident within an intelligent network interface card (NIC).

### Claim 15 (depends on 3)

The method of claim 3 wherein the processor is co-resident with a DMA engine.

### Claim 16 (depends on 3)

The method of claim 3 wherein the processor is resident within a connection multiplexer.

### Claim 17 (depends on 3)

The method of claim 3 wherein the processor is resident within an edge cache device.

### Claim 18 (depends on 3)

The method of claim 3 wherein the processor is resident within a ticker plant.

### Claim 19 (depends on 3)

The method of claim 3 wherein the processor comprises a coprocessor.

### Claim 20 (depends on 19)

The method of claim 19 wherein the coprocessor comprises a reconfigurable logic device.

### Claim 21 (depends on 19)

The method of claim 19 wherein the coprocessor comprises a multi-core processor.

### Claim 22 (depends on 19)

The method of claim 19 wherein the coprocessor comprises a graphics processing unit (GPU).

### Claim 23

An apparatus for data distribution comprising:
a processor configured to adaptively distribute data to a data consumer via a plurality of direct memory access (DMA) write operations to a shared memory in the data consumer.

### Claim 24

A method for data distribution comprising:
generating a plurality of data streams, each data stream corresponding to a data consumer; and
distributing the data streams to their associated data consumers via a plurality of direct memory access (DMA) write operations to a plurality of shared memories in the data consumers without processing feedback information from the data consumers; and
wherein the method steps are performed by a processor.

### Claim 25 (depends on 24)

The method of claim 24 wherein the generating step comprises the processor generating a plurality of unique data streams corresponding to each data consumer, each unique data stream comprising only data relating to a set of items that are of interest to that data stream's corresponding data consumer.

### Claim 26 (depends on 24)

The method of claim 24 wherein the data streams comprise a plurality of update events, the method further comprising:
the processor tracking where to write the update events in the shared memories via a plurality of write pointers, wherein each data consumer is configured to read data from the shared memory via a read pointer, and wherein the processor has no visibility of the data consumers' read pointers.

### Claim 27 (depends on 26)

The method of claim 26 wherein the shared memory comprises a ring buffer.

### Claim 28 (depends on 27)

The method of any of claim 27 wherein each update event comprises:
a header field;
an event field;
a checksum field; and
a blank header field.

### Claim 29 (depends on 28)

The method of claim 28 wherein the header field comprises a token, a sequence and a length.

### Claim 30 (depends on 28)

The method of claim 28 further comprising triggering a resynchronize operation in response to a read by the data consumer of a header field that contains an invalid unique token, an invalid message length, or an unexpected sequence number.

### Claim 31 (depends on 28)

The method of claim 28 further comprising the data consumer restarting its event processing when an incorrect checksum is detected.

### Claim 32 (depends on 24)

The method of claim 24 wherein the data streams comprise financial market data.

### Claim 33 (depends on 24)

The method of claim 24 wherein the processor is resident within an intelligent network interface card (NIC).

### Claim 34 (depends on 24)

The method of claim 24 wherein the processor is co-resident with a DMA engine.

### Claim 35 (depends on 24)

The method of claim 24 wherein the processor is resident within a connection multiplexer.

### Claim 36 (depends on 24)

The method of claim 24 wherein the processor is resident within an edge cache device.

### Claim 37 (depends on 24)

The method of claim 24 wherein the processor is resident within a ticker plant.

### Claim 38 (depends on 24)

The method of claim 24 wherein the processor comprises a coprocessor.

### Claim 39 (depends on 38)

The method of claim 38 wherein the coprocessor comprises a reconfigurable logic device.

### Claim 40 (depends on 38)

The method of claim 38 wherein the coprocessor comprises a multi-core processor.

### Claim 41 (depends on 38)

The method of claim 38 wherein the coprocessor comprises a graphics processing unit (GPU).

### Claim 42

An apparatus for data distribution comprising:
a processor configured to (1) generate a plurality of data streams, each data stream corresponding to a data consumer, and (2) distribute the data streams to their associated data consumers via a plurality of direct memory access (DMA) write operations to a plurality of shared memories in the data consumers without processing feedback information from the data consumers.

### Claim 43

A method for data distribution, the method comprising:
performing a distribution of data to a plurality of data consumers wherein the data distribution is metered on a per-data consumer/per-data item basis; and
wherein the performing step is performed by a processor.

### Claim 44 (depends on 43)

The method of claim 43 further comprising the processor selectively performing data metering on at least a portion of the data in accordance with a metering policy.

### Claim 45 (depends on 44)

The method of claim 44 wherein the metering step utilizes a timing wheel with constant insertion time.

### Claim 46 (depends on 45)

The method of claim 45 further comprising the processor performing a fanout operation, and wherein the processor performs the metering and fanout operations independently.

### Claim 47 (depends on 44)

The method of claim 44 further comprising the processor classifying data into metered and real-time classes on a per-event basis.

### Claim 48 (depends on 44)

The method of claim 44 further comprising the processor (1) classifying data into metered and real-time classes on a per-event basis, and (2) performing a fanout operation, and wherein the data classification, metering, and fanout processing is performed in parallel.

### Claim 49 (depends on 43)

The method of claim 43 wherein the processor comprises a metering engine, the metering engine maintaining a table of records for each data item, wherein each record comprises:
a client data map that maintains a list of clients with subscriptions to the data item;
a data item index number;
a global dirty bit;
a global last time sent;
a current image of the data item record;
a size of the data item record image.

### Claim 50 (depends on 49)

The method of claim 49 wherein the client data map comprises:
a dirty bit;
a last time sent;
a client-specific meter rate.

### Claim 51 (depends on 43)

The method of claim 43 wherein the processor is resident within a data distribution node.

### Claim 52 (depends on 43)

The method of claim 43 wherein the data comprises financial market data.

### Claim 53 (depends on 43)

The method of claim 43 wherein the processor is resident within an intelligent network interface card (NIC).

### Claim 54 (depends on 43)

The method of claim 43 wherein the processor is co-resident with a DMA engine.

### Claim 55 (depends on 43)

The method of claim 43 wherein the processor is resident within a connection multiplexer.

### Claim 56 (depends on 43)

The method of claim 43 wherein the processor is resident within an edge cache device.

### Claim 57 (depends on 43)

The method of claim 43 wherein the processor is resident within a ticker plant.

### Claim 58 (depends on 43)

The method of claim 43 wherein the processor comprises a coprocessor.

### Claim 59 (depends on 58)

The method of claim 58 wherein the coprocessor comprises a reconfigurable logic device.

### Claim 60 (depends on 58)

The method of claim 58 wherein the coprocessor comprises a multi-core processor.

### Claim 61 (depends on 58)

The method of claim 58 wherein the coprocessor comprises a graphics processing unit (GPU).

### Claim 62

An apparatus for data distribution comprising:
a processor configured to perform a distribution of data to a plurality of data consumers wherein the data distribution is metered on a per-data consumer/per-data item basis.

### Claim 63

An apparatus for distributing data, the apparatus comprising:
a multi-class distribution engine (MDE), the MDE configured to distribute data belonging to a plurality of classes on a class-specific basis from a data producer to a data consumer according to at least two members of the group consisting of (1) a critical data distribution technique, (2) an adaptive data distribution technique, and (3) a metered data distribution technique.

### Claim 64 (depends on 63)

The apparatus of claim 63 wherein the MDE is further configured to distribute data belonging to a plurality of classes on a class-specific basis from a data producer to a data consumer via a plurality of direct memory access (DMA) write operations to a shared memory in the data consumer according to at least two members of the group consisting of (1) a critical data distribution technique, (2) an adaptive data distribution technique, and (3) a metered data distribution technique.

### Claim 65 (depends on 64)

The apparatus of claim 64 wherein the MDE is further configured to distribute the data on a class-specific basis from a data producer to a plurality of data consumers via a plurality of direct memory access (DMA) write operations to a plurality of shared memories in the data consumers according to at least two members of the group consisting of (1) a critical data distribution technique, (2) an adaptive data distribution technique, and (3) a metered data distribution technique.

### Claim 66 (depends on 65)

The apparatus of claim 65 wherein the data comprises a plurality of update events for a plurality of items, and wherein the MDE comprises an update classification engine (UCE), the UCE configured to determine a class for each update event, the MDE further configured to distribute the update events to the data consumers in accordance with the determined class for each update event.

### Claim 67 (depends on 65)

The apparatus of claim 65 wherein the MDE comprises (1) a plurality of output interconnection interfaces, (2) a plurality of transmission engines, and (3) a scheduler configured to ensure that each transmission engine utilizes a specified fraction of the bandwidth available on the output interconnection interfaces.

### Claim 68 (depends on 65)

The apparatus of claim 65 wherein the MDE is configured for processing streaming financial market data.

### Claim 69 (depends on 65)

The apparatus of claim 65 wherein the MDE is resident in a distribution node.

### Claim 70 (depends on 69)

The apparatus of claim 69 wherein the distribution node comprises:
a shared memory data cache;
a control plane;
a consumer distribution record memory;
the MDE;
an upstream DMA interconnect adapter; and
a downstream DMA interconnect adapter.

### Claim 71 (depends on 69)

The apparatus of claim 69 wherein the distribution node comprises:
a shared memory data cache;
a control plane;
a consumer distribution record memory;
the MDE;
an upstream DMA interconnect adapter; and
a downstream message interconnect adapter.

### Claim 72 (depends on 69)

The apparatus of claim 69 wherein the distribution node comprises:
a shared memory data cache;
a control plane;
a consumer distribution record memory;
the MDE;
an upstream message interconnect adapter; and
a downstream message interconnect adapter.

### Claim 73 (depends on 65)

The apparatus of claim 65 wherein the MDE is further configured to select a data distribution technique from among the group according to a static configuration.

### Claim 74 (depends on 65)

The apparatus of claim 65 wherein the MDE is further configured to dynamically select a data distribution technique from among the group.

### Claim 75 (depends on 65)

The apparatus of claim 65 wherein the MDE is resident within a connection multiplexer.

### Claim 76 (depends on 65)

The apparatus of claim 65 wherein the MDE is resident within an edge cache device.

### Claim 77 (depends on 65)

The apparatus of claim 65 wherein the MDE is resident within a ticker plant.

### Claim 78 (depends on 65)

The apparatus of claim 65 wherein the MDE is resident on a coprocessor.

### Claim 79 (depends on 78)

The apparatus of claim 78 wherein the coprocessor comprises a reconfigurable logic device.

### Claim 80 (depends on 78)

The apparatus of claim 78 wherein the coprocessor comprises a multi-core processor.

### Claim 81 (depends on 78)

The apparatus of claim 78 wherein the coprocessor comprises a graphics processing unit (GPU).

### Claim 82

A method for distributing data comprising:
selecting a distribution technique from among a plurality of distribution techniques, the plurality of distribution techniques comprising at least two members of the group consisting of (1) a critical data distribution technique, (2) an adaptive data distribution technique, and (3) a metered data distribution technique; and
distributing data belonging to a plurality of classes on a class-specific basis to a data consumer according to the selected distribution technique; and
wherein the method steps are performed by a multi-class distribution engine (MDE).

### Claim 83

A method for data consumption comprising:
receiving data in a shared memory via DMA write operations from a data producer;
maintaining a table that identifies locations in the shared memory data where a plurality of items can be found;
receiving a read request corresponding to an item;
accessing the maintained table in response to the received read request to determine the locations where data for the item corresponding to the read request can be found;
reading data from the shared memory at the location determined in response to the accessing step; and
performing a coherency checking operation on the read data;
wherein the method steps are performed by a processor.

### Claim 84 (depends on 83)

The method of claim 83 further comprising:
generating a notification when new data for an item has been written to the shared memory by the data producer; and
wherein the read request receiving step comprises receiving the read request in response to the generated notification.

### Claim 85 (depends on 84)

The method of claim 84 further comprising:
maintaining a last record cache; and
performing a delta comparison operation between the data read from the shared memory and data within the last record cache to determine which record fields were updated and to indicate the updated fields to a data consumer.

### Claim 86 (depends on 84)

The method of claim 84 further comprising:
maintaining a plurality of update notification filter rules specified by the data consumer; and
performing a filtering operation to determine whether to notify the data consumer that an update has occurred for a subscribed data item.

### Claim 87 (depends on 84)

The method of claim 84 further comprising:
processing the generated notifications to determine whether the notifications should be passed to a plurality of consuming applications.

### Claim 88 (depends on 84)

The method of claim 84 wherein the data comprises financial market data.

### Claim 89 (depends on 84)

The method of claim 84 wherein the processor comprises a coprocessor.

### Claim 90 (depends on 89)

The method of claim 89 wherein the coprocessor comprises a reconfigurable logic device.

### Claim 91 (depends on 89)

The method of claim 89 wherein the coprocessor comprises a multi-core processor.

### Claim 92 (depends on 89)

The method of claim 89 wherein the coprocessor comprises a graphics processing unit (GPU).

### Claim 93 (depends on 83)

The method of claim 83 wherein the processor is co-resident with a DMA engine in direct communication with a DMA interconnect adapter such that data is written to shared memory directly accessible by the processor and data need not cross a data consumer system interconnect into system memory or require involvement by system software.

### Claim 94

An apparatus comprising:
a processor configured to (1) receive data in a shared memory via DMA write operations from a data producer, (2) maintain a table that identifies locations in the shared memory data where a plurality of items can be found, (3) receive a read request corresponding to an item, (4) access the maintained table in response to the received read request to determine the locations where data for the item corresponding to the read request can be found, (5) read data from the shared memory at the location determined in response to the access operation, and (6) perform a coherency checking operation on the read data.

### Claim 95 (depends on 94)

The apparatus of claim 94 wherein the processor is resident on a reconfigurable logic device to offload an application programming interface (API) function from a data consumer.

### Claim 96 (depends on 95)

The apparatus of claim 95 further comprising a direct memory access (DMA) interconnect adapter in communication with the reconfigurable logic device.

### Claim 97

A method for data distribution comprising:
selectively delivering a plurality of data events to a first queue or a second queue;
a metering engine reading events from the first queue;
the metering engine performing a metering function on the events read from the first queue to control a metered transmission of the events read from the first queue;
the metering engine delivering metered events to a third queue;
a fanout engine downstream from the metering engine reading events from the second queue and metered events from the third queue;
the fanout engine distributing the read events from the second and third queues to a plurality of downstream data consumers.

### Claim 98 (depends on 97)

The method of claim 97 wherein the metering engine and the fanout engine are resident on a reconfigurable logic device.

### Claim 99 (depends on 98)

The method of claim 98 wherein the events comprise a plurality of financial market data messages.
