DE112021005942T5 - Methods and systems for providing lock-free access to a shared memory area in a publish-and-subscribe system - Google Patents

Methods and systems for providing lock-free access to a shared memory area in a publish-and-subscribe system Download PDF

Info

Publication number
DE112021005942T5
DE112021005942T5 DE112021005942.4T DE112021005942T DE112021005942T5 DE 112021005942 T5 DE112021005942 T5 DE 112021005942T5 DE 112021005942 T DE112021005942 T DE 112021005942T DE 112021005942 T5 DE112021005942 T5 DE 112021005942T5
Authority
DE
Germany
Prior art keywords
buffer
ring buffer
publisher
ring
messages
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112021005942.4T
Other languages
German (de)
Inventor
Randall Nortman
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ford Global Technologies LLC
Original Assignee
Ford Global Technologies LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US17/097,671 external-priority patent/US11709620B2/en
Priority claimed from US17/097,590 external-priority patent/US11429290B2/en
Priority claimed from US17/097,699 external-priority patent/US11363099B2/en
Application filed by Ford Global Technologies LLC filed Critical Ford Global Technologies LLC
Publication of DE112021005942T5 publication Critical patent/DE112021005942T5/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9047Buffering arrangements including multiple buffers, e.g. buffer pools
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/55Push-based network services

Abstract

Es werden Systeme und Verfahren zum Bereitstellen eines sperrfreien Zugriffs auf einen Ringpuffer offenbart. Die Systeme umfassen einen gemeinsamen Speicher, der den Ringpuffer umfasst. Der Ringpuffer beinhaltet eine Vielzahl von sequentiell angeordneten Puffern fester Größe, die konfiguriert sind, um Nachrichten zu speichern, und einen globalen Header, der einen Zähler und eine Sperre umfasst. Die Systeme beinhalten ferner einen Publisher, der konfiguriert ist, um eine Vielzahl von Nachrichten zu der Vielzahl von Puffern fester Größe in den Ringpuffer zu schreiben, und einen Subscriber, der konfiguriert ist, um eine oder mehrere der Vielzahl von Nachrichten, die durch den Publisher geschrieben werden, zu lesen. Der Zähler liefert Informationen in Bezug auf einen Puffer mit fester Größe in dem Ringpuffer, an den der Publisher als nächstes eine Nachricht schreiben wird.Systems and methods for providing lock-free access to a ring buffer are disclosed. The systems include a shared memory that includes the ring buffer. The ring buffer includes a plurality of sequentially arranged fixed-size buffers configured to store messages and a global header that includes a counter and a lock. The systems further include a publisher configured to write a plurality of messages to the plurality of fixed-size buffers in the ring buffer, and a subscriber configured to write one or more of the plurality of messages sent by the publisher to be written, to be read. The counter provides information related to a fixed-size buffer in the ring buffer to which the publisher will next write a message.

Description

QUERVERWEIS UND PRIORITÄTSBEANSPRUCHUNGCROSS REFERENCE AND PRIORITY CLAIM

Diese Patentschrift beansprucht die Priorität der US-Patentanmeldung Nr. 17/097,590 , eingereicht am 13. November 2020, der US-Patentanmeldung Nr. 17/097,671 , eingereicht am 13. November 2020, und der US-Patentanmeldung Nr. 17/097,699 , eingereicht am 13. November 2020, die alle hierin durch Bezugnahme in ihrer Gesamtheit aufgenommen sind.This patent claims the benefit of U.S. Patent Application No. 17/097,590 , filed November 13, 2020, U.S. Patent Application No. 17/097,671 , filed November 13, 2020, and U.S. Patent Application No. 17/097,699 , filed November 13, 2020, all of which are incorporated herein by reference in their entirety.

HINTERGRUNDBACKGROUND

Roboter können eine Verarbeitung von Informationen von verschiedenen Quellen erfordern, um mit Umgebungen zu interagieren. Bestimmte Roboteranwendungen stellen hohe Bandbreitenanforderungen sowie strenge Synchronisations-, Latenz- und Zuverlässigkeitsanforderungen für Kommunikationen. Beispielsweise erfordern Robotersysteme, wie beispielsweise autonome Fahrzeuge (AVs) eine geringe Latenz, um Steuer- und Rückkopplungssignale in Echtzeit zu übertragen, da idealerweise zwischen z.B. möglichst wenig Verzögerung vorhanden sein sollte, z.B. beim Empfangen von Sensoreingaben und entsprechender Fahrzeugoperation. AVs sind anspruchsvolle Systeme, die viele verschiedene Steuersysteme oder Module zum Steuern der verschiedenen Funktionen des Fahrzeugs enthalten. Für eine synchronisierte, niedrige Latenz und einen zuverlässigen Betrieb eines AV müssen Informationen von verschiedenen Modulen in Echtzeit mit sehr geringer Latenz gesammelt und analysiert werden, um das Fahrzeug zu navigieren und/oder auf Fehler zu identifizieren und zu reagieren. Insbesondere müssen Informationen zwischen verschiedenen Modulen effizient und koordiniert ausgetauscht werden.Robots may require processing information from various sources to interact with environments. Certain robotic applications impose high bandwidth requirements as well as strict synchronization, latency and reliability requirements for communications. For example, robotic systems such as autonomous vehicles (AVs) require low latency to transmit control and feedback signals in real time, as ideally there should be as little delay as possible between, for example, receiving sensor inputs and corresponding vehicle operation. AVs are sophisticated systems that contain many different control systems or modules to control the various functions of the vehicle. For synchronized, low latency and reliable operation of an AV, information from various modules must be collected and analyzed in real time with very low latency to navigate the vehicle and/or identify and respond to faults. In particular, information must be exchanged between different modules efficiently and in a coordinated manner.

Da die Anzahl der Module zunimmt und die Aufgaben komplizierter werden, nimmt auch die zwischen den Modulen ausgetauschte Informationsmenge zu. Eine Möglichkeit, die erhöhte Anzahl von Verarbeitungsmodulen und die erhöhte Menge an ausgetauschten Informationen zu verwalten, ist ein auf einer sog. Publish/Subscribe-Architektur (Herausgeber/Abonnenten-Architektur) basierendes System. In einem Publish/Subscribe-System werden Informationen von einer Quelle nicht direkt an ein Empfangsmodul gesendet. Stattdessen wird die Information von einer Quelle gespeichert und auf einem gemeinsamen Repository (zentrale Ablage) zugänglich gemacht (d.h. veröffentlicht oder publiziert). Das Empfangsmodul abonniert die veröffentlichten Informationen aus dem gemeinsam genutzten Repository. Das Empfangsmodul kann auch Informationen auf dem gemeinsam genutzten Repository veröffentlichen, die von anderen Modulen abonniert werden können. Häufig ist ein Publisher bzw. Herausgeber (oder Schreiber) ein Erzeugen (Schreiben) von Daten und ein Subscriber bzw. Subscriber bzw. Abonnent (oder Leser) ist das Verbrauchen (Lesen) dieser Daten und/oder das Betreiben der Daten in diesen Echtzeitsystemen. Der Subscriber muss nicht zwingend alle erzeugten Daten benötigen - es muss nur die letzten oder die aktuellsten Daten erhalten. Um Leistungsziele zu erfüllen, sollte jedoch weder der Publisher noch der Subscriber auf den jeweils anderen (oder auf einen beliebigen anderen) Task warten müssen bzw. blockiert werden, bevor dieser Zugriff auf Daten erlangen kann.As the number of modules increases and tasks become more complicated, the amount of information exchanged between modules also increases. One way to manage the increased number of processing modules and the increased amount of information exchanged is a system based on a so-called publish/subscribe architecture. In a publish/subscribe system, information from a source is not sent directly to a receiving module. Instead, the information is stored by a source and made accessible (i.e. published or published) on a shared repository (central repository). The receiving module subscribes to the published information from the shared repository. The receiving module can also publish information to the shared repository, which other modules can subscribe to. Often a publisher is a producer (or writer) of data and a subscriber is a consumer (or reader) of that data and/or operating the data in these real-time systems. The subscriber does not necessarily need all the data generated - it only needs to receive the last or most current data. However, to meet performance goals, neither the publisher nor the subscriber should have to wait or be blocked for the other (or any other) task before it can gain access to data.

Der Zugriff auf Daten, die in solchen Publish/Subscribe-Systemen geschrieben worden sind, können den Zugriff auf gemeinsam genutzte Speicher beinhalten, die das gemeinsam genutzte Repository in einer Rechenumgebung speichern. Bekannte Lösungen umfassen die Verwendung eines gemeinsamen Repository vom Ringpuffertyp. Ein Ringpuffer ist ein zusammenhängendes Array von Datenzellen, die beliebige Daten enthalten können. Ein Ringpuffer ist in der Größe auf eine feste Anzahl von Datenzellen begrenzt. Nachteilig bei diesem Ansatz ist, dass dieser es für den Nutzer erforderlich macht, mehrere Einträge zu lesen und ggf. zu verwerfen, um die neuesten, d.h. die relevantesten Daten zu erhalten. Dieser Ansatz verursacht daher einen nicht unbedeutenden Leistungseinbruch. Ferner muss der Puffer ausreichend tief sein, um zu ermöglichen, dass der Schreiber immer ausreichend Platz zum Schreiben hat, und dies setzt voraus, dass der Leser und der Schreiber mit einer gleichen festen Rate laufen und nicht einer wesentlich schneller (oder langsamer) als der andere ist. Das Konstruieren von skalierbaren Anwendungen, die dies tun können, ist zunehmend anspruchsvoll, da die Anzahl der Knoten wächst, und dies wird durch andere Probleme verschlimmert, wie z.B. die zunehmende Latenzlücke zwischen den lokalen Ressourcen und den Remote-Ressourcen in einem verteilten System. Die Übertragung von Daten zwischen Netzwerkknoten kann Latenz, Netzwerküberlastung und andere Probleme hinzufügen.Access to data written in such publish/subscribe systems may include access to shared storage that stores the shared repository in a computing environment. Known solutions include using a shared ring buffer type repository. A ring buffer is a contiguous array of data cells that can contain any data. A ring buffer is limited in size to a fixed number of data cells. The disadvantage of this approach is that it requires the user to read and, if necessary, discard several entries in order to obtain the latest, i.e. the most relevant, data. This approach therefore causes a non-trivial performance hit. Further, the buffer must be sufficiently deep to allow the writer to always have sufficient space to write, and this assumes that the reader and writer are running at the same fixed rate, and not one significantly faster (or slower) than that others is. Constructing scalable applications that can do this is increasingly challenging as the number of nodes grows, and this is compounded by other issues such as the increasing latency gap between the local resources and the remote resources in a distributed system. Transferring data between network nodes can add latency, network congestion and other problems.

Dieses Dokument beschreibt Verfahren und Systeme, die auf ein Adressieren der oben beschriebenen Probleme und/oder anderer Probleme gerichtet sind.This document describes methods and systems aimed at addressing the problems described above and/or other problems.

ZUSAMMENFASSUNG DER ERFINDUNGSUMMARY OF THE INVENTION

In verschiedenen Szenarien werden Systeme und Verfahren zum Bereitstellen eines sperrfreien oder sperrarmen („lockerless“) Zugriffs auf einen Ringpuffer vorgeschlagen. Das System kann die Verfahren ausführen und kann einen gemeinsamen Speicher beinhalten, der den Ringpuffer enthält. Der Ringpuffer kann eine Vielzahl von sequentiell angeordneten Puffern fester Größe beinhalten, die konfiguriert sind, um Nachrichten zu speichern, und einen globalen Header, der einen Zähler und eine Sperre („lock“) umfasst. Das System kann auch einen Publisher umfassen, der konfiguriert ist, um eine Vielzahl von Nachrichten zu der Vielzahl von Puffern fester Größe in dem Ringpuffer zu schreiben, und einen Subscriber, der konfiguriert ist, um eine oder mehrere der Vielzahl von Nachrichten, die durch den Publisher geschrieben werden, zu lesen. Der Zähler kann Informationen bezüglich eines Puffers mit fester Größe in dem Ringpuffer bereitstellen, an den der Publisher als nächstes eine Nachricht schreiben wird. Optional kann jede der Vielzahl von Nachrichten eine endliche Größe aufweisen.In various scenarios, systems and methods for providing lock-free or lockerless access to a ring buffer are proposed. The system may execute the methods and may include a shared memory containing the ring buffer. The ring buffer can do a variety of sequential fixed-size arrayed buffers configured to store messages, and a global header that includes a counter and a lock. The system may also include a publisher configured to write a plurality of messages to the plurality of fixed-size buffers in the ring buffer, and a subscriber configured to write one or more of the plurality of messages through the Publishers are written to be read. The counter can provide information regarding a fixed size buffer in the ring buffer to which the publisher will next write a message. Optionally, each of the plurality of messages may have a finite size.

In verschiedenen Implementierungen kann ein negativer Wert des Zählers einen Zustand des Systems angeben, in dem der Ringpuffer keine Nachrichten enthält. Optional kann der Publisher nach Abschluss eines ersten Schreibens in den Ringpuffer einen Wert von 0 zu dem Zähler zuweisen. Der Publisher kann dann den Wert des Zählers nach jeder nachfolgenden Operation erhöhen, so dass ein Index des Puffers mit fester Größe in dem Ringpuffer, auf den der Publisher, der zuletzt eine Nachricht hat, durch Dividieren eines Wertes des Zählers durch 2 bestimmt wirdIn various implementations, a negative value of the counter can indicate a state of the system in which the ring buffer contains no messages. Optionally, the publisher can assign a value of 0 to the counter after completing an initial write to the ring buffer. The publisher can then increment the value of the counter after each subsequent operation, so that an index of the fixed-size buffer in the ring buffer accessed by the publisher that last has a message is determined by dividing a value of the counter by 2

In bestimmten Implementierungen kann die Sperre durch den Publisher erfasst werden, bevor ein Schreiben in einen der mehreren Puffer mit fester Größe ausgeführt wird und nach Ausführung des Schreibens freigegeben wird. Optional kann das System eine Vielzahl von Publishern beinhalten, die jeweils konfiguriert sein können, um eine oder mehrere Nachrichten zu der Vielzahl von Puffern mit fester Größe in den Ringpuffer zu schreiben, so dass die Sperre durch eine einzelne der Vielzahl von Publishern zu jeder gegebenen Zeit erfasst werden kann.In certain implementations, the lock may be acquired by the publisher before a write is performed to one of multiple fixed-size buffers and released after the write is executed. Optionally, the system may include a plurality of publishers, each of which may be configured to write one or more messages to the plurality of fixed-size buffers in the ring buffer, such that the locking is held by a single one of the plurality of publishers at any given time can be captured.

In bestimmten Implementierungen können die mehreren Puffer mit fester Größe keine gemeinsamen Cache-Zeilen in dem gemeinsam genutzten Speicher teilen.In certain implementations, the multiple fixed-size buffers may not share common cache lines in shared memory.

In verschiedenen Implementierungen kann jeder Puffer einen Pufferheader enthalten, der konfiguriert ist, um mindestens eines der Folgenden zu speichern: eine Pufferindexnummer, Synchronisationsinformationen oder Pufferzustandsinformationen. Optional kann der Puffer-Header eine eindeutige Cache-Zeile in dem gemeinsam genutzten Speicher einnehmen. Zusätzlich und/oder alternativ kann jeder Puffer auch einen Datenbereich enthalten, der in einer Cache-Zeile des gemeinsam genutzten Speichers unmittelbar nach der eindeutigen Cache-Zeile eines entsprechenden Puffer-Headers beginnt.In various implementations, each buffer may contain a buffer header configured to store at least one of the following: a buffer index number, synchronization information, or buffer state information. Optionally, the buffer header may occupy a unique cache line in shared memory. Additionally and/or alternatively, each buffer may also contain a data area beginning in a cache line of shared memory immediately after the unique cache line of a corresponding buffer header.

Optional kann eine Größe der Vielzahl von Zonen mit fester Größe basierend auf beispielsweise maximaler Nachrichtengröße, maximaler Anzahl von Zonen fester Größe oder Ausrichtung bestimmt werden.Optionally, a size of the plurality of fixed-size zones may be determined based on, for example, maximum message size, maximum number of fixed-size zones, or orientation.

In einer oder mehreren Implementierungen kann der gemeinsam genutzte Speicher auch einen Synchronisationsdatenspeicherbereich enthalten, der jedem der Vielzahl von Puffern mit fester Größe entspricht, die einen Pufferzähler enthalten, der eine Genauigkeit bzw. Vertrauenswürdigkeit einer Nachricht angibt, die von dem Puffer mit fester Größe durch den Subscriber gelesen wird. Eine Speicheradresse des Synchronisationsdatenspeicherbereichs kann in einem Pufferkopf dieses Puffers mit fester Größe enthalten sein. Ein Anfangswert des Pufferzählers kann auf 0 gesetzt werden, und der Publisher kann einen Wert des Pufferzählers nach der Ausführung eines Schreibvorgangs in den entsprechenden Puffer inkrementieren. Dies ermöglicht es dem Subscriber, einen ersten Wert des Pufferzählers vor der Ausführung eines Lesevorgangs aus dem Puffer mit fester Größe mit einem zweiten Wert des Pufferzählers nach Ausführung des Lesens aus diesem Puffer mit fester Größe zu vergleichen und eine Nachricht zu verwerfen, die von dem Puffer mit fester Größe gelesen wird, wenn der erste Wert nicht mit dem zweiten Wert übereinstimmt. In solchen Fällen ist ein Wert des Pufferzählers während der Ausführung eines Schreibens in den Puffer mit fester Größe durch den Publisher ungerade. Der Subscriber kann konfiguriert sein, um auf eine Benachrichtigung über den Abschluss des Schreibens zu warten, wenn der Wert des Pufferzählers ungerade ist, bevor ein Lesen auf dem Puffer mit fester Größe ausgeführt wird. Zusätzlich und/oder alternativ kann der Datensynchronisationsbereich auch einen Futex-Systemaufruf („Fast Userspace Mutual Exclusion“ oder „schneller gegenseitiger Ausschluss im Userspace“) enthalten, der konfiguriert ist, um eine neue Nachrichtenbenachrichtigung an den Subscriber zu senden, wenn ein Wert des Pufferzählers um 2 inkrementiert und gerade ist. Optional kann der Datensynchronisationsbereich einen Futex-Systemaufruf enthalten, der konfiguriert ist, um eine Wartebenachrichtigung an den Subscriber zu senden, wenn ein Wert des Pufferzählers entweder ungerade ist oder nicht inkrementiert ist. Der Futex-Systemaufruf kann auch eine Wartebenachrichtigung an eine Vielzahl von Publishern in dem System senden, wenn ein Wert des Pufferzählers ungerade ist.In one or more implementations, the shared memory may also include a synchronization data storage area corresponding to each of the plurality of fixed-size buffers that include a buffer counter that indicates an accuracy or trustworthiness of a message transmitted from the fixed-size buffer through the Subscriber is read. A memory address of the synchronization data storage area may be contained in a buffer header of this fixed-size buffer. An initial value of the buffer counter can be set to 0, and the publisher can increment a value of the buffer counter after executing a write operation to the corresponding buffer. This allows the subscriber to compare a first value of the buffer counter before executing a read from the fixed-size buffer with a second value of the buffer counter after executing the read from that fixed-size buffer and to discard a message that has been read from the buffer is read with a fixed size if the first value does not match the second value. In such cases, a value of the buffer counter is odd during the publisher's execution of a write to the fixed-size buffer. The subscriber may be configured to wait for a write completion notification if the buffer counter value is odd before performing a read on the fixed-size buffer. Additionally and/or alternatively, the data synchronization area may also contain a futex system call (“Fast Userspace Mutual Exclusion”) configured to send a new message notification to the Subscriber when a value of the buffer counter incremented by 2 and is even. Optionally, the data synchronization area may contain a futex system call configured to send a wait notification to the subscriber when a value of the buffer counter is either odd or not incremented. The Futex system call can also send a wait notification to a variety of publishers in the system when a value of the buffer counter is odd.

In einigen anderen Szenarien umfassen Systeme (einschließlich Prozessoren) und Verfahren zum Ermöglichen einer Nachrichtenübertragung zwischen einem Publisher und einem Subscriber. Die Verfahren können das Erzeugen einer Datenstruktur umfassen, die einen Ringpuffer in einem gemeinsam genutzten Speicher umfasst. Der Ringpuffer kann eine Vielzahl von sequentiell angeordneten Puffern fester Größe beinhalten, die konfiguriert sind, um Nachrichten zu speichern, und einen globalen Header, der einen seqlock („Sequence Lock“) beinhalten kann. Der seqlock kann einen seqlock-Zähler enthalten, der Informationen in Bezug auf einen Puffer fester Größe in dem Ringpuffer bereitstellt, an den der Publisher als nächstes eine Nachricht schreiben wird. Die Verfahren können auch das Erzeugen eines Synchronisationsdatenspeicherbereichs beinhalten, der jedem der Vielzahl von Puffern mit fester Größe entspricht, die einen Pufferzähler beinhalten können, der die Genauigkeit einer Nachricht angibt, die von dem Puffer mit fester Größe durch den Subscriber gelesen wird.Some other scenarios include systems (including processors) and methods for enabling message transfer between a publisher and a subscriber. The methods may include creating a data structure that includes a ring buffer in shared memory. The ring buffer can include a plurality of sequentially arranged, fixed-size buffers configured to store messages, and a global header, which may include a seqlock (“sequence lock”). The seqlock may contain a seqlock counter that provides information regarding a fixed size buffer in the ring buffer to which the publisher will next write a message. The methods may also include creating a synchronization data storage area corresponding to each of the plurality of fixed-size buffers, which may include a buffer counter indicating the accuracy of a message read from the fixed-size buffer by the subscriber.

In verschiedenen Implementierungen kann ein negativer Wert des Zählers einen Zustand des Systems angeben, in dem der Ringpuffer keine Nachrichten enthält. Optional kann der Publisher nach Abschluss eines ersten Schreibens in den Ringpuffer einen Wert von 0 zu dem Zähler zuweisen. Der Publisher kann dann den Wert des Zählers nach jeder nachfolgenden Operation erhöhen, so dass ein Index des Puffers mit fester Größe in dem Ringpuffer, auf den der Publisher, der zuletzt eine Nachricht hat, bestimmt wird, indem ein Wert des Zählers durch 2. dividiert wirdIn various implementations, a negative value of the counter can indicate a state of the system in which the ring buffer contains no messages. Optionally, the publisher can assign a value of 0 to the counter after completing an initial write to the ring buffer. The publisher can then increment the value of the counter after each subsequent operation, so that an index of the fixed-size buffer in the ring buffer to which the publisher last has a message is determined by dividing a value of the counter by 2 becomes

In bestimmten Implementierungen kann die Sperre durch den Publisher erfasst werden, bevor ein Schreiben in einen der mehreren Puffer mit fester Größe ausgeführt wird und nach Ausführung des Schreibens freigegeben wird.In certain implementations, the lock may be acquired by the publisher before a write is performed to one of multiple fixed-size buffers and released after the write is executed.

Optional werden die mehreren Puffer mit fester Größe derart erzeugt, dass sie keine Cache-Zeilen miteinander in dem gemeinsam genutzten Speicher teilen.Optionally, the multiple fixed size buffers are created such that they do not share cache lines with each other in shared memory.

Ein Anfangswert des Pufferzählers kann auf 0 gesetzt werden, und der Publisher kann einen Wert des Pufferzählers nach der Ausführung eines Schreibvorgangs in den entsprechenden Puffer inkrementieren. Dies ermöglicht es dem Subscriber, einen ersten Wert des Pufferzählers vor der Ausführung eines Lesevorgangs aus dem Puffer mit fester Größe mit einem zweiten Wert des Pufferzählers nach Ausführung des Lesens aus diesem Puffer mit fester Größe zu vergleichen und eine Nachricht zu verwerfen, die von dem Puffer mit fester Größe gelesen wird, wenn der erste Wert nicht mit dem zweiten Wert übereinstimmt. In solchen Fällen ist ein Wert des Pufferzählers während der Ausführung eines Schreibens in den Puffer mit fester Größe durch den Publisher ungerade.An initial value of the buffer counter can be set to 0, and the publisher can increment a value of the buffer counter after executing a write operation to the corresponding buffer. This allows the subscriber to compare a first value of the buffer counter before executing a read from the fixed-size buffer with a second value of the buffer counter after executing the read from that fixed-size buffer and to discard a message that has been read from the buffer is read with a fixed size if the first value does not match the second value. In such cases, a value of the buffer counter is odd during the publisher's execution of a write to the fixed-size buffer.

In verschiedenen anderen Szenarien werden Systeme und Verfahren zum Teilen von Informationen zwischen einem Publisher und einem Subscriber offenbart. Das System beinhaltet einen gemeinsam genutzten Speicher und einen Speicherbroker, der konfiguriert ist, um die Verfahren dieser Offenbarung auszuführen. Der Speicherbroker kann einen Prozessor und ein nichtflüchtiges computerlesbares Medium beinhalten, das eine oder mehrere Programmieranweisungen umfasst, die durch den Prozessor ausgeführt werden. Die Verfahren umfassen, durch den Speicherbroker: Empfangen einer Anforderung zum Schreiben einer Nachricht in Bezug auf ein Thema von einem Publisher, Bestimmen, ob ein Kommunikationskanal, der dem Thema entspricht, in einem gemeinsam genutzten Speicher existiert. Wenn der Kommunikationskanal, der dem Thema entspricht, existiert, kann der Broker einen Ringpuffer auf dem Kommunikationskanal zu dem Publisher zuweisen, wobei Informationen bezüglich des Ringpuffers zu dem Publisher übertragen werden, und es werden Informationen übertragen, die sich auf den Ringpuffer beziehen, an einen oder mehrere Subscriber des Kommunikationskanals. Optional kann der Speicherbroker einen Datensatz aktualisieren, der dem zugewiesenen Ringpuffer in einem Datenspeicher zugeordnet ist.In various other scenarios, systems and methods for sharing information between a publisher and a subscriber are disclosed. The system includes shared memory and a memory broker configured to carry out the methods of this disclosure. The memory broker may include a processor and a non-transitory computer-readable medium that includes one or more programming instructions executed by the processor. The methods include, by the storage broker: receiving a request to write a message related to a topic from a publisher, determining whether a communication channel corresponding to the topic exists in shared storage. If the communication channel corresponding to the topic exists, the broker may assign a ring buffer on the communication channel to the publisher, transmitting information relating to the ring buffer to the publisher, and transmitting information relating to the ring buffer to one or multiple subscribers of the communication channel. Optionally, the storage broker may update a record associated with the allocated ring buffer in a data store.

Zusätzlich und/oder alternativ kann der Speicherbroker als Reaktion auf das Bestimmen, dass der Kommunikationskanal, der dem Thema entspricht, nicht existiert, einen neuen Kommunikationskanal erzeugen, der dem Thema entspricht, wobei der neue Kommunikationskanal mindestens einen Ringpuffer umfasst, und Informationen bezüglich des neuen Kommunikationskanals und des mindestens einen Ringpuffers an den Publisher zu übertragen. Der Speicherbroker kann dann einen Datensatz des neuen Kommunikationskanals in einem Datenspeicher erzeugen. Optional kann der Speicherbroker auch eine Nachricht von einem Subscriber empfangen, um das Thema zu abonnieren. Der neue Kommunikationskanal kann basierend auf beispielsweise einer maximalen Größe jeder Nachricht auf dem neuen Kommunikationskanal, einer maximalen Anzahl von Nachrichten zu einer Warteschlange, einer Anzahl von Publishern, die auf einem Ringpuffer des neuen Kommunikationskanals veröffentlicht werden dürfen, einer maximalen Anzahl von Ringpuffern auf dem Kanal, des Umstands, ob eine Ringpufferteilung erlaubt ist, der erlaubten Latenz in dem neuen Kommunikationskanal, den Typen von Nachrichten, einem Kanalbenennungsprotokoll oder einer erlaubten Liste von Publishern, die dem neuen Kommunikationskanal veröffentlicht werden dürfen, erstellt werden.Additionally and/or alternatively, in response to determining that the communication channel corresponding to the topic does not exist, the storage broker may create a new communication channel corresponding to the topic, the new communication channel comprising at least one ring buffer and information regarding the new one Communication channel and the at least one ring buffer to be transmitted to the publisher. The storage broker can then create a record of the new communication channel in a data store. Optionally, the storage broker can also receive a message from a subscriber to subscribe to the topic. The new communication channel may be based on, for example, a maximum size of each message on the new communication channel, a maximum number of messages to a queue, a number of publishers that are allowed to publish on a ring buffer of the new communication channel, a maximum number of ring buffers on the channel , whether ring buffer sharing is allowed, the allowed latency in the new communication channel, the types of messages, a channel naming protocol or an allowed list of publishers that are allowed to publish to the new communication channel.

In verschiedenen Implementierungen kann das Zuweisen des Ringpuffers auf dem Kommunikationskanal zu dem Publisher das Erstellen eines neuen Ringpuffers auf dem Kommunikationskanal zum Zuordnen zu dem Publisher beinhalten, wenn z.B. es der Speicherbroker nicht mehreren Publishern erlaubt, Nachrichten zu einem einzelnen Ringpuffer zu veröffentlichen, und alle geeignet konfigurierten Ringpuffer auf dem Kommunikationskanal bereits einem Live-Publisher zugeordnet sind. Der Speicherbroker ermöglicht es mehreren Publishern, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, aber die Ringpuffer auf dem Kanal sind für die Nachrichten des Publishers nicht geeignet konfiguriert, existierende Ringpuffer des Kommunikationskanals sind nicht geeignet für die Nachrichten des Publishers konfiguriert, Ringpuffer des Kanals befinden sich in einem Fehlerzustand; und/oder der Publisher darf nicht auf bestehende Ringpuffer des Kommunikationskanals veröffentlicht werden.In various implementations, allocating the ring buffer on the communications channel to the publisher may involve creating a new ring buffer on the communications channel to allocate to the publisher if, for example, the storage broker does not allow multiple publishers hern allows messages to be published to a single ring buffer, and all suitably configured ring buffers on the communication channel are already assigned to a live publisher. The storage broker allows multiple publishers to publish messages to a single ring buffer, but the ring buffers on the channel are not configured appropriately for the publisher's messages, existing communication channel ring buffers are not configured appropriately for the publisher's messages, channel ring buffers are located in an error state; and/or the publisher may not publish on existing ring buffers of the communication channel.

In bestimmten Implementierungen kann das Zuweisen des Ringpuffers auf dem Kommunikationskanal zu dem Publisher das Zuweisen eines bereits existierenden Ringpuffers auf dem Kommunikationskanal zu dem Publisher beinhalten, wenn es z.B. der Speicherbroker ermöglicht, dass mehrere Publisher Nachrichten zu einem einzelnen Ringpuffer veröffentlichen, und es einen Ringpuffer auf dem Kanal gibt, der geeignet für die Nachrichten des Publishers konfiguriert ist, und/oder der Speicherbroker es mehreren Publishern erlaubt, Nachrichten zu einem einzelnen zu veröffentlichen Ringpuffer und es gibt mindestens einen geeignet konfigurierten Ringpuffer auf dem Kanal, der nicht bereits einem Live-Publisher zugeordnet ist.In certain implementations, allocating the ring buffer on the communication channel to the publisher may include allocating an already existing ring buffer on the communication channel to the publisher, for example, if the storage broker allows multiple publishers to publish messages to a single ring buffer and sets up a ring buffer the channel is appropriately configured for the publisher's messages, and/or the storage broker allows multiple publishers to publish messages to a single ring buffer, and there is at least one appropriately configured ring buffer on the channel that is not already assigned to a live publisher assigned.

In einer oder mehreren Implementierungen kann der Speicherbroker auch einen Zustand einer Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher analysieren und eine Aktion in Bezug auf einen oder mehrere der Vielzahl von Ringpuffern bestimmen. Die Aktion kann ein vorübergehendes Entfernen von der Verwendung durch Setzen dieses Ringpuffers auf „Erprobung“ bzw. „Bewährung“ („Probation“), das Revidieren der Bewährung und/oder das permanente Entfernen von der Verwendung beinhalten. Der Zustand der mehreren Ringpuffer kann periodisch und/oder beim Auftreten eines Auslöseereignisses analysiert werden. Beispiele für das Auslöseereignis können ein unerwarteter Verlust der Verbindung zwischen dem Speicherbroker und dem Publisher, der Empfang einer Nachricht von einem Peer des Ringpuffers, die ein Problem mit dem Ringpuffer anzeigt, das Auftreten einer fehlerhaften Leseoperation bei einem Ringpuffer, das Auftreten einer fehlerhaften Schreiboperation bei einem Ringpuffer und/oder eine Speicherbroker-Zustandsrekonstruktion beinhalten. In einigen Beispielen kann ein Ringpuffer permanent von der Verwendung entfernt werden, wenn bestimmt wird, dass der Ringpuffer verfälscht ist. Zusätzlich und/oder alternativ kann ein Ringpuffer permanent von der Verwendung entfernt werden, wenn mindestens eines der Folgenden bestimmt wird: kein Live- und aktiver Publisher, der mit dem Ringpuffer und/oder während der Zustandsrekonstruktion des Brokers assoziiert ist. In anderen Beispielen kann ein Ringpuffer vorübergehend aus der Verwendung entfernt werden, und der Broker kann eine Aufnahme des Ringpuffers in eine Bewährungsliste erstellen. Der Datensatz kann z.B. die Ringpuffer-ID, die aktuelle Schreibposition in dem Ringpuffer, ob eine Schreibsperre auf dem Ringpuffer vorhanden ist oder nicht, einen Zeitstempel der letzten Schreiboperation, einen Zeitstempel, wann der Ring vorübergehend von der Verwendung entfernt wird, und/oder einen Zeitstempel der jüngsten Aktualisierung des Datensatzes enthalten. Der Datensatz kann dann verwendet werden, um zu bestimmen, ob der Ringpuffer permanent aus der Verwendung entfernt oder von der Bewährung revidiert werden sollte.In one or more implementations, the memory broker may also analyze a state of a plurality of ring buffers in the shared memory and determine an action with respect to one or more of the plurality of ring buffers. The action may include temporary removal from use by setting this ring buffer to “probation,” revising probation, and/or permanent removal from use. The state of the multiple ring buffers can be analyzed periodically and/or when a trigger event occurs. Examples of the triggering event may be an unexpected loss of connection between the storage broker and the publisher, the receipt of a message from a peer of the ring buffer indicating a problem with the ring buffer, the occurrence of a bad read operation on a ring buffer, the occurrence of a bad write operation on a ring buffer and/or a memory broker state reconstruction. In some examples, a ring buffer may be permanently removed from use if the ring buffer is determined to be corrupted. Additionally and/or alternatively, a ring buffer may be permanently removed from use if at least one of the following is determined: no live and active publisher associated with the ring buffer and/or during broker state reconstruction. In other examples, a ring buffer may be temporarily removed from use and the broker may place the ring buffer on a probation list. The record may include, for example, the ring buffer ID, the current write position in the ring buffer, whether or not there is a write lock on the ring buffer, a timestamp of the last write operation, a timestamp of when the ring is temporarily removed from use, and/or a Includes timestamp of the most recent record update. The record can then be used to determine whether the ring buffer should be permanently removed from use or revised from probation.

In bestimmten Implementierungen kann der Speicherbroker auch eine Rekonstruktion des gemeinsam genutzten Speichers durch den Speicherbroker nach einem Ausfall durchführen, indem eine Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher vorübergehend entfernt wird, eine Verbindung von einem Peer hergestellt wird, eine Anforderung empfangen wird, eine Lese-/Schreiboperation im gemeinsam genutzten Speicher von dem Peer durchzuführen, zu bestimmen, ob der Peer die Lese-/Schreiboperation an einen Ringpuffer der Vielzahl von Speicherpuffern vor dem Ausfall ausführt und Überarbeiten des Ringpuffers zur Verwendung durch den Peer, wenn der Peer die Lese-/Schreiboperation an den Ringpuffer vor dem Ausfall ausführt.In certain implementations, the memory broker may also perform a reconstruction of the shared memory by the memory broker after a failure by temporarily removing a plurality of ring buffers in the shared memory, establishing a connection from a peer, receiving a request, a read -/write operation in the shared memory from the peer, determining whether the peer is performing the read/write operation to a ring buffer of the plurality of memory buffers before the failure, and revising the ring buffer for use by the peer if the peer has the read/write operation. /write operation to the ring buffer before the failure.

Optional kann der Broker bestimmen, dass der Peer ein Publisher ist, und einen neuen Ringpuffer in dem gemeinsam genutzten Speicher für den Peer zu erzeugen, wenn der Peer die Lese-/Schreiboperation nicht vor dem Ausfall an den Ringpuffer durchführt.Optionally, the broker can determine that the peer is a publisher and create a new ring buffer in the shared memory for the peer if the peer does not perform the read/write operation to the ring buffer before the failure.

In verschiedenen anderen Szenarien werden Systeme und Verfahren zum Routen von Nachrichten zwischen Netzwerkknoten eines verteilten Computersystems offenbart. Die Systeme können eine Vielzahl von Netzwerkknoten beinhalten. Jeder Netzwerkknoten kann einen gemeinsam genutzten Speicher beinhalten, der konfiguriert ist, um Nachrichten, einen Publisher und ein erstes Brückenmodul („Bridge Module“) zu speichern. Das erste Brückenmodul kann für einen gemeinsam genutzten Speicherbereich dieses Netzwerkknotens bestimmen, ob ein Subscriber auf einem entfernten Netzwerkknoten existiert. Wenn ein solcher Subscriber existiert, kann das erste Brückenmodul eine Vielzahl von Nachrichten aus dem gemeinsam genutzten Speicherbereich lesen und die Vielzahl von Nachrichten an ein zweites Brückenmodul des entfernten Netzwerkknotens übertragen. Der entfernte Netzwerkknoten kann einer der Vielzahl von Netzwerkknoten sein, der den Publisher nicht enthält. Das Brückenmodul kann die Vielzahl von Nachrichten in einen entfernten Speicherbereich auf dem entfernten Netzwerkknoten schreiben. Optional kann der entfernte Speicherbereich identisch zu dem gemeinsam genutzten Speicherbereich sein. Der Subscriber kann dann die Vielzahl von Nachrichten aus dem entfernten Speicherbereich lesen.In various other scenarios, systems and methods for routing messages between network nodes of a distributed computing system are disclosed. The systems can contain a variety of network nodes. Each network node may include shared storage configured to store messages, a publisher, and a first bridge module. The first bridge module can determine for a shared memory area of this network node whether a subscriber exists on a remote network node. If such a subscriber exists, the first bridge module can read a plurality of messages from the shared memory area and transmit the plurality of messages to a second bridge module of the remote network node. The remote network node can be one of a variety of networks node that does not contain the publisher. The bridge module may write the plurality of messages to a remote storage area on the remote network node. Optionally, the remote memory area may be identical to the shared memory area. The subscriber can then read the large number of messages from the remote storage area.

In verschiedenen Implementierungen kann das erste Brückenmodul bestimmen, ob der Subscriber auf dem entfernten Netzwerkknoten durch Empfangen von Informationen über das verteilte Computersystem existiert, und der empfangene Informationen verwenden, um die Bestimmung durchzuführen. Die Informationen können z.B. einen oder mehrere Kommunikationskanäle, einen oder mehrere Ringpuffer, Netzwerkorte von einem oder mehreren Publisher oder einen Netzwerkstandort eines oder mehrerer Subscriber beinhalten. Das erste Brückenmodul kann die Informationen von dem zweiten Brückenmodul auf dem entfernten Netzwerkknoten und/oder einem Datenspeicher auf dem Netzwerkknoten des Publishers empfangen.In various implementations, the first bridge module may determine whether the subscriber exists on the remote network node by receiving information via the distributed computing system and use the received information to make the determination. The information may include, for example, one or more communication channels, one or more ring buffers, network locations of one or more publishers or a network location of one or more subscribers. The first bridge module may receive the information from the second bridge module on the remote network node and/or a data store on the publisher's network node.

In einigen Implementierungen kann das erste Brückenmodul die Vielzahl von Nachrichten an den entfernten Netzwerkknoten unter Verwendung eines „Zero-Copy“-Netzwerkprotokolls und/oder eines Stream-Control-Übertragungsprotokolls (SCTP) übertragen.In some implementations, the first bridge module may transmit the plurality of messages to the remote network node using a zero-copy network protocol and/or a stream control transfer protocol (SCTP).

In bestimmten Szenarien kann der gemeinsam genutzte Speicherbereich einen Ringpuffer, den Ringpuffer, beinhalten. Der Ringpuffer kann eine Vielzahl von sequentiell angeordneten Puffern fester Größe umfassen, die konfiguriert sind, um Nachrichten zu speichern, und einen globalen Header, der einen seqlock-Zähler enthält, der eine Genauigkeit der Vielzahl von Nachrichten anzeigt, die in den entfernten Speicherbereich geschrieben sind. In solchen Implementierungen kann das zweite Brückenmodul den Ringpuffer in dem entfernten Speicherbereich replizieren.In certain scenarios, the shared memory area may include a ring buffer, the ring buffer. The ring buffer may include a plurality of sequentially arranged fixed size buffers configured to store messages and a global header containing a seqlock counter indicating a precision of the plurality of messages written to the remote storage area . In such implementations, the second bridge module may replicate the ring buffer in the remote memory area.

Optional kann eine Vielzahl von Subscribern auf dem entfernten Netzwerkknoten die Vielzahl von Nachrichten aus dem entfernten Speicherbereich lesen.Optionally, a plurality of subscribers on the remote network node can read the plurality of messages from the remote storage area.

KURZE BESCHREIBUNG DER ZEICHNUNGENBRIEF DESCRIPTION OF THE DRAWINGS

  • 1 veranschaulicht eine schematische Darstellung eines Publish/Subscribe-Datenkommunikationssystems. 1 illustrates a schematic representation of a publish/subscribe data communications system.
  • 2 ist eine schematische Darstellung eines beispielhaften Ringpuffers. 2 is a schematic representation of an exemplary ring buffer.
  • 3 ist eine schematische Darstellung eines beispielhaften Kommunikationskanals. 3 is a schematic representation of an exemplary communication channel.
  • 4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zum Zuweisen eines Ringpuffers durch einen Speicherbroker veranschaulicht. 4 is a flowchart illustrating an example method for allocating a ring buffer by a storage broker.
  • 5 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zur Zustandsrekonstruktion eines Speicherbrokers beim Neustart veranschaulicht. 5 is a flowchart illustrating an example procedure for state reconstruction of a storage broker upon reboot.
  • 6 veranschaulicht eine schematische Darstellung eines Publish/Subscribe-Datenkommunikationssystems in einem verteilten Computersystem. 6 illustrates a schematic representation of a publish/subscribe data communications system in a distributed computing system.
  • 7 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zur Übertragung von Nachrichten zwischen Netzwerkknoten eines verteilten Computersystems veranschaulicht. 7 is a flowchart illustrating an example method for transmitting messages between network nodes of a distributed computer system.
  • 8 ist eine schematische Darstellung eines beispielhaften Kommunikationskanals, der entfernte Subscriber aufweist. 8th is a schematic representation of an example communication channel having remote subscribers.
  • 9 ist ein Blockdiagramm von Elementen einer Rechenvorrichtung, auf der die verschiedenen Systeme und Verfahren in diesem Dokument implementiert werden könnten. 9 is a block diagram of elements of a computing device on which the various systems and methods in this document could be implemented.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

Wie in diesem Dokument verwendet, sollen die Singularformen „ein / eine“ und „der / die / das“ jeweils auch die Pluralform mitumfassen, sofern der Kontext nicht eindeutig etwas anderes vorschreibt. Sofern nicht anders definiert, haben alle hierin verwendeten technischen und wissenschaftlichen Begriffe die gleichen Bedeutungen, wie sie vom Durchschnittsfachmann allgemein verstanden werden. Wie in diesem Dokument verwendet, soll der Begriff „umfassend“ im Sinne von „einschließend“, aber nicht beschränkt hierauf, verstanden werden. Weitere Begriffe, die für dieses Dokument relevant sind, sind am Ende dieser detaillierten Beschreibung enthalten.As used in this document, the singular forms “a” and “the” are intended to include the plural form, unless the context clearly dictates otherwise. Unless otherwise defined, all technical and scientific terms used herein have the same meanings as generally understood by one of ordinary skill in the art. As used herein, the term “comprehensive” shall be construed to mean, but not limited to, “including.” Additional terms relevant to this document are included at the end of this detailed description.

Zusammen können die gemeinsam genutzten Speicher- und Kommunikationsnetzwerkausführungsformen dieser Offenbarung verwendet werden, um eine Multiverarbeitungs- und verteilte Rechenumgebung in einem Robotersystem, wie etwa einem autonomen Fahrzeug, zu implementieren. Ein solches Robotersystem kann einen Thread-Standard für portable Betriebssystem-Interfaces (POSIX) oder andere gemeinsam genutzte Speicher-Multi-Threading-Programmiermodelle unterstützen und kann auf einem Betriebssystem („OS“) (z.B. Linux, Unix, usw.) implementiert werden. Eine Ausführungsform der vorliegenden Offenbarung kann es einem Speicherbroker ermöglichen, auf einen unerwarteten Crash oder eine abnormale Beendigung hin zu booten.Together, the shared memory and communications network embodiments of this disclosure can be used to implement a multi-processing and distributed computing environment in a robotic system, such as an autonomous vehicle. Such a robotic system may support a portable operating system interface (POSIX) thread standard or other shared memory multi-threading programming models and may be implemented on an operating system (“OS”) (e.g., Linux, Unix, etc.). An embodiment of the present disclosure may enable a storage broker to boot upon an unexpected crash or abnormal termination.

1 zeigt eine schematische Darstellung eines Publish/Subscribe-Datenkommunikationssystems 150 zur Verwendung in einem Robotersystem gemäß einer Ausführungsform der vorliegenden Offenbarung. In bestimmten Ausführungsformen kann das Robotersystem ein autonomes Fahrzeug sein. 1 shows a schematic representation of a publish/subscribe data communication system 150 for use in a robotic system according to an embodiment of the present disclosure. In certain embodiments, the robotic system may be an autonomous vehicle.

Wie in 1 gezeigt, können ein oder mehrere Threads oder Computerprozesse 102a-n, die jeweils einen oder mehrere Publisher 104a-n beinhalten, einen kommunikativen Zugriff auf einen gemeinsam genutzten Speicher 110 aufweisen, der in einem nichtflüchtigen computerlesbaren Speichermedium und/oder als eine virtuelle Speicherinstanz enthalten ist. Zusätzlich können ein oder mehrere Threads oder Computerprozesse 106a-n, die jeweils einen oder mehrere Subscriber 108a-n beinhalten, auch Zugriff auf den gemeinsam genutzten Speicher 110 haben. In diesem Sinne können jeder Prozess 102, 106, der Publisher 104 und der Subscriber 108 Zugriff auf den gemeinsam genutzten Speicher 110 haben.As in 1 As shown, one or more threads or computer processes 102a-n, each including one or more publishers 104a-n, may have communicative access to a shared memory 110 contained in a non-transitory computer-readable storage medium and/or as a virtual memory instance . Additionally, one or more threads or computer processes 106a-n, each including one or more subscribers 108a-n, may also have access to shared memory 110. In this sense, each process 102, 106, the publisher 104 and the subscriber 108 can have access to the shared memory 110.

Obwohl einige Prozesse dargestellt sind, die nur jeweilige Publisher oder Subscriber zeigen, können Ausführungsformen der Offenbarung Prozesse umfassen, die eine Kombination von Publishern und/oder Subscribern innerhalb eines einzigen Prozesses beinhalten. Wie hierin verwendet, kann jeder Publisher 104a-n und/oder jeder Publisher-Prozess 102a-n als ein „Schreiber“ für den Zugriff auf Daten in dem gemeinsam genutzten Speicher 110 angesehen werden, und jeder Subscriber 108a-n und/oder jeder Subscriberprozess 106a-n kann „Leser“ für den Zugriff auf Daten in dem gemeinsam genutzten Speicher 110 sein. Publisher und Subscriber werden in dieser Offenbarung gemeinsam als „Peers“ bezeichnet.Although some processes are illustrated that only show respective publishers or subscribers, embodiments of the disclosure may include processes that include a combination of publishers and/or subscribers within a single process. As used herein, each publisher 104a-n and/or each publisher process 102a-n may be considered a “writer” for accessing data in the shared memory 110, and each subscriber 108a-n and/or each subscriber process 106a-n may be “readers” for accessing data in shared memory 110. Publishers and Subscribers are collectively referred to as “Peers” in this disclosure.

Wie hierin verwendet, können „Programme“ und/oder „Prozesse“ alle oder einen Teil eines Computerprogramms beinhalten, das einen ausführbaren Befehlssatz zum Steuern der Verwaltung und/oder des Betriebs von mindestens einem von dem jeweiligen Publisher 104a-n, dem Subscriber 108a-n oder Funktionen des Robotersystems unter Verwendung des Datenkommunikationssystems 150 aufweist. Das Programm und/oder die Prozesse können ein Computerprogrammprodukt beinhalten, das maschinenlesbare Medien zum Tragen oder mit darauf gespeicherten maschinenausführbaren Anweisungen oder Datenstrukturen beinhalten kann. Solche maschinenlesbaren Medien können beliebige verfügbare Medien sein, auf die durch einen Universal- oder Spezialcomputer oder eine andere Maschine mit einem Prozessor zugegriffen werden kann. Im Allgemeinen kann ein solches Computerprogramm Routinen, Programme, Objekte, Komponenten, Datenstrukturen, Algorithmen usw. beinhalten, die den technischen Effekt haben, bestimmte Aufgaben durchzuführen oder bestimmte abstrakte Datentypen zu implementieren. Maschinenausführbare Anweisungen, zugehörige Datenstrukturen und Programme stellen Beispiele für Programmcode zum Ausführen des Informationsaustauschs dar, wie hierin offenbart. Maschinenausführbare Anweisungen können z.B. Anweisungen und Daten beinhalten, die einen Universalcomputer, einen Spezialcomputer, eine Steuerung oder eine Spezialverarbeitungsmaschine veranlassen, eine bestimmte Funktion oder eine Gruppe von Funktionen auszuführen.As used herein, "programs" and/or "processes" may include all or part of a computer program that includes an executable instruction set for controlling the management and/or operation of at least one of the respective Publisher 104a-n, Subscriber 108a- n or functions of the robot system using the data communication system 150. The program and/or processes may include a computer program product, which may include machine-readable media for carrying or having machine-executable instructions or data structures stored thereon. Such machine-readable media may be any available media that can be accessed by a general-purpose or special-purpose computer or other machine with a processor. In general, such a computer program may include routines, programs, objects, components, data structures, algorithms, etc. that have the technical effect of performing certain tasks or implementing certain abstract data types. Machine-executable instructions, associated data structures, and programs represent examples of program code for carrying out the information exchange as disclosed herein. Machine-executable instructions may include, for example, instructions and data that cause a general-purpose computer, a special-purpose computer, a controller, or a special-purpose processing machine to perform a particular function or group of functions.

Das Datenkommunikationssystem 150 kann einen Systembus oder andere Computersystem-Kommunikationskomponenten (hier nicht gezeigt) beinhalten, um Kommunikationen zwischen den Publishern 104a-n, dem gemeinsam genutzten Speicher, den Subscribern 108a-n oder anderen Komponenten des Systems zu erleichtern. Z.B. können die Publisher 104a-n und die Subscriber 108a-n miteinander kommunizieren, indem Daten über einen Kanal durch den gemeinsam genutzten Speicher 110 geleitet werden. Ein Kanal kann z. B. einen verwandten Satz von logischen Multicast-Verbindungen beinhalten, die in einer verteilten Weise implementiert sind, und dieser kann eine Sammlung von Netzwerkressourcen beinhalten, die verwendet werden, um eine Gemeinschaft von Publishern und Subscribern zu bedienen, die Nachrichten austauschen. Die Nachrichten können gemäß dem Kanalsubjektnamensraum klassifiziert werden. Verschiedene Kanalressourcen können unter Verwendung bekannter Verfahren, wie z.B. über Kanaldienste, die von Kanalmanagern bereitgestellt werden, verwaltet, gesteuert und bereitgestellt werden. Mehrere Kanäle können die gleichen Ressourcen teilen. Kanäle können einen hochskalierbaren Verzeichnisdienst bereitstellen, wie z.B., aber nicht beschränkt auf, die folgenden Beispiele: Publisher- und Subscriber-Informationen, Authentifizierungs- und Autorisierungsinformationen, Nachrichtentypen usw. Die Kanäle erleichtern inhaltsbasiertes Routing, indem logische Konfigurationen für bestimmte Inhaltstypen bereitgestellt werden und somit ein Kontext für Attribute bereitgestellt wird, die über die Kanäle übertragen werden.The data communications system 150 may include a system bus or other computer system communications components (not shown here) to facilitate communications between the publishers 104a-n, shared storage, subscribers 108a-n, or other components of the system. For example, publishers 104a-n and subscribers 108a-n may communicate with each other by passing data over a channel through shared memory 110. A channel can e.g. B. include a related set of logical multicast connections implemented in a distributed manner, and this may include a collection of network resources used to serve a community of publishers and subscribers exchanging messages. The messages can be classified according to the channel subject namespace. Various channel resources can be managed, controlled and provisioned using known methods, such as through channel services provided by channel managers. Multiple channels can share the same resources. Channels can provide a highly scalable directory service, such as, but not limited to, the following examples: publisher and subscriber information, authentication and authorization information, message types, etc. The channels facilitate content-based routing by providing logical configurations for specific content types and thus a context is provided for attributes that are transmitted over the channels.

Die Publisher 104a-n und/oder die Subscriber 108a-n können mit dem Speicher 110 wirkgekoppelt sein, so dass die Publisher 104a-n und/oder die Subscriber 108a-n oder beliebige Computerprogramme oder Prozesse darauf zumindest einen Teil des Speichers 110 zugreifen können.The publishers 104a-n and/or the subscribers 108a-n can be operatively coupled to the memory 110 so that the publishers 104a-n and/or the subscribers 108a-n or any computer programs or processes can access at least part of the memory 110 .

Jeder Prozess 102a-n, 106a-n, der auf den gemeinsam genutzten Speicher 110 zugreift, kann gleichbehandelt werden, wobei jeder Prozess gleiche Rechte zum Lesen, Schreiben, Erweitern und Schrumpfen des gemeinsam genutzten Speichers 110 hat. Alternativ können die Prozesse 102a-n und 106a-n, die auf den gemeinsam genutzten Speicher zugreifen, auch in einem Client-Server/Modus arbeiten, wobei ein Prozess (Server) typischerweise mehr Rechte als der Client aufweist. Typischerweise hat der Serverprozess in diesem Modus Rechte zum Lesen, Schreiben, Erweitern und Schrumpfen des Speichers 110, während Client-Prozesse den Speicher 110 nur lesen und beschreiben können. Z.B. kann in einer POSIX-Umgebung, in der Prozesse Systemaufrufe verwenden, um Dienste von dem POSIX-Betriebssystem (OS) anzufordern, der Prozess, der das OS anfordert, um einen Speicherbereich als gemeinsam genutzter Speicher zu bezeichnen, als Server bezeichnet werden. Alle anderen Prozesse, die den zugewiesenen gemeinsam genutzten Speicher verwenden, sind Clients. Somit hängt die Bezeichnung eines Prozesses als Client oder Server von der Beziehung des Prozesses zu der Zuweisung und Verwendung des gemeinsam genutzten Speichers ab.Each process 102a-n, 106a-n that accesses the shared memory 110 may be treated equally, with each process having equal rights to read, write, expand and shrink the shared memory 110 has. Alternatively, the processes 102a-n and 106a-n that access the shared memory may also operate in a client-server/mode, where one process (server) typically has more privileges than the client. Typically, in this mode, the server process has rights to read, write, expand, and shrink memory 110, while client processes can only read and write memory 110. For example, in a POSIX environment where processes use system calls to request services from the POSIX operating system (OS), the process that requests the OS to designate an area of memory as shared memory may be called a server. All other processes that use the allocated shared memory are clients. Thus, the designation of a process as a client or server depends on the process's relationship to the allocation and use of shared memory.

Das Datenkommunikationsnetzwerk 150, das in 1 gezeigt ist, ist lediglich eine schematische Darstellung einer Ausführungsform, bei der eine Vielzahl von Publishern 104a-n und Subscribern 108a-n sich auf demselben Computersystem des Robotersystems befinden kann oder nicht. Der genaue Ort der Publisher 104a-n und der Subscriber 108a-n sind nicht Gegenstand der Implementierungen dieser Offenbarung. Zusätzlich können mehr oder weniger Publisher 104a-n und/oder Subscriber 108a-n in verschiedenen Implementierungen dieser Offenbarung enthalten sein.The data communication network 150, which is in 1 shown is merely a schematic representation of an embodiment in which a plurality of publishers 104a-n and subscribers 108a-n may or may not be located on the same computer system of the robot system. The exact location of publishers 104a-n and subscribers 108a-n are not subject to the implementations of this disclosure. Additionally, more or fewer publishers 104a-n and/or subscribers 108a-n may be included in various implementations of this disclosure.

Wie der Durchschnittsfachmann verstehen wird, kann das Speichermedium ein nichtflüchtiges computerlesbares Medium, wie etwa einen Direktzugriffsspeicher (RAM), einen Nur-Lese-Speicher (ROM), einen löschbaren programmierbaren Nur-Lese-Speicher (EPROM oder Flash-Speicher) oder ein beliebiges anderes geeignetes Medium enthalten. Der gemeinsam genutzte Speicher 110 kann eine Anzahl von adressierbaren Speicherplätzen zum Speichern von Daten enthalten. Daten können von den Publishern 104a-n in den gemeinsam genutzten Speicher 110 geschrieben werden und Daten können von den Subscribern 108a-n aus dem gemeinsam genutzten Speicher 110 gelesen werdenAs one of ordinary skill in the art will understand, the storage medium may be a non-transitory computer-readable medium, such as a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or flash memory), or any other suitable medium included. Shared memory 110 may include a number of addressable memory locations for storing data. Data may be written to shared memory 110 by publishers 104a-n and data may be read from shared memory 110 by subscribers 108a-n

Für einen Prozess zum Zugriff auf den gemeinsam genutzten Speicher muss der gemeinsam genutzte Speicher in den Prozessadressraum abgebildet werden. In bestimmten Ausführungsformen kann der gemeinsam genutzte Speicher 110 durch einen Speicherverwaltungsaufruf („mmap“) abgebildet werden, der von einem Kernel bereitgestellt wird. Ein „mmap“-Systemaufruf bildet den spezifizierten Speicher in dem Adressraum des anrufenden Prozesses ab. In einer POSIX-Umgebung verwendet der Serverprozess den Systemaufruf „mmap()“, um eine Abbildung zwischen einem Bereich der Adressen in dem Adressraum des Prozesses und einem Teil eines bestimmten Speicherobjekts zu erstellen. Vor dem Abbilden einer Datenstruktur in den Speicher verwendet der Prozess zuerst einen offenen ()-Systemaufruf, um einen Dateideskriptor für die Datenstruktur zu erhalten. Der mmap() Systemaufruf erfordert mehrere Parameter, einschließlich der Adresse in dem Adressraum, auf den die Datei abgebildet werden soll, ein Schutzargument zum Spezifizieren, ob die Datenstruktur geteilt oder privat ist, und des Dateideskriptors, der mit dem offenen ()-Systemaufruf erhalten wird. Der mmap-Systemaufruf gibt einen Zeiger auf den Anfang der abgebildeten Daten zurück.For a process to access shared memory, the shared memory must be mapped into the process address space. In certain embodiments, shared memory 110 may be mapped through a memory management call (“mmap”) provided by a kernel. A “mmap” system call maps the specified memory into the address space of the calling process. In a POSIX environment, the server process uses the mmap() system call to create a mapping between a range of addresses in the process's address space and a portion of a specific memory object. Before mapping a data structure into memory, the process first uses an open() system call to obtain a file descriptor for the data structure. The mmap() system call requires several parameters, including the address in the address space to which the file is to be mapped, a guard argument to specify whether the data structure is shared or private, and the file descriptor obtained with the open() system call becomes. The mmap system call returns a pointer to the beginning of the mapped data.

Der Speicher 110 ist ferner in Speicherbereiche 112a-n unterteilt, wobei jeder Speicherbereich eine Zuordnung von Daten in mindestens eine Gruppierung oder ein Thema umfasst, das an einem vorbestimmten adressierbaren Speicherort positioniert ist. Wie hierin verwendet, kann ein Speicherbereich 112a-n eine Teilmenge des Speichers 110 beinhalten, die einer bestimmten Nutzung des Datenspeichers für das Robotersystem zugeordnet ist, das sich auf ein Thema bezieht. Nachrichtenthemen stellen typischerweise den Schlüssel für die Lieferung von Nachrichten zwischen Publishern und Subscribern bereit. Z.B. kann ein Thema eine einzelne Zuweisung von Daten beinhalten, wie etwa Geschwindigkeitsdaten, Posendaten, Sensordaten (z.B. LiDAR-Sensordaten, Kamerasensordaten usw.), Standortdaten, oder sie kann eine Vielzahl von verwandten oder nicht verwandten Datenelementen umfassen, wie beispielsweise Wegpunkte oder die aktuelle Trajektorie des Robotersystems. Wie gezeigt, können die Speicherbereiche 112a-n sequentiell angeordnet sein; jedoch können zusätzliche Organisationsstrukturen der Speicherbereiche 112a-n konfiguriert sein, um in bestimmten Ausführungsformen Matrizen, variable Zuordnungen für jeden Speicherbereich 112a-n usw. zu beinhalten. Ferner kann jeder Speicherbereich 112a-n einem Namen zugeordnet sein, und ein solcher Name kann in mindestens einem temporären Datenspeicher 172 gespeichert werden, der über Reboots, Crashes usw. hinaus bewahrt werden kann (z.B. eine /dev/shm-virtuelle Dateispeicherung in einem Linux-Betriebssystem). Z.B. kann ein Speicherbroker 170 (nachstehend ausführlich erörtert) die Speicherbereiche 112a-n erstellen und jede Region mit einem Namen assoziieren. Ein Prozess und/oder ein Benutzer kann unter Verwendung der zugewiesenen Namen auf einen Speicherbereich zugreifen.The memory 110 is further divided into memory areas 112a-n, each memory area comprising an association of data into at least one grouping or topic positioned at a predetermined addressable memory location. As used herein, a memory area 112a-n may include a subset of memory 110 associated with a particular usage of data storage for the robotic system that relates to a topic. Message topics typically provide the key to delivering messages between publishers and subscribers. For example, a topic may include a single allocation of data, such as speed data, pose data, sensor data (e.g., LiDAR sensor data, camera sensor data, etc.), location data, or it may include a variety of related or unrelated data items, such as waypoints or the current Trajectory of the robot system. As shown, memory areas 112a-n may be arranged sequentially; however, additional organizational structures of memory areas 112a-n may be configured to include matrices, variable allocations for each memory area 112a-n, etc. in certain embodiments. Further, each storage area 112a-n may be associated with a name, and such name may be stored in at least one temporary data store 172 that may be preserved through reboots, crashes, etc. (e.g., a /dev/shm virtual file storage in a Linux -Operating system). For example, a storage broker 170 (discussed in detail below) may create the storage regions 112a-n and associate each region with a name. A process and/or a user can access a memory area using the assigned names.

Jeder der Prozesse 102a-n, 106a-n bzw. die Publisher 104a-n und die Subscriber 108a-n können Adresse(n) der Speicherbereiche 112a-n von einem Speicherbroker 170 empfangen (wie nachstehend erörtert). In diesem Sinne kann jeder der Prozesse 102a-n, 106a-n, der Publisher 104a-n und/oder der Subscriber 108a-n einen oder mehrere Speicherbereiche 112a-n identifizieren, die Daten bezüglich der entsprechenden Themen speichern.Each of the processes 102a-n, 106a-n or the publishers 104a-n and the subscribers 108a-n can get address(es) of the memory areas 112a-n from one Storage broker 170 receive (as discussed below). In this sense, each of the processes 102a-n, 106a-n, the publisher 104a-n, and/or the subscriber 108a-n may identify one or more storage areas 112a-n that store data related to the corresponding topics.

In einer Ausführungsform kann die Anzahl der Speicherbereiche 112a-n in dem gemeinsam genutzten Speicher 110 während der Initialisierung des Speichers 110, basierend auf einer bekannten Anzahl von Themen, die für die Publisher und/oder Subscriber zugänglich sind, mit mindestens einem Speicherbereich für jedes Thema vorgegeben werden. In einer anderen Ausführungsform kann die Anzahl der Speicherbereiche 112a-n an oder während der Laufzeit (z.B. durch den Speicherbroker 170) durch die Anzahl von Themen definiert werden, die von den Publishern und/oder Subscribern mit mindestens einem Speicherbereich für jedes Thema zugänglich sind. In diesem Sinne kann die Anzahl der Themen dynamisch sein, sich erhöhen und nach Bedarf verringern oder sich nur additiv verhalten, wenn auf zusätzliche Themen zugegriffen werden muss.In one embodiment, the number of storage areas 112a-n in the shared memory 110 may be increased during initialization of the storage 110 based on a known number of topics accessible to the publishers and/or subscribers, with at least one storage area for each topic be specified. In another embodiment, the number of storage areas 112a-n may be defined at or during runtime (e.g., by storage broker 170) by the number of topics accessible by the publishers and/or subscribers with at least one storage area for each topic. In this sense, the number of topics can be dynamic, increasing and decreasing as needed, or only behaving additively when additional topics need to be accessed.

In bestimmten Ausführungsformen kann ein Speicherbereich 112a-n einen Ringpuffer 120a-n enthalten, der mehrere diskrete Puffer mit fester Größe enthält. Jeder Puffer kann konfiguriert sein, um eine vorbestimmte Datenmenge zu speichern. Wie hierin verwendet, bezieht sich der Begriff „Nachricht“ auf ein Datenelement, das in einen Puffer eines Speicherbereichs geschrieben ist, und das eine Größe aufweist, die kleiner oder gleich der festen Größe des Puffers ist. Optional kann bestimmt werden, dass die Größe eines Puffers gleich der maximal zulässigen Größe einer Nachricht ist, und nur eine Nachricht kann in einem Puffer zu einem bestimmten Zeitpunkt gespeichert werden. In verschiedenen Implementierungen dieser Offenbarung schreiben die Publisher Schreibnachrichten in einen Ringpuffer durch sequentielles Einfügen von Daten in aufeinanderfolgende Puffer des Ringpuffers. Die in den Puffern eines Ringpuffers geschriebenen Nachrichten werden von Subscribern gelesen, die die Puffer in ihrer Reihenfolge oder außerhalb dieser lesen können, d.h., die Subscriber können Puffer überspringen und sie außerhalb der Sequenz auslesen, während eine Leseoperation ausgeführt wird. Die schlüsseldefinierende Eigenschaft, die eine Sammlung von Puffern zu einem Ringpuffer macht, ist die Tatsache, dass der Publisher beim Erreichen des letzten Elements des Arrays unabhängig von einer Schleife zurück zu dem Anfang des Arrays geführt wird, um den ältesten Puffer zu überschreiben. Somit kann ein Ringpuffer als eine Endlosschleife mit Subscriber-Verfolgung hinter dem Publisher angesehen werden Diese Anordnung erzeugt die Wirkung, dass der Publisher stets ringförmig um den Puffer herumgeführt wird, obwohl im Hinblick auf die Speicheradressorte die Puffer zwischen dem letzten und dem ersten Puffer tatsächlich diskontinuierlich sind. Diese Tatsache wird gegenüber Benutzern des Ringpuffers in einem Speicherbereich weitgehend verborgen. Der Ringpuffer der vorliegenden Offenbarung ist „lockerless“- bzw. „sperrfrei“ oder „sperrarm“ in dem Sinne, dass ein Publisher niemals durch einen Subscriber von dem Schreiben in einen Puffer des Ringpuffers blockiert wird und die Subscriber verfälschte Lesevorgänge detektieren, wie nachstehend erörtert. Beschädigte Lesevorgänge können detektiert, aber nicht verhindert werden, weil eine niedrige Latenz gegenüber der Zuverlässigkeit favorisiert wird.In certain embodiments, a memory area 112a-n may include a ring buffer 120a-n that contains a plurality of fixed-size discrete buffers. Each buffer can be configured to store a predetermined amount of data. As used herein, the term "message" refers to a data item that is written into a buffer of a memory area and that has a size that is less than or equal to the fixed size of the buffer. Optionally, the size of a buffer can be determined to be equal to the maximum allowed size of a message, and only one message can be stored in a buffer at a given time. In various implementations of this disclosure, publishers write write messages to a ring buffer by sequentially inserting data into successive buffers of the ring buffer. The messages written in the buffers of a ring buffer are read by subscribers, who can read the buffers in or out of sequence, i.e. the subscribers can skip buffers and read them out of sequence while a read operation is in progress. The key defining property that makes a collection of buffers a ring buffer is the fact that when the publisher reaches the last element of the array, it independently loops back to the beginning of the array to overwrite the oldest buffer. Thus, a ring buffer can be viewed as an infinite loop with subscriber tracking behind the publisher. This arrangement creates the effect that the publisher is always looped around the buffer, although in terms of memory address locations the buffers are actually discontinuous between the last and first buffers are. This fact is largely hidden from users of the ring buffer in a memory area. The ring buffer of the present disclosure is "lockerless" or "lock-light" in the sense that a publisher is never blocked by a subscriber from writing to a buffer of the ring buffer and the subscribers detect corrupted reads, as discussed below . Corrupted reads can be detected but not prevented because low latency is favored over reliability.

Jeder Speicherbereich kann nur einen Ringpuffer enthalten. Es sollte beachtet werden, dass es einen eindeutigen Namen oder ID geben kann, der oder die jedem Ringpuffer zugeordnet ist, und es existiert eine definierte Beziehung zwischen dem Speicherbereichsnamen und dem entsprechenden Namen/ID des Ringpuffers, der in diesem Speicherbereich enthalten ist. Da jeder Speicherbereich nur einen Ringpuffer enthalten kann, kann die Ringpuffer-ID von dem entsprechenden Speicherbereichsnamen abgeleitet werden (oder umgekehrt).Each memory area can only contain one ring buffer. It should be noted that there may be a unique name or ID associated with each ring buffer, and there is a defined relationship between the memory area name and the corresponding name/ID of the ring buffer contained in that memory area. Since each memory area can only contain one ring buffer, the ring buffer ID can be derived from the corresponding memory area name (or vice versa).

Andere Speicherkonfigurationen, die in den Speicherbereichen 112a-n enthalten sind, liegen innerhalb des Umfangs dieser Offenbarung, wie etwa, ohne Einschränkung, einen Speicherbereich, der eine Vielzahl von Puffern umfasst, die zusammenhängend und sequentiell in dem Speicher angeordnet sind.Other memory configurations included in memory areas 112a-n are within the scope of this disclosure, such as, without limitation, a memory area that includes a plurality of buffers arranged contiguously and sequentially in memory.

In 2 ist ein Ringpuffer 120 gezeigt, der in einem Speicherbereich 112 enthalten ist, der eine Vielzahl von Puffern 121a-n umfasst, wobei jeder der Puffer 121a-n so konfiguriert ist, dass er eine vorbestimmte Datenmenge (d.h. eine Nachricht) speichert. In einem solchen Ringpuffer 120 kann die Anzahl der Puffer und die Größe jedes Puffers bei der Initialisierung bestimmt werden; diese können nachfolgend nicht geändert werden (nachstehend erörtert). Z.B. kann ein Ringpuffer 120 zum Speichern von Daten, die sich auf die Pose des Robotersystems beziehen, eine erste vorbestimmte Anzahl von Puffern aufweisen, die jeweils konfiguriert sind, um eine Nachricht zu speichern, die eine erste Anzahl von Bytes enthält. In einem anderen Beispiel kann ein Ringpuffer 120 zum Speichern von Daten in Bezug auf Trajektoriendaten eine zweite vorbestimmte Anzahl von Puffern aufweisen, die jeweils konfiguriert sind, um eine Nachricht zu speichern, die eine zweite Anzahl von Bytes enthält. Die feste Größe und Anzahl der Zuweisung von Puffern in einem Speicherbereich ermöglicht eine vorhersagbare und stabile Speichernutzung, die bei Robotersystemen wichtig ist, da sie endliche Nachrichten (Daten, die in jedem Puffer gespeichert sind) für den Speicher-Lese-/Schreibvorgang benötigt. Insbesondere erzeugt die Zuweisung und Anzahl der Zuweisung fester Größen von Puffern in einem Speicherbereich eine endliche Warteschlange von Nachrichten, die den Subscribern zur Verfügung stehen, um zu jeder gegebenen Zeit zu lesen, die in aufeinanderfolgenden Puffern eines Ringpuffers gespeichert sind. Der Subscriber kann sequentiell ablaufen, um die Nachricht zu lesen oder dieser kann eine Nachricht in der Warteschlange zufällig auswählen, ohne dass Zeiger erforderlich sind (wie nachstehend erörtert). Es sollte beachtet werden, dass, wie in 2 gezeigt, der Ringpuffer nicht notwendigerweise eine Ringkonfiguration der Puffer mit fester Größe enthält.In 2 1, a ring buffer 120 is shown included in a storage area 112 that includes a plurality of buffers 121a-n, each of the buffers 121a-n being configured to store a predetermined amount of data (ie, a message). In such a ring buffer 120, the number of buffers and the size of each buffer can be determined at initialization; these cannot be changed subsequently (discussed below). For example, a ring buffer 120 for storing data related to the pose of the robot system may include a first predetermined number of buffers, each configured to store a message containing a first number of bytes. In another example, a ring buffer 120 for storing data related to trajectory data may include a second predetermined number of buffers, each configured to store a message containing a second number of bytes. The fixed size and number of allocation of buffers in a memory area allows for predictable and stable memory usage, which is important in robotic systems because they contain finite messages (data stored in each buffer) required for memory read/write operation. In particular, the allocation and number of allocation of fixed sizes of buffers in a memory area creates a finite queue of messages available to subscribers to read at any given time, stored in successive buffers of a ring buffer. The subscriber can run sequentially to read the message or can randomly select a message in the queue without the need for pointers (as discussed below). It should be noted that, as in 2 shown, the ring buffer does not necessarily contain a ring configuration of fixed size buffers.

Da ein Ringpuffer in Puffer mit fester Größe unterteilt ist, kann jeder Puffer, der eine Nachricht hält, die einen schnellen wahlfreien Zugriff auf den Ring ermöglicht, auch jede Nachricht in dem Ringpuffer effizient untersuchen und entscheiden, welche Nachricht relevant ist. Bestehende Speicherkonfigurationen speichern Nachrichten als variabel dimensionierte Einheiten innerhalb einer kontinuierlichen Folge von Bytes mit Nachrichtenrahmen, um Nachrichten zu unterscheiden, die ihrerseits wiederum Nachrichten enthalten, was andererseits ein Parsen zumindest des Nachrichtenrahmens erfordert, um Nachrichten zu überspringen, und im Allgemeinen keine Art von Direktzugriff unterstützt.Because a ring buffer is divided into fixed-size buffers, each buffer that holds a message that allows fast random access to the ring can also efficiently examine each message in the ring buffer and decide which message is relevant. Existing storage configurations store messages as variable-sized units within a continuous sequence of bytes with message frames to distinguish messages, which in turn contain messages, which on the other hand requires parsing at least the message frame to skip messages and generally does not support any kind of random access .

Es ist anzumerken, dass jeder Speicherbereich 112a-n nur einen Ringpuffer 120 enthalten kann. Mehrere Publisher können Nachrichten zu einem Ringpuffer schreiben, und mehrere Subscriber können Daten von einem Ringpuffer lesen. Optional kann ein einzelner Publisher Nachrichten an einen Ringpuffer schreiben, und ein oder mehrere Subscriber können Daten von einem Ringpuffer lesen. Kanäle, die oben diskutiert wurden, weisen eine Eins-zu-Eins-Beziehung mit Ringpuffern auf. Insbesondere gehört jeder Ringpuffer zu einem Kanal, aber jeder Kanal für ein Thema kann viele Ringpuffer enthalten. Wenn z.B. mehrere Publisher Daten in Bezug auf ein Thema publizieren (z.B. Thema = Formdaten, Publisher = Kamera, LiDAR oder andere Sensoren in einem Fahrzeug), kann der Kanal mehrere Ringpuffer umfassen, die jeweils einem Publisher entsprechen. It should be noted that each memory area 112a-n can only contain one ring buffer 120. Multiple publishers can write messages to a ring buffer, and multiple subscribers can read data from a ring buffer. Optionally, a single publisher can write messages to a ring buffer, and one or more subscribers can read data from a ring buffer. Channels discussed above have a one-to-one relationship with ring buffers. In particular, each ring buffer belongs to one channel, but each channel for a topic can contain many ring buffers. For example, if multiple publishers publish data related to a topic (e.g. topic = shape data, publisher = camera, LiDAR or other sensors in a vehicle), the channel can include multiple ring buffers, each corresponding to a publisher.

In einem anderen Beispiel kann, wie in 3 gezeigt, ein Kanal 301 in einem autonomen Fahrzeug erzeugt werden, das dem Thema „Posen-Schätzung“ entspricht, wobei die Pose eines Fahrzeugs die Position des Fahrzeugs in entweder zwei oder drei Dimensionen zusammen mit seiner Ausrichtung ist. Der Kanal 301 kann Ringpuffer 302 (a) und 302 (b) beinhalten, die Rohdaten speichern, die von einem LiDAR-Sensor gesammelt werden, einen Ringpuffer 303, der Daten in Bezug auf verarbeitete LiDAR-Daten speichert, einen Ringpuffer 304, der Daten in Bezug auf beobachtete Posen speichert, einen Ringpuffer 305, der Daten in Bezug auf gefilterte Posen speichert, und einen Ringpuffer 306 zum Speichern von Debugging-Protokollen. LiDAR-Sensoren (hier nicht gezeigt) sind Publisher, um die Ringe 302 (a) und 302 (b) zu puffern, und ein LiDAR-Datenverarbeitungssystem 311 (z.B. ein Wobbelspeichersystem) kann Daten abonnieren, die in die Ringpuffer 302 (a) und 302 (b) geschrieben werden. Das LiDAR-Datenverarbeitungssystem 311 verarbeitet Daten, die von den Ringpuffern 302 (a) und 302 (b) gelesen werden, und veröffentlicht sie zum Ringpuffer 303.In another example, as in 3 shown, a channel 301 can be created in an autonomous vehicle corresponding to the topic of "pose estimation", where the pose of a vehicle is the position of the vehicle in either two or three dimensions along with its orientation. The channel 301 may include ring buffers 302 (a) and 302 (b) that store raw data collected from a LiDAR sensor, a ring buffer 303 that stores data related to processed LiDAR data, a ring buffer 304 that stores data relating to observed poses, a ring buffer 305 storing data relating to filtered poses, and a ring buffer 306 for storing debugging logs. LiDAR sensors (not shown here) are publishers to buffer the rings 302 (a) and 302 (b), and a LiDAR data processing system 311 (e.g., a sweep memory system) can subscribe to data written into the ring buffers 302 (a) and 302 (b). The LiDAR data processing system 311 processes data read from the ring buffers 302 (a) and 302 (b) and publishes them to the ring buffer 303.

LiDAR-Daten-Subscriber, wie z.B. ein Scan-Matcher 312, können den Daten im Ringpuffer 303 zum Extrahieren von beobachteten Posendaten aus den LiDAR-Daten entsprechen. Die beobachteten Posendaten können vom Scan-Matcher 312 zum Ringpuffer 304 zur Speicherung veröffentlicht werden. Ein Posenfilter 313 kann den Ringpuffer 304 abonnieren und gefilterte Posendaten an den Ringpuffer 305. veröffentlichen. Mehrere Subscriber (wie z.B. ein Tracker 314, ein Scan-Matcher 312 und/oder andere Systeme) können die gefilterte Pose abonnieren. Auch wenn die Ringpuffer 302 (a), 302 (b), 303, 304 und 305 einem einzelnen Publisher zugeordnet sind, könne einige Ringpuffer 306 Daten von mehreren Publishern empfangen. Z.B. kann ein Ringpuffer zur Speicherung von Debugging-Protokollen Daten von verschiedenen Systemen empfangen.LiDAR data subscribers, such as a scan matcher 312, may correspond to the data in the ring buffer 303 to extract observed pose data from the LiDAR data. The observed pose data may be published from the scan matcher 312 to the ring buffer 304 for storage. A pose filter 313 may subscribe to the ring buffer 304 and publish filtered pose data to the ring buffer 305. Multiple subscribers (such as a tracker 314, a scan matcher 312 and/or other systems) can subscribe to the filtered pose. Even though ring buffers 302 (a), 302 (b), 303, 304, and 305 are associated with a single publisher, some ring buffers 306 may receive data from multiple publishers. For example, a ring buffer for storing debugging logs can receive data from different systems.

Unter erneuter Bezugnahme auf 2 kann jeder Puffer 121a-n eines Ringpuffers 120 einen Header 122 und einen Datenabschnitt 123 beinhalten. Der Header 122 kann eine Sequenz oder Indexnummern bis zu KN, Synchronisationsinformationen und/oder Zustandsinformationen (d.h. leer, gefüllt, die die jüngsten Daten enthalten, oder dergleichen) für den entsprechenden Puffer umfassen. Synchronisationsinformationen können Informationen zum Identifizieren eines Speicherplatzes (z.B. einer Speicheradresse, eines Speicherzeigers, eines Namens des Speicherbereichs, dem Ort des Puffers usw.) in dem gemeinsam genutzten Speicher 110, der Synchronisationsdaten in Bezug auf ein oder mehrere Lese- und Schreiboperationen für diesen Puffer speichern (nachstehend erörtert). Der Datenabschnitt 123 kann konfiguriert sein, um eine Nachricht zu speichern. Es ist anzumerken, dass die Datenspeicherkapazität eines Puffers aufgrund der Größe des Headers höher als die Größe einer Nachricht sein sollte.Referring again to 2 Each buffer 121a-n of a ring buffer 120 can include a header 122 and a data section 123. The header 122 may include a sequence or index numbers up to KN, synchronization information, and/or status information (ie, empty, filled, containing the most recent data, or the like) for the corresponding buffer. Synchronization information may store information identifying a memory location (e.g., a memory address, a memory pointer, a memory area name, the location of the buffer, etc.) in the shared memory 110 that stores synchronization data related to one or more read and write operations for that buffer (discussed below). The data section 123 may be configured to store a message. It is worth noting that the data storage capacity of a buffer should be larger than the size of a message due to the size of the header.

In bestimmten Ausführungsformen belegt der Header seine eigene zentrale Verarbeitungseinheit (CPU)-Cache-Zeile in dem Speicherbereich 112a-n. Dies eliminiert eine unzulässige gemeinsame Nutzung von Zwischenspeichern zwischen verschiedenen Puffern, was die Leistung verbessert, und die Gleichzeitigkeit auf Mehrkern-CPUs und Multi-CPU-Systemen mit einem Minimum an Speicherbandbreitennutzung und Cache-Kohärenz-Overhead. Der Datenabschnitt 123 eines Puffers kann in einer Cache-Zeile beginnen, die unmittelbar auf die Cache-Zeile für den Header 122 folgt (oder innerhalb einer vordefinierten Anzahl von Cache-Zeilen). Dies ermöglicht es der CPU, den Hauptspeicher effizient in den Cache-Speicher zurückzuholen, und zwar aufgrund des sequentiellen Speicherzugriffsmusters des Zugreifens von dem Header 122 des Puffers zuerst gefolgt von dem Datenabschnitt 123. Da die Anzahl und Größe der Puffer in einem Speicherbereich 112a-n fixiert ist, führt eine solche Ausrichtung von Puffern in dem Speicherbereich 112a-n (mit Puffern, die keine Cache-Zeilen teilen) zu einer Ausrichtung von Nachrichten zu CPU-Cache-Leitungen für einen effizienten Speicherzugriff.In certain embodiments, the header occupies its own central processing unit (CPU) cache line in memory area 112a-n. This eliminates undue cache sharing between different buffers, improving performance and concurrency on multi-core CPUs and multi-CPU systems with a minimum of memory bandwidth usage and cache coherence overhead. The data portion 123 of a buffer may begin in a cache line immediately following the cache line for the header 122 (or within a predefined number of cache lines). This allows the CPU to efficiently retrieve main memory into cache memory due to the sequential memory access pattern of accessing the header 122 of the buffer first followed by the data portion 123. Since the number and size of buffers in a memory area 112a-n is fixed, such alignment of buffers in memory area 112a-n (with buffers that do not share cache lines) results in alignment of messages to CPU cache lines for efficient memory access.

Optional, da das Vorbestimmen der Anzahl und Größe von Puffern in einem Ringpuffer 120 ermöglicht, dass jede Nachricht wie gewünscht im Speicher ausgerichtet wird, kann dies auch verwendet werden, um Nachrichtendaten wie erforderlich auszurichten, um CPU-Vektoroperationen (z.B. SIMD, Single Instruction Multiple Dispatch, etc.) zu ermöglichen. Solche Anweisungen ermöglichen hocheffiziente parallele Berechnungen, stellen aber genaue Speicheradressenausrichtungsbeschränkungen auf den Daten, die bei Robotersystemoperationen, wie autonomen Fahrzeugen, aufzuerlegen sind.Optionally, since predetermining the number and size of buffers in a ring buffer 120 allows each message to be aligned in memory as desired, this can also be used to align message data as required to perform CPU vector operations (e.g., SIMD, Single Instruction Multiple dispatch, etc.). Such instructions enable highly efficient parallel computations but place precise memory address alignment constraints on the data to be imposed in robotic system operations such as autonomous vehicles.

In bestimmten Ausführungsformen kann ein Ringpuffer 120 auch einen globalen Header 124 enthalten. Wenn in Systemen mit entsprechender Unterstützung verkörpert (wie beispielsweise LINUX), kann der globale Header 124 eine sequentielle Sperre („seqlock“) enthalten, die einem Speicher zugeordnet ist, um einen Zähler zusätzlich zu dem seqlock zu speichern. Andere Arten von Sperrmechanismen liegen innerhalb des Umfangs dieser Offenbarung. Die seqlock unterstützt die Synchronisation zwischen zwei Publishern (atomarer Betrieb), und der Zähler dient zum Anzeigen der aktuellen Schreibposition eines Publishers in dem Ringpuffer 120 (auch als „KOPF“ des Ringpuffers bezeichnet). Die seqlock wird durch einen Publisher vor dem Schreiben von Daten in den Ringpuffer 120 erfasst und freigegeben, wenn der Schreibvorgang abgeschlossen ist. Der Zähler wird als eine vorzeichenbehaftete ganze Zahl gespeichert und wird initialisiert, um einen Wert von -2 zu haben, wenn der Ringpuffer 120 leer ist. Wenn ein Publisher die seqlock für einen ersten Schreibvorgang an den Ringpuffer 120 erfasst (d.h. der Wert des Zählers ist -2), erhöht er den Wert auf -1. Nach Beendigung dieser ersten Schreiboperation setzt der Publisher den Wert des Zählers auf 0, bevor die seqlock freigegeben wird. Ein Publisher während jeder nachfolgenden Schreiboperation inkrementiert den Zähler um eins, wenn die seqlock erfasst wird. Wenn die seqlock freigegeben wird, inkrementiert der Publisher den Zähler um den Wert des Zählers (vor dem Erfassen der Sperre) um 2 modulo der Anzahl von Puffern in dem Ringpuffer. Wenn z.B. ein Ringpuffer 10 Puffer enthält, wird der Wert des Zählers 0, 2, 4 6,8,10, 12,14,16, 18 und zurück auf 0 und so weiter sein. Dieses Inkrement-und-Modulo wird atomar durchgeführt, um einen gegenseitigen Ausschluss in Bezug auf den Zugriff auf den Zähler für die Dauer einer unteilbaren Operation zu ermöglichen. Eine solche Konfiguration des globalen Kopfteils 124 ermöglicht es, dass der Zähler der seqlock verwendet wird, um die aktuelle Schreibposition eines Publishers in dem Ringpuffer 120 zu bestimmen. Insbesondere ist jedes Mal, wenn ein Wert des Zählers in der seqlock negativ (-2 oder -1) ist, der Ringpuffer 120 leer, ohne vorherige Schreiboperationen (-2) oder eine erste Schreiboperation im Gange (-1).Wenn jedoch ein Wert des Zählers null oder positiv ist, ist der Wert des Zählers geteilt durch zwei gleich dem Index des Puffers, der zuletzt in die und folglich die aktuelle Schreibposition in dem Ringpuffer 120 geschrieben wurde. Eine solche Berechnung ist sowohl hinsichtlich CPU-Zeit als auch hinsichtlich Speichernutzung effizient.In certain embodiments, a ring buffer 120 may also include a global header 124. When embodied in systems with appropriate support (such as LINUX), the global header 124 may contain a sequential lock (“seqlock”) associated with memory to store a counter in addition to the seqlock. Other types of locking mechanisms are within the scope of this disclosure. The seqlock supports synchronization between two publishers (atomic operation), and the counter is used to display the current write position of a publisher in the ring buffer 120 (also referred to as the “HEAD” of the ring buffer). The seqlock is acquired by a publisher before writing data to the ring buffer 120 and released when the write operation is complete. The counter is stored as a signed integer and is initialized to have a value of -2 when the ring buffer 120 is empty. When a publisher acquires the seqlock for a first write to the ring buffer 120 (i.e. the value of the counter is -2), it increments the value to -1. After completing this first write operation, the publisher sets the value of the counter to 0 before releasing the seqlock. A publisher during each subsequent write operation increments the counter by one when the seqlock is acquired. When the seqlock is released, the publisher increments the counter by the value of the counter (before acquiring the lock) by 2 modulo the number of buffers in the ring buffer. For example, if a ring buffer contains 10 buffers, the value of the counter will be 0, 2, 4, 6,8,10, 12,14,16, 18 and back to 0 and so on. This increment-and-modulo is performed atomically to enable mutual exclusion with respect to access to the counter for the duration of an atomic operation. Such a configuration of the global header 124 allows the counter of the seqlock to be used to determine the current write position of a publisher in the ring buffer 120. Specifically, any time a value of the counter in the seqlock is negative (-2 or -1), the ring buffer 120 is empty, with no previous writes (-2) or a first write in progress (-1). However, if a value of the counter is zero or positive, the value of the counter divided by two is equal to the index of the buffer last written to and hence the current write position in the ring buffer 120. Such computation is efficient in terms of both CPU time and memory usage.

Typischerweise kann ein einzelner Publisher Daten in den Ringpuffer 120 schreiben und kann sequentiell Daten zu den Puffern des Ringpuffers 120 schreiben. Jedoch können die seqlock und der zugehörige Zähler des globalen Kopfteils 124 verwendet werden, so dass mehrere Publisher in den Ringpuffer 120 schreiben können. Jeder Publisher in einem Multi-Publisher-Szenario kann den Zähler verwenden, um den Index des Puffers zu bestimmen, den er schreiben soll, ohne eine von einem vorherigen Publisher geschriebene Nachricht zu überschreiben und die nicht von einem oder mehreren Subscribern gelesen wurde.Typically, a single publisher can write data to the ring buffer 120 and can sequentially write data to the buffers of the ring buffer 120. However, the seqlock and associated counter of the global header 124 can be used so that multiple publishers can write to the ring buffer 120. Each publisher in a multi-publisher scenario can use the counter to determine the index of the buffer that it should write without overwriting a message written by a previous publisher and that has not been read by one or more subscribers.

Subscriber können die aktuelle Schreibposition in dem Ringpuffer 120 verwenden, die unter Verwendung des Zählers des globalen Headers in Kombination mit ihrer eigenen lokalen Leseposition bestimmt wird (die jeder Subscriber aufrechterhält), um zu bestimmen, wann sie alle verfügbaren Nachrichten gelesen haben und auf eine Benachrichtigung über eine neue Nachricht warten sollten. Wenn z.B. der Pufferzähler (unten beschrieben) einer aktuellen Leseposition eines Subscribers der gleiche ist wie die aktuelle Schreibposition in dem Ringpuffer 120, kann der Subscriber bestimmen, dass er alle Nachrichten in dem Ringpuffer gelesen hat.Subscribers may use the current write position in the ring buffer 120, determined using the global header counter in combination with their own local read position (which each subscriber maintains), to determine when they have read all available messages and respond to notification should wait for a new message. For example, if the buffer count (described below) of a subscriber's current read position is the same as the current write position in the ring buffer 120, the subscriber may determine that it has read all of the messages in the ring buffer.

Unter erneuter Bezugnahme auf 1 beinhaltet der gemeinsam genutzte Speicher 110 auch einen Synchronisationsdatenbereich 130a-n, der jedem Puffer in einem Speicherbereich entspricht, der an einer Speicheradresse vorhanden ist, die auf der Grundlage von Synchronisationsinformationen, die in dem Pufferheader 122 enthalten sind, bestimmbar ist. Jeder Synchronisationsdatenbereich 130 ist konfiguriert, um einen Pufferzähler zu speichern, der unter Verwendung geeigneter Atomanweisungen durch Prozesse (Publisher und/oder Abonnements) zugänglich ist, die eine Lese- oder Schreiboperation an den entsprechenden Puffer durchführen. Die Verwendung von atomaren Befehlen ermöglicht es, dass mehrere Threads oder Prozesse auf den Puffer zugreifen, ohne dass eine zusätzliche Sperre des Puffers oder eine Synchronisation von Prozessen erforderlich ist. Der Pufferzähler für jeden Puffer wird mit einem „0“-Wert initialisiert.Referring again to 1 Shared memory 110 also includes a synchronization data area 130a-n corresponding to each buffer in a memory area present at a memory address determinable based on synchronization information contained in buffer header 122. Each synchronization data area 130 is configured to store a buffer counter that is accessible using appropriate atomic instructions by processes (publishers and/or subscriptions) that perform a read or write operation to the corresponding buffer. The use of atomic instructions allows multiple threads or processes to access the buffer without requiring additional locking of the buffer or synchronization of processes. The buffer counter for each buffer is initialized with a “0” value.

Wenn ein Publisher einen Schreibvorgang in einen Puffer durchführt, inkrementiert er den Wert des Pufferzählers um 1 zu Beginn der Schreiboperation unter Verwendung einer atomaren Vergleichs- und Austauschanweisung an dem Synchronisationsdatenbereich 130. Nach Beendigung des Schreibens wird der Wert des Pufferzählers wieder um 1 inkrementiert. Der Wert des Pufferzählers erhöht sich daher um zwei bei jedem Schreiben und ist während eines Schreibvorgangs ungerade und ist gerade, wenn kein Schreibvorgang durchgeführt wird (bzw., wenn der Pufferzähler mit 1 initialisiert würde, wäre der Wert des Pufferzählers während einer Schreiboperation in dem Puffer gerade und dieser wäre ungerade, wenn kein Schreibvorgang im Gange ist).When a publisher performs a write to a buffer, it increments the value of the buffer counter by 1 at the beginning of the write operation using an atomic compare and swap instruction on the synchronization data area 130. After the write is completed, the value of the buffer counter is incremented by 1 again. The value of the buffer counter therefore increases by two for each write and is odd during a write operation and is even when no write operation is being performed (or, if the buffer counter were initialized to 1, the value of the buffer counter would be during a write operation to the buffer even and this would be odd if no writing is in progress).

Während einer Leseoperation in den Puffer beginnt ein Subscriber ein Lesen durch Lesen (und Speichern einer lokalen Kopie) des Wertes des Pufferzählers an dem entsprechenden Datensynchronisationsbereich. Wenn der Wert des Pufferzählers ungerade ist, bestimmt der Subscriber, dass eine Schreiboperation im Gange ist, und wartet auf eine Benachrichtigung, dass die Schreiboperation abgeschlossen ist (Benachrichtigungsmechanismus wie unten beschrieben), bevor Daten aus dem Puffer gelesen werden. Wenn der Wert des Pufferzählers gerade ist, fährt der Subscriber fort, die in dem Puffer gespeicherten Daten zu lesen. Nachdem die Leseoperation abgeschlossen ist, liest der Subscriber den Wert des Pufferzählers an dem entsprechenden Datensynchronisationsbereich ein zweites Mal und vergleicht den Wert mit dem lokal gespeicherten Wert des Pufferzählers, der zu Beginn des Lesevorgangs erhalten wird. Wenn der Pufferzählerwert unverändert ist, bestimmt der Subscriber, dass die Daten in dem Puffer nicht verfälscht sind (d.h., es trat keine gleichzeitige Schreiboperation auf, während der Subscriber die Leseoperation durchführt). Wenn jedoch der Pufferzählerwert sich zwischen dem Anfang und dem Ende der Leseoperation ändert, bestimmt der Subscriber, dass es eine gleichzeitige Schreiboperation gab, und die Leseoperation kann inkonsistente Daten haben oder das Lesen verfälscht sein. Wenn bestimmt wird, dass das Lesen verfälscht ist, kann der Subscriber mindestens eines der Folgenden ausführen: Verwerfen der Leseoperation und jeglicher daraus abgeleiteter Daten, Protokollieren eines Fehlers, Überspringen in eine neue Pufferposition oder eine Kombination davon. Die neue Pufferposition kann ein Puffer sein, der eine vordefinierte Anzahl von Puffern vor der aktuellen Subscriberposition in dem Ringpuffer befindet, unabhängig von der aktuellen Schreibposition des Publishers. Alternativ und/oder zusätzlich kann der Subscriber den Index des Puffers bestimmen, der als nächstes in den Ringpuffer geschrieben wird, unter Verwendung der seqlock, die in dem globalen Header des Puffers enthalten ist, und zu diesem Puffer überspringen und/oder einen Puffer, der diesen Puffer (z.B. Puffer unmittelbar vor der aktuellen Schreibposition, einen Puffer zwei Positionen hinter der aktuellen Schreibposition oder dergleichen) fortsetzt. Ein Subscriber kann auch prüfen, wie weit hinter einem Publisher er ist, und präventiv nach vorne zu einer neuen Pufferposition überspringen, die näher an dem Publisher liegt, um die Gefahr von verfälschten Lesevorgängen zu reduzierenDuring a read operation into the buffer, a subscriber begins a read by reading (and storing a local copy) of the value of the buffer counter at the corresponding data synchronization area. If the value of the buffer counter is odd, the subscriber determines that a write operation is in progress and waits for notification that the write operation is complete (notification mechanism described below) before reading data from the buffer. If the value of the buffer counter is even, the subscriber continues reading the data stored in the buffer. After the read operation is completed, the subscriber reads the value of the buffer counter at the corresponding data synchronization area a second time and compares the value with the locally stored value of the buffer counter obtained at the beginning of the read operation. If the buffer counter value is unchanged, the subscriber determines that the data in the buffer is not corrupted (i.e., no concurrent write operation occurred while the subscriber is performing the read operation). However, if the buffer counter value changes between the beginning and end of the read operation, the subscriber determines that there was a concurrent write operation, and the read operation may have inconsistent data or the read may be corrupted. If the read is determined to be corrupted, the subscriber may do at least one of the following: discard the read operation and any data derived therefrom, log an error, skip to a new buffer location, or a combination thereof. The new buffer position may be a buffer that is a predefined number of buffers ahead of the current subscriber position in the ring buffer, regardless of the publisher's current write position. Alternatively and/or additionally, the subscriber may determine the index of the buffer that will next be written to the ring buffer using the seqlock contained in the global header of the buffer and skip to that buffer and/or a buffer that this buffer (e.g. buffer immediately before the current write position, a buffer two positions behind the current write position or the like). A subscriber can also check how far behind a publisher it is and preemptively skip ahead to a new buffer location closer to the publisher to reduce the risk of corrupted reads

Ein Subscriber kann auch seine Verzögerung hinter einem Publisher in einem Ringpuffer basierend auf der Zweierinkrement-Pro-Schreibvorgang-Eigenschaft des Pufferzählers in Kombination mit dem Schreibmuster von Fortschreiten durch den Ringpuffer sequentiell in Abhängigkeit von einer Änderung des Wertes des Pufferzählers zwischen einer vorherigen Leseoperation und einer aktuellen Leseoperation, die durch den Subscriber durchgeführt wird, bestimmen. In einigen Ausführungsformen kann eine Änderung des Werts des Pufferzählers, der größer als ein Schwellenwert ist, angeben, dass der Subscriber durch den Publisher überrundet werden könnte (der Begriff „überrundet“, wie er hier verwendet wird, bezieht sich auf einen Publisher, der Daten in einem Puffer eines Ringpuffers überschreibt, bevor ein Subscriber die überschriebenen Daten liest, da der Subscriber hinter dem Publisher ist) und eine Aktion ergreifen muss, um aufzuholen. Z.B. kann der Subscriber das Lesen von Daten aus einer vordefinierten Anzahl von Puffern in dem Ringpuffer unabhängig von der aktuellen Schreibposition des Publishers überspringen. Alternativ und/oder zusätzlich kann der Subscriber den Index des Puffers, der als nächstes in den Ringpuffer geschrieben wird, unter Verwendung der Zähler/seqlock, die in dem globalen Header des Puffers enthalten sind, bestimmen und zu diesem Puffer und/oder einem Puffer überspringen, der diesen Puffer folgt (z.B., Puffer unmittelbar vor der aktuellen Schreibposition, einen Puffer zwei Positionen hinter der aktuellen Schreibposition od. dgl.).A subscriber can also set its delay behind a publisher in a ring buffer based on the two-increment-per-write property of the buffer counter in combination with the write pattern of advancing through the ring buffer sequentially depending on a change in the value of the buffer counter between a previous read operation and one determine the current read operation carried out by the subscriber. In some embodiments, a change in the value of the buffer counter that is greater than a threshold may indicate that the subscriber may be lapped by the publisher (the term "rounded" as used herein refers to a publisher that is lapping data in a buffer of a ring buffer before a subscriber reads the overwritten data (since the subscriber is behind the publisher) and must take an action to catch up. For example, the subscriber can skip reading data from a predefined number of buffers in the ring buffer regardless of the publisher's current write position. Alternatively and/or additionally, the subscriber may determine the index of the buffer that will next be written to the ring buffer using the counters/seqlock contained in the buffer's global header and skip to that buffer and/or a buffer , which follows this buffer (e.g., buffer immediately before the current write position, a buffer two positions behind the current writing position or the like).

Wie oben erörtert, bedeutet die feste Anzahl von Puffern in dem Ringpuffer, die jeweils eine feste Größe aufweisen, dass jeder Subscriber seine eigene aktuelle Leseposition in dem Ringpuffer beibehält, unabhängig von anderen Subscribern und unabhängig von dem Publisher. Mit anderen Worten ermöglicht die Verwendung verschiedener Puffer mit fester Größe, dass jeder Puffer unabhängig synchronisiert wird, wobei Synchronisationsdaten für jeden Puffer bei vorhersagbaren, leicht berechenbaren Speicheradressen vorliegen Dies ermöglicht es dem Publisher, in einen Puffer zu schreiben, während Subscriber von anderen Puffern ohne Störung gelesen werden. Darüber hinaus kann ein Subscriber, der hinter einen Publisher und/oder andere Subscriber gefallen ist und die jüngste Nachricht anstelle von historischen Nachrichten benötigt, auf den Puffer zugreifen, der die jüngste Nachricht enthält, ohne alle Zwischendaten (zwischen der zuletzt gelesenen Nachricht und der jüngsten Nachricht) verarbeiten zu müssen. Eine solche Konfiguration begünstigt eine niedrige Latenz gegenüber der Zuverlässigkeit, wie es in Robotersystemen, wie in autonomen Fahrzeugen, häufig erforderlich ist.As discussed above, the fixed number of buffers in the ring buffer, each of a fixed size, means that each subscriber maintains its own current read position in the ring buffer, independent of other subscribers and independent of the publisher. In other words, using different fixed-size buffers allows each buffer to be synchronized independently, with synchronization data for each buffer at predictable, easily computable memory addresses. This allows the publisher to write to one buffer while subscribers write to other buffers without interference to be read. In addition, a Subscriber that has fallen behind a Publisher and/or other Subscribers and needs the most recent message instead of historical messages can access the buffer containing the most recent message without all intermediate data (between the last read message and the most recent message). Such a configuration favors low latency over reliability, as is often required in robotic systems such as autonomous vehicles.

Wie oben erörtert, können mehrere Publisher in einen Ringpuffer schreiben. Der atomare Vergleich-und-Austausch, der verwendet wird, um den Pufferzähler zu inkrementieren, stellt sicher, dass nur ein einzelner Publisher den Zähler erfolgreich von gerade zu ungerade überführen und damit fortfahren kann, in den Puffer zu schreiben. Ein gleichzeitiger Publisher wird bei dieser Operation versagen und wird an einem Schreiben in den gleichen Puffer blockiert und muss auf eine Benachrichtigung warten, dass der Schreibvorgang abgeschlossen ist, bevor mit einem Schreibvorgang selbst fortgefahren wird.As discussed above, multiple publishers can write to a ring buffer. The atomic compare-and-exchange used to increment the buffer counter ensures that only a single publisher can successfully transition the counter from even to odd and continue writing to the buffer. A concurrent publisher will fail this operation and will be blocked from writing to the same buffer and will have to wait for a notification that the write is complete before proceeding with a write itself.

Die Speicherkonfiguration der vorliegenden Offenbarung eliminiert auch einen Gegendruck von Subscribern zu dem Publisher eines Ringpuffers. Der Publisher fährt einfach nacheinander und sequentiell in dem Ringpuffer fort, um Schreiboperationen unabhängig von der Anzahl von Subscribern und/oder Lesepositionen von Subscribern des Ringpuffers durchzuführen, da jeder Subscriber für das Aufrechterhalten seiner eigenen Leseposition in dem Ringpuffer und zum unabhängigen Erfassen verantwortlich ist, wenn er zurückgefallen ist.The memory configuration of the present disclosure also eliminates back pressure from subscribers to the publisher of a ring buffer. The publisher simply continues sequentially and sequentially in the ring buffer to perform write operations regardless of the number of subscribers and/or read positions of subscribers of the ring buffer, since each subscriber is responsible for maintaining its own read position in the ring buffer and for independently detecting when he fell behind.

BenachrichtigungenNotifications

In dem oben beschriebenen Publish/Subscribe-Datenkommunikationssystem kann ein Subscriber von Interesse registrieren oder Ereignisse abonnieren, die sich auf ein gegebenes Thema beziehen, über einen unten beschriebenen Speicherbroker; danach empfängt der Subscriber Benachrichtigungen solcher Ereignisse, die von Publishern erzeugt werden.In the publish/subscribe data communication system described above, a subscriber of interest can register or subscribe to events related to a given topic through a storage broker described below; thereafter, the subscriber receives notifications of such events generated by publishers.

In einem solchen Publish/Subscribe-System kommunizieren Publisher von Daten nicht direkt mit Subscribern; stattdessen interagieren Publisher und Subscriber durch eine Zwischeneinheit, die hier als Speicherbroker 170 bezeichnet wird, aber auch im Stand der Technik durch verschiedene andere Namen, wie etwa Benachrichtigungsserver oder Ereignisdienst, bekannt ist. Publisher können Benachrichtigungen über das Auftreten der Ereignisse auf einem Kanal veröffentlichen, indem zuerst diese Benachrichtigungen mit einem bestimmten Thema markiert werden. Subscriber empfangen Benachrichtigungen in Form der Nachrichten von dem Speicherbroker 170 für Ereignisse, die dem Thema/den Themen entsprechen, in denen sie von Interesse sind. Da Nachrichtenerzeuger (Publisher) und Abonnenten (Subscriber) über einen Speicherbroker 170 mittelbar miteinander kommunizieren, ist die Nachrichtenübertragung vom Nachrichtenempfang entkoppelt. Folglich müssen weder Produzenten noch Konsumenten den Zustand zueinander aufrechterhalten, und Abhängigkeiten zwischen den zusammenwirkenden Subscribern werden reduziert oder eliminiert. Das Publish/Subscribe-Schema ist daher flexibler als andere Kommunikationsparadigmen, wie z.B. Punkt-zu-Punkt-Nachrichtenübermittlung, da Publisher und Subscriber asynchron gestartet und gestoppt werden können. Ferner werden die Ereignisbenachrichtigung an die Subscriber oder Publisher gesendet, anstatt sie für Aktualisierungen abzufragen. Dies führt zu einer Verringerung des Netzwerkverkehrs.In such a publish/subscribe system, publishers of data do not communicate directly with subscribers; instead, publishers and subscribers interact through an intermediate entity, referred to herein as storage broker 170, but also known in the art by various other names, such as notification server or event service. Publishers can publish notifications about events occurring on a channel by first tagging these notifications with a specific topic. Subscribers receive notifications in the form of messages from the storage broker 170 for events corresponding to the topic(s) in which they are of interest. Since message producers (publishers) and subscribers (subscribers) communicate indirectly with one another via a storage broker 170, message transmission is decoupled from message reception. Consequently, neither producers nor consumers have to maintain the state with each other, and dependencies between the interacting subscribers are reduced or eliminated. The publish/subscribe scheme is therefore more flexible than other communication paradigms, such as point-to-point messaging, because publishers and subscribers can be started and stopped asynchronously. Furthermore, the event notifications are sent to the subscribers or publishers instead of polling them for updates. This leads to a reduction in network traffic.

Ein solches System ist gut für Robotersysteme (z.B. autonome Fahrzeuge) geeignet, bei denen viele Sensoren den sich dynamisch ändernden Zustand einiger darunter liegender Systeme überwachen und Messdaten an eine zentrale Serverstelle weiterleiten. Z.B. können Fahrzeugsensoren in einem autonomen Fahrzeug Benachrichtigungen über Änderungen im Zustand des darunter liegenden Systems erzeugen und können als Publisher bestimmter Arten von Ereignissen modelliert werden (Zustandsänderung in dem Fahrzeugsystem), oder es können Themen- und Fahrzeugsysteme, wie Wahrnehmungssystem, Vorhersagesystem, Routenplanungssystem usw. die die Ereignisse überwachen, als Subscriber modelliert werden.Such a system is well suited for robotic systems (e.g. autonomous vehicles) where many sensors monitor the dynamically changing state of some underlying systems and forward measurement data to a central server location. For example, vehicle sensors in an autonomous vehicle can generate notifications of changes in the state of the underlying system and can be modeled as publishers of certain types of events (change of state in the vehicle system), or they can be subject and vehicle systems, such as perception system, prediction system, route planning system, etc. who monitor the events are modeled as subscribers.

In Ausführungsformen der vorliegenden Offenbarung kann der Zähler, der den globalen Header 124 eines Ringpuffers und/oder einen Pufferzähler beinhaltet, der in dem entsprechenden Synchronisationsdatenbereich 130 gespeichert ist, in neuartigen Benachrichtigungsmechanismen verwendet werden, wie nachstehend beschrieben.In embodiments of the present disclosure, the counter, including the global header 124 of a ring buffer and/or a buffer counter stored in the corresponding synchronization data area 130, may be in novel notification mechanisms are used, as described below.

In bestimmten Ausführungsformen kann ein Benachrichtigungsmechanismus auf Futex (schnellen Benutzerraum-Mutex)-Mechanismen beruhen, die von bestimmten Betriebssystemen bereitgestellt werden, wie etwa jenen, die einen Linux-Kernel verwenden. Bei dieser Implementierung macht ein Thread, der auf eine Zustandsvariable wartet (z.B. über ein pthread_cond_wait), einen Futex-Systemaufruf mit einem FUTEX_WAIT-Argument, was bewirkt, dass der Thread suspendiert und dedisponiert wird. Wenn der worker den blockierten Thread benachrichtigt (z.B. über pthread_cond_signal), wird ein Futex-Systemaufruf mit einem FUTEX-WAKE-Argument vorgenommen, was bewirkt, dass der Wartethread aufgeweckt und neu geplant wird. Solche Futex-Mechanismen erfordern, dass es eine Speicheradresse gibt, die von allen beteiligten Prozessen oder Threads zugänglich ist, und dass die Daten, die an dieser Speicheradresse gespeichert sind, modifiziert werden, wenn ein Prozess die Prozesse oder Threads, die gegenwärtig auf dem Futex warten, benachrichtigen/wecken möchte.In certain embodiments, a notification mechanism may be based on futex (fast user space mutex) mechanisms provided by certain operating systems, such as those using a Linux kernel. In this implementation, a thread waiting for a state variable (e.g. via a pthread_cond_wait) makes a futex system call with a FUTEX_WAIT argument, causing the thread to be suspended and descheduled. When the worker notifies the blocked thread (e.g. via pthread_cond_signal), a Futex system call is made with a FUTEX WAKE argument, causing the waiting thread to be woken up and rescheduled. Such futex mechanisms require that there be a memory address accessible by all participating processes or threads, and that the data stored at that memory address be modified when a process accesses the processes or threads currently on the futex want to wait, notify/wake up.

Wenn der Synchronisationsdatenbereich 130 für jeden Puffer in einem Ringpuffer in dem gemeinsam genutzten Speicher 110 angeordnet ist, der diesen für beide Publisher und Subscriber zugänglich macht, und der Wert des darin gespeicherten Pufferzählers jedes Mal inkrementiert wird, wenn eine Schreiboperation zu dem Entsprechenden auftritt, kann ein Futex (eine 32-Bit-Ganzzahl, die an einem Speicherort gespeichert ist, und Futex-Systemaufrufe, die von diesem Ort arbeiten) in dem Synchronisationsdatenbereich 130 gespeichert werden. Ein solcher Futex-Systemaufruf kann eine Warteschlange von Prozessen oder Threads enthalten, die an dem Pufferzähler in demselben Synchronisationsdatenbereich 130 angebracht sind, um Operationen auf der Warteschlange anzufordern. Die Warteschlange von Prozessen kann Subscriber beinhalten, die auf eine Benachrichtigung über eine neue Schreiboperation auf einen Puffer warten, oder Publisher, die auf den Abschluss einer Schreiboperation auf einen Puffer warten (z.B., wenn mehrere Publisher in einen Ringpuffer schreiben können). Beispielsweise kann der Futex-Systemaufruf verwendet werden, um eine Benachrichtigung an Subscriber eines Ringpuffers zu senden, wenn ein Wert eines Pufferzählers, der einem Puffer in dem Ringpuffer entspricht, gerade und um 2 inkrementiert wird, um die Subscriber aufzufordern, die neu geschriebenen Nachrichten aus dem entsprechenden Puffer auszulesen. In ähnlicher Weise kann der Futex-Systemaufruf verwendet werden, um Subscriber auf eine Warteschlange zu setzen, wenn der Wert des Pufferzählers entweder ungerade oder nicht inkrementiert wird, seit dem letzten Schreibvorgang. Da der Synchronisationsdatenbereich 130 für jeden Puffer eines Ringpuffers eindeutig ist, kann eine solche Futex-Systemanrufbenachrichtigung auch die Identität des Puffers anzeigen, auf dem die Schreiboperation durchgeführt wird. Wie oben erwähnt, wird ein gleichzeitiger Publisher von dem Schreiben in den Puffer blockiert, wenn eine Schreiboperation zu diesem Puffer bereits durch einen anderen Publisher läuft und muss auf eine Benachrichtigung warten, dass der Schreibvorgang abgeschlossen ist, bevor mit einem Schreibvorgang selbst fortgefahren wird. In solchen Szenarien kann der Futex-Systemaufruf verwendet werden, um eine Benachrichtigung an Publisher eines Ringpuffers zu senden, wenn ein Wert eines Pufferzählers, der einem Puffer entspricht, von ungerade zu gerade (oder umgekehrt) geändert wird.If the synchronization data area 130 for each buffer is arranged in a ring buffer in the shared memory 110, making it accessible to both publishers and subscribers, and the value of the buffer counter stored therein is incremented each time a write operation to the corresponding one occurs, can a futex (a 32-bit integer stored in a memory location and futex system calls operating from that location) are stored in the synchronization data area 130. Such a futex system call may include a queue of processes or threads attached to the buffer counter in the same synchronization data area 130 to request operations on the queue. The queue of processes can include subscribers waiting for notification of a new write to a buffer, or publishers waiting for a write to a buffer to complete (e.g., when multiple publishers can write to a ring buffer). For example, the Futex system call can be used to send a notification to subscribers of a ring buffer when a value of a buffer counter corresponding to a buffer in the ring buffer is about to be and incremented by 2 to prompt the subscribers to post the newly written messages read out from the corresponding buffer. Similarly, the Futex system call can be used to queue Subscriber when the value of the buffer counter becomes either odd or not incremented since the last write. Since the synchronization data area 130 is unique for each buffer of a ring buffer, such a futex system call notification can also indicate the identity of the buffer on which the write operation is performed. As mentioned above, a concurrent publisher will be blocked from writing to the buffer if a write to that buffer is already in progress by another publisher and must wait for a notification that the write is complete before proceeding with a write itself. In such scenarios, the Futex system call can be used to send a notification to publishers of a ring buffer when a value of a buffer counter corresponding to a buffer changes from odd to even (or vice versa).

In einigen Ausführungsformen kann der oben beschriebene Futex-Systemaufruf in dem globalen Header 124 gespeichert und an dem darin gespeicherten Zähler angebracht werden. Ein solcher Futex-Systemaufruf kann eine Warteschlange von Prozessen oder Threads enthalten, die an dem Zähler in dem globalen Header 124 angebracht ist, um Operationen auf der Warteschlange anzufordern. Beispielsweise kann der Futex-Systemaufruf verwendet werden, um eine Benachrichtigung an Subscriber eines Ringpuffers zu senden, wenn ein Wert des Zählers um 2 inkrementiert wird, um die Subscriber aufzufordern, die neu geschriebenen Nachrichten von dem Ringpuffer zu lesen. In ähnlicher Weise kann der Futex-Systemaufruf verwendet werden, um Subscriber auf einer Warteschlange zu setzen, wenn der Wert des Zählers seit dem letzten Schreibvorgang zum Ringpuffer nicht inkrementiert worden ist. Wie oben erörtert, kann eine Anzahl verwendet werden, um die aktuelle Schreibposition eines Publishers in dem Ringpuffer zu identifizieren, und Subscriber können Daten lesen, die in vorhergehende Puffer in Bezug auf die Schreibposition geschrieben werden.In some embodiments, the futex system call described above may be stored in the global header 124 and attached to the counter stored therein. Such a futex system call may include a queue of processes or threads attached to the counter in the global header 124 to request operations on the queue. For example, the Futex system call can be used to send a notification to subscribers of a ring buffer when a value of the counter is incremented by 2 to request the subscribers to read the newly written messages from the ring buffer. Similarly, the Futex system call can be used to put subscribers on a queue if the value of the counter has not been incremented since the last write to the ring buffer. As discussed above, a count can be used to identify a publisher's current write position in the ring buffer, and subscribers can read data written to previous buffers relative to the write position.

Während die obige Beschreibung die Verwendung von Futex in Kombination mit dem Pufferzähler und/oder dem seqlock-Zähler beschreibt (d.h. Futex wird von Subscribern gemeinsam genutzt), kann optional ein Futex für jeden Subscriber separat erzeugt werden. In solchen Szenarien kann jedem Subscriber ein Futex-Speicherplatz zugewiesen werden, der eine Bitmap speichern kann, die 1 Bit enthält, das jedem Kanal (oder Ringpuffer) zugeordnet ist, für den der Subscriber Benachrichtigungen empfangen möchte. Wenn ein Subscriber bereit ist, auf einen Kanal- oder Ringpuffer zu warten, kann er den Bitwert für diesen Kanal oder den Ringpuffer auf 1 (oder 0) in der Bitmap ändern und dann auf den Futex-Systemaufruf warten. Nach Beendigung einer Schreiboperation auf einen Kanal kann der Publisher das Bit für diesen Kanal auf 0 (oder 1) mit einer bitweisen Atom-UND-Operation atomar ändern. Wenn die atomare Operation angegeben ist, dass der Bit-geänderte Zustand von 1 auf 0 oder 0 bis 1 (d.h., ein Subscriber wartet auf den Kanal), kann eine Benachrichtigung unter Verwendung des Futex-Systemanrufs an den wartenden Subscriber gesendet werden. Dies ermöglicht es dem Subscriber, auf mehreren Kanälen zu warten und effizient zu wissen, welcher Kanal (bzw. welche Kanäle) dafür verantwortlich waren, dass er aufgeweckt wurdeWhile the above description describes the use of Futex in combination with the buffer counter and/or the seqlock counter (i.e. Futex is shared among subscribers), a Futex can optionally be created for each subscriber separately. In such scenarios, each subscriber can be allocated a futex space that can store a bitmap containing 1 bit allocated to each channel (or ring buffer) for which the subscriber wants to receive notifications. When a subscriber is ready to wait for a channel or ring buffer, it can change the bit value for that channel or ring buffer to 1 (or 0) in the bitmap and then wait for the futex system call. After completing a write operation to a channel, the publisher can set the bit for that channel to 0 (or 1). change atomically using a bitwise atom AND operation. If the atomic operation is specified that the bit changed state from 1 to 0 or 0 to 1 (that is, a subscriber is waiting for the channel), a notification can be sent to the waiting subscriber using the Futex system call. This allows the subscriber to wait on multiple channels and efficiently know which channel (or channels) were responsible for waking him up

Benachrichtigungsmechanismen, die keine Futex-Systemaufrufe verwenden, liegen ebenfalls innerhalb des Umfangs dieser Offenbarung. Beispiele können, ohne Einschränkung, dateiartige Mechanismen beinhalten, die durch das Betriebssystem bereitgestellt werden (z.B. eventfd-Objekt , eine First-in-First-Out-Pipe, eine Netzwerksocket-Verbindung) mit einer solchen dateiartigen Entität pro Publisher/Subscriber-Paar, UNIX socket (d.h. Nicht-Netzwerk oder lokal) oder dergleichen bereitgestellt werden.Notification mechanisms that do not use Futex system calls are also within the scope of this disclosure. Examples may include, without limitation, file-like mechanisms provided by the operating system (e.g. eventfd object, a first-in-first-out pipe, a network socket connection) with one such file-like entity per publisher/subscriber pair, UNIX socket (i.e. non-network or local) or the like can be provided.

In einem eventfd-basierten Benachrichtigungsmechanismus können Objekte, die als eventfd-Objekte bekannt sind, mit Dateideskriptoren assoziiert sein, die durch das OS bei der Anforderung eines Prozesses erzeugt werden. Solche Dateideskriptoren können dann mit anderen Prozessen gemeinsam genutzt werden. Subscriberprozesse können auf effiziente Weise auf einen Dateideskriptor warten, der lesbar ist, unter Verwendung verschiedener Mechanismen, wie etwa, ohne Einschränkung, select(), poll(), epoll() usw. Ein Publisher-Prozess kann auf den eventfd-Objektdatei-Deskriptor nach Durchführen einer Schreiboperation auf den gemeinsam genutzten Speicher schreiben, was die abonnierenden Prozesse effizient aufweckt. Ein solcher Benachrichtigungsmechanismus erfordert mindestens ein eventfd-Objekt pro Ringpuffer und kann erzeugt werden, wenn der Ringpuffer erzeugt wird. Das eventfd-Objekt kann über ein geeignetes betriebssystemunterstütztes Mittel gemeinsam genutzt werden, wie z.B. - ohne Einschränkung - Vererbung vom Eltern-Prozess zum Kind-Prozess, Teilen über lokale Netzwerk-Sockets oder dergleichen. Dieser Mechanismus ermöglicht es Subscribern, effizient auf einen von mehreren Kanälen oder Ringpuffern zu warten, um neue Daten zu erlangen, da die Betriebssysteme Mechanismen zum Warten auf eine Benachrichtigung über mehrere Dateideskriptoren bereitstellen.In an eventfd-based notification mechanism, objects known as eventfd objects may be associated with file descriptors that are created by the OS upon request of a process. Such file descriptors can then be shared with other processes. Subscriber processes can efficiently wait for a file descriptor that is readable using various mechanisms such as, without limitation, select(), poll(), epoll(), etc. A publisher process can wait for the eventfd object file descriptor after performing a write operation, write to the shared memory, which efficiently wakes up the subscribing processes. Such a notification mechanism requires at least one eventfd object per ring buffer and can be created when the ring buffer is created. The eventfd object may be shared via any appropriate operating system supported means, such as, without limitation, inheritance from parent process to child process, sharing over local network sockets, or the like. This mechanism allows subscribers to efficiently wait for one of multiple channels or ring buffers to acquire new data, as operating systems provide mechanisms for waiting for notification via multiple file descriptors.

Optional kann das eventfd-Objekt in einem „Semaphor-Modus“ verwendet werden, der einen internen Zähler aufrechterhält. Ein Publisher kann diesen Zähler um einen bestimmten Wert inkrementieren, und wenn jeder Warte-Subscriber aufgeweckt wird, kann der Zähler um 1 dekrementiert werden. Dies ermöglicht es dem Publisher, zu steuern, wie viele Subscriber unter Verwendung der eventfd-Benachrichtigung aufgeweckt werden können. Für die Anzahl der auf einem Kanal- oder Ringpuffer wartenden Subscriber kann auch ein separater Zähler („Subscriber-Zähler“) verwendet werden. Wenn ein Subscriber auf einen Kanal warten möchte, inkrementiert er zuerst den Subscriberzähler und prüft dann, ob er noch warten muss (durch Vergleich mit dem vorherigen Zählerwert). Wenn der Subscriber noch warten muss, wartet er auf das eventfd-Objekt. Wenn der Subscriber jedoch nicht warten muss, dekrementiert er sofort den Subscriberzähler und wartet nicht auf das eventfd-Objekt. Wenn der Publisher bereit ist, Subscriber einer neuen Schreiboperation zu benachrichtigen, liest er die Zählung des wartenden Subscribers über eine atomare Austauschanweisung auf dem Subscriberzähler, die den Subscriber-Zählerwert an den Publisher zurückgibt und den Subscriberzähler auf null zurücksetzt. Der Publisher schreibt dann diesen Wert auf das eventfd-Objekt, was dazu führt, dass die richtige Anzahl von Subscribern benachrichtigt/aufgeweckt wirdOptionally, the eventfd object can be used in a “semaphore mode” that maintains an internal counter. A publisher can increment this counter by a certain value, and when each waiting subscriber is woken up, the counter can be decremented by 1. This allows the publisher to control how many subscribers can be woken up using the eventfd notification. A separate counter (“subscriber counter”) can also be used for the number of subscribers waiting on a channel or ring buffer. When a subscriber wants to wait for a channel, it first increments the subscriber counter and then checks whether it still has to wait (by comparing it with the previous counter value). If the subscriber still has to wait, it waits for the eventfd object. However, if the subscriber does not need to wait, it immediately decrements the subscriber counter and does not wait for the eventfd object. When the publisher is ready to notify subscribers of a new write operation, it reads the waiting subscriber's count via an atomic swap instruction on the subscriber counter, which returns the subscriber counter value to the publisher and resets the subscriber counter to zero. The publisher then writes this value to the eventfd object, resulting in the correct number of subscribers being notified/awakened

In bestimmten Ausführungsformen kann die Verwendung der eventfd-Benachrichtigung (an jedem Knoten) einen Eventfd-Broker erfordern, um den Benachrichtigungsmechanismus auszuführen. Z.B. kann der eventfd-Broker einen Domänensocket erstellen und auf Verbindungsanforderungen lauschen. Ein Peer kann eine Verbindung zu dem Broker öffnen und diese Verbindung öffnen, solange dieser eine Aufgabe ausführt. Publishing-Peers können ihren Speicherbereich auch im gemeinsam genutzten Speicher und im entsprechenden eventfd-Objekt erstellen oder zuordnen und den Regionsnamen und das eventfd-Objekt an den eventfd-Broker übermitteln. Der Eventfd-Broker kann die Bereichsnamen und eventfd-Objekte für Kanäle übertragen, die von einem abonnierenden Peer angefordert werden, einschließlich Aktualisierungen, wenn Publisher kommen und gehen (oder neu starten). In einigen Ausführungsformen kann der Eventfd-Broker der unten beschriebene Speicherbroker sein.In certain embodiments, use of eventfd notification (at each node) may require an eventfd broker to execute the notification mechanism. For example, the eventfd broker can create a domain socket and listen for connection requests. A peer can open a connection to the broker and open that connection as long as the broker is executing a task. Publishing peers can also create or allocate their storage region in shared storage and the corresponding eventfd object, and submit the region name and eventfd object to the eventfd broker. The eventfd broker can broadcast the scope names and eventfd objects for channels requested by a subscribing peer, including updates as publishers come and go (or restart). In some embodiments, the Eventfd broker may be the storage broker described below.

SpeicherbrokerStorage broker

Unter erneuter Bezugnahme auf 1 kann der gemeinsam genutzte Speicher 110 auch mit einem Speicherbroker 170 in Kommunikation stehen, der konfiguriert ist, um die Speicherbereiche 112a-n und die Ringpuffer 120a-n zu verwalten. Dazu kann ein Broker 170 einen einzelnen Prozess enthalten, der konfiguriert ist, um alle Aufgaben oder mehrere Prozesse auszuführen, die zugewiesen sind, um eine oder mehrere der Aufgaben des Speicherbrokers durchzuführen. Der Speicherbroker 170 kann einen Inter-Prozess-Kommunikationsmechanismus dynamisch einrichten (z.B. ein UNIX-Domänen-Socket, einen Internet-Socket, lokale Sockets, einen Netzwerksocket, eine First-in-First-Out-Pipe oder dergleichen) gemäß verschiedenen Betriebssystem-Anforderungen für die Kommunikation mit Subscribern, Publishern und/oder gemeinsam genutztem Speicher 110. Es ist zu beachten, dass der Speicherbroker 170 nur Metadaten kommuniziert und nur während des Startups, der Zustandsrekonstruktion, des Aufgabenneustarts und/oder des Abschaltens beteiligt ist. Die Nachrichten, die im gemeinsam genutzten Speicher 110 veröffentlicht werden, fließen niemals durch den Speicherbroker 170.Referring again to 1 The shared memory 110 may also be in communication with a memory broker 170 configured to manage the memory areas 112a-n and the ring buffers 120a-n. To do this, a broker 170 may include a single process configured to execute all tasks or multiple processes assigned to perform one or more of the storage broker's tasks. The storage broker 170 may dynamically establish an inter-process communication mechanism (e.g., a UNIX domain nen socket, an Internet socket, local sockets, a network socket, a first-in-first-out pipe or the like) according to various operating system requirements for communicating with subscribers, publishers and/or shared memory 110. It is Note that the storage broker 170 only communicates metadata and is only involved during startup, state reconstruction, task restart and/or shutdown. The messages published in shared storage 110 never flow through storage broker 170.

Ein Speicherbroker 170 kann durch Erzeugen eines Inter-Prozess-Kommunikations-(IPC)-Mechanismus unter Verwendung eines beliebigen jetzt oder im Folgenden bekannten Verfahrens initialisiert werden. Wenn der IPC-Mechanismus ein Domänensocket ist, kann die Initialisierung das Binden des Sockets an eine global konfigurierte Broker-Adresse umfassen, um einen eindeutigen Dateipfad für einen gegebenen Netzwerkknoten zu erzeugen. Wenn ein Speicherbroker den eindeutigen Dateipfad nicht unter Verwendung der global konfigurierten Broker-Adresse erzeugen kann, kann das ein Anzeichen dafür sein, dass ein anderer Speicherbroker bereits für den Netzwerkknoten existiert/läuft. Bei der Initialisierung kann der Speicherbroker alle vorhandenen benannten Speicherbereiche in dem gemeinsam genutzten Speicher 110 identifizieren, indem er z.B. auf den temporären Dateispeicher zugreift, der benannte Dateibereiche enthält (z.B. dev/shm in Linux-Betriebssystemen). Der Speicherbroker kann dann das erwartete Benennungsmuster für Ringpuffer verwenden, um Ringpuffer-IDs für jeden genannten Speicherbereich zu identifizieren. Der Speicherbroker kann auch jede benannte Speicherregion abbilden (z.B. unter Verwendung von mmap ()) und versuchen, sich an dem Ringpuffer dieses Speicherbereichs anzuhängen („attachment“). Wenn die Anhängung nicht erfolgreich ist, kann der Speicherbroker bestimmen, dass ein solcher Ringpuffer verfälscht ist, und den entsprechenden Eintrag in der temporären Datenbank 172 zu löschen (z.B. /dev/shm-Eintrag).Wenn ein Prozess einen solchen beschädigten Ringpuffer verwendet, wird das Löschen des entsprechenden Eintrags den Bereich nicht freigeben, bis alle Verweise auf den Ringpuffer entfernt worden sind.A memory broker 170 may be initialized by creating an inter-process communication (IPC) mechanism using any method now or hereinafter known. If the IPC mechanism is a domain socket, initialization may include binding the socket to a globally configured broker address to produce a unique file path for a given network node. If a storage broker cannot generate the unique file path using the globally configured broker address, it may be an indication that another storage broker already exists/is running for the network node. Upon initialization, the storage broker may identify all existing named storage areas in the shared memory 110, for example, by accessing the temporary file storage containing named file areas (e.g., dev/shm in Linux operating systems). The storage broker can then use the expected ring buffer naming pattern to identify ring buffer IDs for each named storage area. The memory broker can also map any named memory region (e.g. using mmap()) and attempt to attach to that memory region's ring buffer. If the append is not successful, the memory broker may determine that such a ring buffer is corrupted and delete the corresponding entry in the temporary database 172 (e.g., /dev/shm entry). If a process uses such a corrupted ring buffer, Deleting the corresponding entry will not release the area until all references to the ring buffer have been removed.

Es sollte beachtet werden, dass, wenn ein Benachrichtigungsmechanismus auf der Grundlage von gemeinsamen Dateideskriptoren (z.B. Abgleichs-Objekt, das oben beschrieben wurde) ausgewählt wird, UNIX-Domänensockets als der IPC-Mechanismus zwischen Speicherbroker und ihren Peers verwendet werden müssen, da dies der einzige IPC-Mechanismus ist, der es ermöglicht, dass Dateideskriptoren zwischen Prozessen gemeinsam genutzt werden können.It should be noted that if a notification mechanism based on shared file descriptors (e.g. Match Object described above) is selected, UNIX domain sockets must be used as the IPC mechanism between storage brokers and their peers, as this is the is the only IPC mechanism that allows file descriptors to be shared between processes.

Wenn das Anhängen erfolgreich ist, kann der Speicherbroker 170 einen Datensatz des Ringpuffers in einem Datenspeicher 175a-n erstellen und periodisch Informationen oder Metadaten, die sich auf den Ringpuffer beziehen, wie ohne Einschränkung, Ring-ID, Puffergröße, Pufferausrichtung, Ringgröße (d.h. die Anzahl von Puffern), den zugehörigen Kanal, wenn der zugehörige Kanal bekannt ist, eine Liste von Publishern, von denen bekannt ist, dass sie an den Ring publiziert werden, oder dergleichen erzeugen. In einigen Ausführungsformen kann der Speicherbroker 170, wenn das Anhängen erfolgreich ist, den Ringpuffer in den Bewährungs- oder Probationszustand versetzen und einen entsprechenden Datensatz in einer Probationsliste (nachstehend erörtert) erzeugen.If the append is successful, the storage broker 170 may create a record of the ring buffer in a data store 175a-n and periodically update information or metadata related to the ring buffer, such as, without limitation, ring ID, buffer size, buffer orientation, ring size (i.e. the number of buffers), the associated channel if the associated channel is known, a list of publishers known to be published to the ring, or the like. In some embodiments, if the append is successful, the storage broker 170 may place the ring buffer into the probation or probation state and create a corresponding record in a probation list (discussed below).

In bestimmten Ausführungsformen kann der Speicherbroker 170 bei der Initialisierung verschiedene Funktionen zur Verwaltung des gemeinsam genutzten Speichers 110 ausführen, wie etwa, ohne Einschränkung, Verbindungen von Prozessen (Subscribern und/oder Publishern) auf seiner Inter-Prozesskommunikations-Sockets zu akzeptieren; die Verbindungen zu validieren oder zu authentifizieren; Protokollnachrichten mit den Prozessen auszutauschen, zu initialisieren, zu initialisieren und/oder neue Speicherbereiche/Ringpuffer/Kanäle/usw. zuzuweisen; Überprüfen und Aktualisieren von Metadaten oder Informationen in Bezug auf bestehende Ringpuffer/Kanäle/Peers (periodisch und/oder beim Auftreten eines Triggerereignisses); Durchführen einer Zustandsrekonstruktion; Durchführen von Diagnose und Reparatur eines gemeinsam genutzten Speichers; Kommunizieren von Informationen über Ringpuffer an Publisher, Subscriber und Diagnose-/Testwerkzeuge, od. dgl.In certain embodiments, upon initialization, memory broker 170 may perform various functions to manage shared memory 110, such as, without limitation, accepting connections from processes (subscribers and/or publishers) on its inter-process communication sockets; validate or authenticate the connections; Exchange protocol messages with the processes, initialize, and/or create new memory areas/ring buffers/channels/etc. to assign; Review and update metadata or information related to existing ring buffers/channels/peers (periodically and/or upon occurrence of a trigger event); performing state reconstruction; Performing shared memory diagnostics and repairs; Communicating information via ring buffers to publishers, subscribers and diagnostic/test tools, or the like.

In einer oder mehreren Ausführungsformen kann der Speicherbroker 170 die verschiedenen Speicherbereiche 112a-n und/oder Ringpuffer 120a-n beispielsweise als Reaktion auf eine Anforderung von einem Publisher eines Themas durch Senden einer Anweisung an das Betriebssystem zuweisen, initialisieren und/oder freigeben. Wie oben erörtert, kann ein Speicherbereich nur einen Ringpuffer enthalten.In one or more embodiments, the memory broker 170 may allocate, initialize, and/or release the various memory areas 112a-n and/or ring buffers 120a-n, for example, in response to a request from a publisher of a topic by sending an instruction to the operating system. As discussed above, a memory area can contain only one ring buffer.

4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zum Zuweisen eines Ringpuffers durch einen Speicherbroker veranschaulicht. Bei 402 kann der Speicherbroker eine Anforderung von einem Publisher empfangen, um Nachrichten zu veröffentlichen, die sich auf ein Thema „X“ beziehen, und die Anforderung kann Identifizierungs- und Authentifizierungsinformationen beinhalten, die dem Publisher entsprechen. Solche Identifikationsinformationen können z.B. eine Publisher-ID, wie etwa eine Sicherheitskennung, eine Vorrichtungskennung oder dergleichen beinhalten. Die Identifikationsinformationen können auch Informationen beinhalten, wie etwa, ohne Einschränkung, eine global eindeutige Kennung (GUID), einen Aufgabeninstanznamen, etc. Z.B. kann der Speicherbroker die Publisher-Identifikation (Posenfilter), den Aufgabennamen (Posendaten) und die Task-GUID bestimmen. Der in dieser Beschreibung verwendete Begriff „Aufgabe“ oder „Task“ stellt eine Arbeitseinheit zum Ausführen einer Parallelverarbeitung eines Prozesses und eines Threads auf einem UNIX-Betriebssystem, eines Tasks auf einem Echtzeit-Betriebssystem und dergleichen dar. Jede Aufgabe kann eine oder mehrere Themen veröffentlichen. 4 is a flowchart illustrating an example method for allocating a ring buffer by a storage broker. At 402, the storage broker may receive a request from a publisher to publish messages related to a topic "X", and the request may include identification and authentication information corresponding to the publisher. Such identification information For example, mations may include a publisher ID, such as a security identifier, a device identifier, or the like. The identification information may also include information such as, without limitation, a globally unique identifier (GUID), a task instance name, etc. For example, the storage broker may determine the publisher identification (pose filter), the task name (pose data), and the task GUID. The term "task" as used in this description represents a unit of work for executing parallel processing of a process and a thread on a UNIX operating system, a task on a real-time operating system, and the like. Each task may publish one or more topics .

Der Speicherbroker kann das Thema X basierend auf den Identifikationsinformationen bestimmen. Optional kann das Thema "X"' explizit in der Anforderung enthalten sein. Die Anforderung kann auch Parameter von Nachrichten beinhalten, die von dem Publisher veröffentlicht werden sollen, wie etwa, ohne Einschränkung, Metadaten über die Nachricht, Deadline, Puffergrößen, Standardwerte, QoS-Zuverlässigkeitskriterien, Typen von Konfigurationsdaten oder dergleichen. Authentifizierungsinformationen können Informationen beinhalten, die von einem beliebigen oder im Folgenden bekannten Authentifizierungsprotokollen verwendet werden, wie ohne Einschränkung, Benutzernamen, Passwörter, Sicherheitszertifikate, Authentifizierungstoken oder dergleichen.The storage broker can determine the topic X based on the identification information. Optionally, the topic "X" can be explicitly included in the request. The request may also include parameters of messages to be published by the publisher, such as, without limitation, metadata about the message, deadline, buffer sizes, default values, QoS reliability criteria, types of configuration data, or the like. Authentication information may include information used by any or hereinafter known authentication protocols, such as, without limitation, usernames, passwords, security certificates, authentication tokens, or the like.

Es sollte beachtet werden, dass der Speicherbroker einen Datenspeicher 175a-n enthalten und/oder auf einen Datenspeicher 175a-n zugreifen kann, der eine Datenbank von Peer-IDs, Task-GUIDs, Aufgabeninstanznamen zum Durchführen von Identifikation und Authentifizierung enthält. Jeder Peer-ID kann auch einer Liste von Subscriberkanälen, eine Liste von Ringpuffern, die der Peer publiziert, ein Verbindungsstatus (z.B. verbunden oder getrennt, Socket-Deskriptor usw.) oder dergleichen zugeordnet sein. Die Datenbank kann periodisch durch den Broker 170 aktualisiert werden.It should be noted that the storage broker may include and/or access a data store 175a-n that contains a database of peer IDs, task GUIDs, task instance names for performing identification and authentication. Each peer ID may also be associated with a list of subscriber channels, a list of ring buffers that the peer publishes, a connection status (e.g. connected or disconnected, socket descriptor, etc.), or the like. The database may be periodically updated by the broker 170.

In bestimmten Ausführungsformen kann der Publisher eine Verbindung mit dem Speicherbroker (z.B. in einem HELLO-Paket) initiieren, bevor eine PUBLISH-MESSAGE-Anforderung an den Speicherbroker gesendet wird. Eine oder mehrere der Identifikations- und/oder Authentifizierungsinformationen können in dem HELLO-Paket enthalten sein. Parameter zum Veröffentlichen der Nachricht und Identifikation des Themas können in dem HELLO-Paket und/oder der PUBLISH-MESSAGE-Anforderung enthalten sein.In certain embodiments, the publisher may initiate a connection with the storage broker (e.g., in a HELLO packet) before sending a PUBLISH MESSAGE request to the storage broker. One or more of the identification and/or authentication information may be included in the HELLO packet. Parameters for publishing the message and identifying the topic may be included in the HELLO packet and/or the PUBLISH-MESSAGE request.

Bei 404 kann der Speicherbroker bestimmen, ob ein Kanal, der dem Thema X entspricht, bereits in dem Kommunikationsnetzwerk existiert. Wenn ein solcher Kanal existiert (404: JA), kann der Speicherbroker einen Ringpuffer auf dem Kanal dem Publisher zuweisen (Schritt 406), indem ein neuer Ringpuffer auf dem Kanal für den Publisher erzeugt wird oder ein bereits vorhandener Ringpuffer auf dem Kanal dem Publisher zugewiesen wird. Der Speicherbroker kann dem Kanal einen neu erzeugten Ringpuffer auf dem Kanal in wenigstens folgenden Situationen zuweisen: (i) das System erlaubt es mehreren Publishern, Nachrichten zu einem einzelnen Ringpuffer zu veröffentlichen, und alle geeignet konfigurierten Ringpuffer auf dem Kanal sind bereits einem Live-Publisher zugeordnet; (ii) das System ermöglicht es mehreren Publishern, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, aber die Ringpuffer auf dem Kanal sind nicht geeignet für die Nachrichten des Publishers konfiguriert (z.B. ungeeignete Ringpuffergröße, Anzahl von Puffern, Nachrichtengröße, Differenz in Aufgaben in Bezug auf die anderen Publisher dieses Ringpuffers oder dergleichen); (iii) die bereits existierenden Ringpuffer sind für die Nachrichten des Publishers nicht geeignet konfiguriert(z. B. ungeeignete Ringpuffergröße, Anzahl von Puffern, Nachrichtengröße oder dergleichen); (iv) Ringpuffer des Kanals sind in einem Fehlerzustand; (v) der Publisher darf nicht auf die bereits vorhandenen Ringpuffer veröffentlichen, usw. Der Speicherbroker kann die in der Anforderung des Publishers enthaltenen Parameter verwenden, um den Ringpuffer im Hinblick auf verschiedene Kanalbeschränkungen zu erzeugen. Beispiele für solche Kanalbeschränkungen können, ohne Einschränkung, maximale Nachrichtengröße, maximale Anzahl von Puffern, Nachrichtentyp, Kanalpriorität (in Bezug auf zulässige Latenz) oder dergleichen umfassen.At 404, the storage broker may determine whether a channel corresponding to topic X already exists in the communications network. If such a channel exists (404: YES), the storage broker may assign a ring buffer on the channel to the publisher (step 406) by creating a new ring buffer on the channel for the publisher or assigning an existing ring buffer on the channel to the publisher becomes. The storage broker may assign to the channel a newly created ring buffer on the channel in at least the following situations: (i) the system allows multiple publishers to publish messages to a single ring buffer and all appropriately configured ring buffers on the channel are already live to a publisher assigned; (ii) the system allows multiple publishers to publish messages to a single ring buffer, but the ring buffers on the channel are not suitably configured for the publisher's messages (e.g. inappropriate ring buffer size, number of buffers, message size, difference in tasks in relation to the other publishers of this ring buffer or similar); (iii) the pre-existing ring buffers are not suitably configured for the publisher's messages (e.g. inappropriate ring buffer size, number of buffers, message size, or the like); (iv) channel ring buffers are in an error state; (v) the publisher may not publish to the pre-existing ring buffers, etc. The storage broker may use the parameters included in the publisher's request to create the ring buffer in light of various channel constraints. Examples of such channel limitations may include, without limitation, maximum message size, maximum number of buffers, message type, channel priority (in terms of allowable latency), or the like.

Der Speicherbroker kann in mindestens den folgenden Situationen einen bereits existierenden Ringpuffer auf dem Kanal dem Publisher zuweisen: (i) das System ermöglicht es mehreren Publishern, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, und es gibt einen oder mehrere Ringpuffer auf dem Kanal, die geeignet für die Nachrichten des Publishers konfiguriert sind; (ii) das System erlaubt es mehreren Publishern nicht, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, und es gibt mindestens einen geeignet konfigurierten Ringpuffer auf dem Kanal, der nicht bereits mit einem Live-Publisher assoziiert ist; usw.The storage broker may assign a pre-existing ring buffer on the channel to the publisher in at least the following situations: (i) the system allows multiple publishers to publish messages to a single ring buffer, and there are one or more ring buffers on the channel that are suitable are configured for the publisher's messages; (ii) the system does not allow multiple publishers to publish messages to a single ring buffer and there is at least one appropriately configured ring buffer on the channel that is not already associated with a live publisher; etc.

In einigen Ausführungsformen kann der Speicherbroker, wenn bereits ein Kanal existiert, einen Ringpuffer aus einer Probationsliste auf dem Kanal zuweisen (unten ausführlicher erörtert).In some embodiments, if a channel already exists, the storage broker may allocate a ring buffer from a trial list on the channel (discussed in more detail below).

Wenn ein Kanal, der dem Thema X entspricht, nicht bereits existiert (404: NEIN), kann der Speicherbroker 408 einen neuen Kanal und mindestens einen Ringpuffer für den Publisher erzeugen 408. Verschiedene Kanalparameter zum Erzeugen des Kanals und der Ringpufferparameter können durch den Publisher, den Speicherbroker und/oder einen Subscriber bereitgestellt werden. Beispiele für Kanalparameter können, ohne Einschränkung, die maximale Größe jeder Nachricht auf dem Kanal (die verwendet wird, um die Größe jedes Puffers in den Ringpuffern des Kanals zu bestimmen), die maximale Anzahl von Nachrichten an die Warteschlange (die verwendet wird, um die Anzahl von Puffern in den Ringpuffern des Kanals zu bestimmen), die Anzahl von Publishern, die auf einem Ringpuffer des Kanals veröffentlicht werden können, eine maximale Anzahl von Ringpuffern auf dem Kanal, Ringpufferteilung erlaubt oder nicht, Kanalpriorität in Bezug auf erlaubte Latenz, Typen von Nachrichten, Kanalbenennungsprotokoll, erlaubte Liste von Publishern, die auf den Kanal veröffentlicht werden dürfen, oder dergleichen umfassen. In bestimmten Ausführungsformen kann der Speicherbroker eine stabile Ganzzahl-ID als Kanalidentifikation unabhängig von dem Kanalzeichennamen verwenden. Ein solches Benennungsprotokoll kann die Backend-Protokollverarbeitung vereinfachen, dem Header eine kompakte und feste Größe verleihen und die Gefahr von Kollisionen zwischen Namen oder dergleichen reduzieren. Z.B. kann ein 64-Bit-Hash des Kanalnamens als die stabile Ganzzahl-ID verwendet werdenIf a channel corresponding to topic X does not already exist (404: NO), the Storage broker 408 creates 408 a new channel and at least one ring buffer for the publisher. Various channel parameters for creating the channel and the ring buffer parameters may be provided by the publisher, the storage broker and/or a subscriber. Examples of channel parameters may include, without limitation, the maximum size of each message on the channel (which is used to determine the size of each buffer in the channel's ring buffers), the maximum number of messages to the queue (which is used to determine the number of buffers in the ring buffers of the channel), the number of publishers that can be published on a ring buffer of the channel, a maximum number of ring buffers on the channel, ring buffer sharing allowed or not, channel priority in terms of allowed latency, types of Messages, channel naming protocol, permitted list of publishers who may publish to the channel, or the like. In certain embodiments, the storage broker may use a stable integer ID as a channel identifier independent of the channel character name. Such a naming protocol can simplify backend protocol processing, give the header a compact and fixed size, and reduce the risk of collisions between names or the like. For example, a 64-bit hash of the channel name can be used as the stable integer ID

In einigen Ausführungsformen kann ein Kanal einer zugelassenen Liste von Publishern zugeordnet sein, die Nachrichten zu Ringpuffern des Kanals veröffentlichen können. In solchen Ausführungsformen kann es selbst dann, wenn ein Kanal dem Thema X entspricht, nicht zugelassen sein, dass der Publisher die Anforderung sendet, Nachrichten zu seinen Ringpuffern zu veröffentlichen. In solchen Szenarien kann der Speicherbroker einen neuen Kanal mit einem neuen Ringpuffer erzeugen, wie oben mit Bezug auf Schritt 408 erörtert.In some embodiments, a channel may be associated with an approved list of publishers that can publish messages to ring buffers of the channel. In such embodiments, even if a channel corresponds to topic X, the publisher may not be allowed to send the request to publish messages to its ring buffers. In such scenarios, the storage broker may create a new channel with a new ring buffer, as discussed above with respect to step 408.

Bei 410 und 412 kann der Speicherbroker eine Nachricht (z.B. PUBLISH_OK) an den Publisher senden, der Informationen bezüglich des Kanals und/oder des Ringpuffers beinhaltet, an den der Publisher veröffentlichen kann.At 410 and 412, the storage broker may send a message (e.g., PUBLISH_OK) to the publisher that includes information regarding the channel and/or ring buffer to which the publisher can publish.

Wenn bei 414 ein neuer Ringpuffer dem Publisher in einem bereits existierenden Kanal zugewiesen wird, kann der Speicherbroker eine Nachricht (z.B. SUBSCRIBE_TO) an alle Subscriber des Kanals oder des Themas „X“ senden, die Informationen umfassen, die sich auf den Kanal und/oder den neuen Ringpuffer beziehen.At 414, when a new ring buffer is allocated to the publisher in an already existing channel, the storage broker may send a message (e.g., SUBSCRIBE_TO) to all subscribers of the channel or topic "X" that includes information related to the channel and/or Obtain the new ring buffer.

Wenn ein neuer Kanal erzeugt wird, kann der Speicherbroker eine Nachricht (416) von einem Subscriber empfangen, der den Kanal und/oder das Thema „X“ abonnieren möchte (z.B. eine SUBSCRIBE-Nachricht). Optional kann der Speicherbroker eine Nachricht von einem Subscriber empfangen, um Abonnements an einen Publisher anzufordern, und alle Ringpuffer/Kanäle, die dem Publisher zugeordnet sind. Als Reaktion auf das Empfangen der Nachricht kann der Speicherbroker eine Nachricht übertragen (z.B., einen SUBSCRIBE_TO), wobei der Subscriber anfordert, den Kanal, das Thema „X“ und/oder den Publisher zu abonnieren, und Informationen, die sich auf den Kanal und jeden Ringpuffer auf dem neuen Kanal beziehen, enthalten. Der Speicherbroker kann das Abonnement wiederholen und zusätzliche Nachrichten an den Subscriber senden, wenn neue Ringpuffer auf dem Kanal erzeugt werden.When a new channel is created, the storage broker may receive a message (416) from a subscriber wishing to subscribe to the channel and/or topic "X" (e.g., a SUBSCRIBE message). Optionally, the storage broker can receive a message from a subscriber to request subscriptions to a publisher and any ring buffers/channels associated with the publisher. In response to receiving the message, the storage broker may transmit a message (e.g., a SUBSCRIBE_TO) requesting the subscriber to subscribe to the channel, topic "X", and/or publisher, and information relating to the channel and refer to each ring buffer on the new channel. The storage broker can repeat the subscription and send additional messages to the subscriber as new ring buffers are created on the channel.

Peers können eine Kanalbeziehung und/oder Beziehung mit einem Ringpuffer eines Kanals beenden, indem eine Nachricht gesendet wird, um die Beziehung zu dem Speicherbroker zu beenden, einschließlich der Kanal-ID und/oder der Ringpuffer-ID (z.B., STOP_PUBLISH oder STOP_SUBSCRIBE, je nachdem). Alternativ und/oder zusätzlich enden alle offenen Beziehungen innerhalb eines Speichersystems durch Senden einer Nachricht an den Speicherbroker (z.B. eine GOODBYE-Nachricht) gefolgt von einer Trennung. Z.B. kann eine CLOSE_RING-Nachricht an alle Publisher und Subscriber eines Ringpuffers gesendet werden, wenn der Ring durch den Broker in einer sauberen Weise heruntergefahren wird.Peers may terminate a channel relationship and/or relationship with a channel's ring buffer by sending a message to terminate the relationship to the storage broker, including the channel ID and/or the ring buffer ID (e.g., STOP_PUBLISH or STOP_SUBSCRIBE, respectively after). Alternatively and/or additionally, all open relationships within a storage system terminate by sending a message to the storage broker (e.g. a GOODBYE message) followed by a disconnect. For example, a CLOSE_RING message can be sent to all publishers and subscribers of a ring buffer when the ring is shut down by the broker in a clean manner.

In einigen Ausführungsformen kann der Publisher das Veröffentlichen auf einen Ringpuffer stoppen und eine Benachrichtigung an den Speicherbroker bezüglich der gleichen (z.B. einer GOODBYE oder einer STOP_PUBLISH-Nachricht) senden. Der Speicherbroker kann dann Subscriber des Ringpuffers benachrichtigen, dass der Publisher keine Daten mehr an den Ringpuffer veröffentlicht (z.B. eine STOP_SUBSCRIBE-Nachricht). Eine solche Benachrichtigung kann optional Informationen bezüglich der letzten Schreibposition beinhalten (z.B. den seqlock-Zähler), so dass der Subscriber weiterhin Nachrichten von dem Ringpuffer lesen kann, bis er die letzte veröffentlichte Nachricht gelesen hat. Alternativ kann ein Subscriber das Lesen von Nachrichten von einem Ringpuffer stoppen, sobald er sich bewusst wird, dass ein Publisher die Veröffentlichungsnachrichten gestoppt hat, selbst wenn es ungelesene Nachrichten in dem Ringpuffer gibt. Ein Subscriber kann auch autonom entscheiden, das Lesen von Nachrichten von einem Ringpuffer zu stoppen und eine geeignete Nachricht an den Speicherbroker zu senden.In some embodiments, the publisher may stop publishing to a ring buffer and send a notification to the storage broker regarding the same (e.g., a GOODBYE or a STOP_PUBLISH message). The storage broker can then notify subscribers of the ring buffer that the publisher is no longer publishing data to the ring buffer (e.g. a STOP_SUBSCRIBE message). Such a notification may optionally include information regarding the last write position (e.g. the seqlock counter) so that the subscriber can continue to read messages from the ring buffer until it has read the last published message. Alternatively, a subscriber can stop reading messages from a ring buffer as soon as it becomes aware that a publisher has stopped publishing messages, even if there are unread messages in the ring buffer. A subscriber can also autonomously decide to stop reading messages from a ring buffer and send an appropriate message to the storage broker.

Bei einer oder mehreren Ausführungsformen kann der Speicherbroker bei der Erzeugung eines Kanals eine Aufzeichnung des Kanals in einem Datenspeicher 175a-n erzeugen, und periodisch (und/oder wenn irgendwelche Änderungen an den Kanal vorgenommen werden) Informationen aktualisieren, die sich auf den Kanal beziehen, wie beispielsweise - ohne Einschränkung - Kanalname und/oder ID, einer Liste von Peers, von denen bekannt ist, dass sie abonniert werden sollen, einer Liste von Peers, von denen bekannt ist, dass sie an den Kanal publizieren, einer Liste von Ringpuffern, von denen bekannt ist, dass sie mit diesem Kanal assoziiert ist, oder dergleichen.In one or more embodiments, the storage broker may assist in generating a channel, create a record of the channel in a data store 175a-n, and periodically (and/or when any changes are made to the channel) update information relating to the channel such as, without limitation, channel name and/or ID, a list of peers known to be subscribed to, a list of peers known to publish to the channel, a list of ring buffers known to be associated with that channel , or similar.

In ähnlicher Weise kann der Speicherbroker bei der Erzeugung eines Ringpuffers einen Datensatz des Ringpuffers in einem Datenspeicher 175a-n erzeugen und periodisch (und/oder wenn ein Peer meldet, dass der Ringpuffer nicht ordnungsgemäß funktioniert) Informationen bezüglich des Ringpuffers aktualisieren, wie ohne Einschränkung, Ring-ID, Puffergröße, Pufferausrichtung, Ringgröße (d.h. die Anzahl von Puffer), assoziierter Kanal, wenn der zugehörige Kanal bekannt ist, eine Liste von Publishern, von denen bekannt ist, dass sie an den Ring publiziert werden, oder dergleichen.Similarly, when creating a ring buffer, the storage broker may create a record of the ring buffer in a data store 175a-n and periodically (and/or when a peer reports that the ring buffer is not functioning properly) update information related to the ring buffer, as without limitation, Ring ID, buffer size, buffer alignment, ring size (i.e. the number of buffers), associated channel if the associated channel is known, a list of publishers known to publish to the ring, or the like.

Der Speicherbroker kann auch periodisch einen Zustand bestehender Ringpuffer in dem System analysieren, um zu bestimmen, ob ein oder mehrere der Ringpuffer vorübergehend aus der Verwendung entfernt werden sollten (d.h. wenn der Broker bestimmt, ob es Fehler gibt und das System wie zuvor funktioniert), von der Probation revidiert und/oder permanent aus der Verwendung entfernt wird (d.h. verlassen wird).Optional kann der Speicherbroker einen Zustand eines Ringpuffers in dem System analysieren, um zu bestimmen, ob dieser Ringpuffer bei Auftreten eines Auslöse-Ereignisses auf Probation gesetzt, revidiert und/oder dauerhaft verlassen werden sollte. Beispiele für solche Auslöseereignisse können ohne Einschränkung einen unerwarteten Verbindungsverlust (z.B. der Netzwerkverbindung) zwischen einem Publisher und einem Speicherbroker, Empfangen einer Nachricht von einem Peer des Ringpuffers, der ein Problem in Bezug auf den Ringpuffer anzeigt (z.B. ein Publisher, der auf eine Schreibsperrfreigabe wartet, einen Subscriber, der auf neue Nachrichten wartet, oder irgendeine Peer-erkannte potentielle Korruption in dem Ringpuffer), Auftreten einer fehlerhaften Leseoperation und/oder einer fehlerhaften Schreiboperation an den Ringpuffer, Speicherbroker-Rekonstruktion (unten beschrieben), Metadaten oder Header des Ringpuffers enthalten einen Fehler oder sind ungültig (z.B. Anzahl von Puffern, seqlock-Wert, Größe usw.), oder dergleichen. Wenn ein unerwarteter Verlust der Verbindung zwischen einem Publisher und dem Speicherbroker (z.B. Verlust der Verbindung ohne eine GOODBYE-Nachricht von dem Publisher) vorliegt, kann der Speicher dann den Zustand aller Ringpuffer analysieren, die einem solchen Publisher zugeordnet sind.The storage broker may also periodically analyze a state of existing ring buffers in the system to determine whether one or more of the ring buffers should be temporarily removed from use (i.e., when the broker determines whether there are errors and the system is functioning as before), is revised from probation and/or permanently removed from use (i.e., abandoned). Optionally, the storage broker may analyze a state of a ring buffer in the system to determine whether that ring buffer is placed on probation, revised upon the occurrence of a trigger event and/or should be permanently abandoned. Examples of such trigger events may include, without limitation, an unexpected loss of connection (e.g., network connection) between a publisher and a storage broker, receiving a message from a peer of the ring buffer indicating a problem with the ring buffer (e.g., a publisher waiting for a write lock release , a subscriber waiting for new messages, or any peer-detected potential corruption in the ring buffer), occurrence of a bad read operation and/or a bad write operation to the ring buffer, memory broker reconstruction (described below), ring buffer metadata or headers an error or are invalid (e.g. number of buffers, seqlock value, size, etc.), or the like. If there is an unexpected loss of connection between a publisher and the storage broker (e.g., loss of connection without a GOODBYE message from the publisher), storage can then analyze the state of all ring buffers associated with such publisher.

Beim Auftreten eines Auslöseereignisses kann der Speicherbroker den Zustand von mehr als einem Ringpuffer (z.B. unerwarteter Verlust der Verbindung zwischen einem Publisher und dem Speicherbroker) oder einem bestimmten Ringpuffer (z.B. Nachricht von einem Peer um einen Ringpuffer) analysieren, um zu bestimmen, ob der Ringpuffer verfälscht ist. Ein Ringpuffer ist verfälscht, wenn Metadaten oder Header des Ringpuffers einen Fehler enthalten oder ungültig sind (z.B. Anzahl von Puffern, seqlock-Wert, Größe usw.) und/oder, wenn ein Publisher einen Fehlerzustand eines Ringpuffers markiert. Wenn festgestellt wird, dass ein Ringpuffer verfälscht ist, kann der Speicherbroker die Probation umgehen und den Ringpuffer verlassen, wie nachstehend beschrieben. Wenn der (die) Ringpuffer nicht beschädigt ist bzw. sind, kann der Speicherbroker den Ringpufferzustand erfassen und ihn bei der Probation platzieren. In einigen Ausführungsformen kann der Speicherbroker, wenn eine Verbindung mit dem Publisher wiederhergestellt wird, bevor irgendwelche Aufhebungsbedingungen auftreten (nachstehend beschrieben), den Ringpuffer aus der Probation entfernen und den Publisher anweisen, das Veröffentlichen auf dem Ringpuffer wieder aufzunehmen.When a trigger event occurs, the storage broker may analyze the state of more than one ring buffer (e.g. unexpected loss of connection between a publisher and the storage broker) or a specific ring buffer (e.g. message from a peer around a ring buffer) to determine whether the ring buffer is falsified. A ring buffer is corrupted when ring buffer metadata or headers contain an error or are invalid (e.g. number of buffers, seqlock value, size, etc.) and/or when a publisher flags a ring buffer error condition. If a ring buffer is determined to be corrupted, the storage broker may bypass the probation and exit the ring buffer, as described below. If the ring buffer(s) are not corrupted, the storage broker can capture the ring buffer state and place it on rehearsal. In some embodiments, if a connection to the publisher is reestablished before any decommitment conditions occur (described below), the storage broker may remove the ring buffer from probation and instruct the publisher to resume publishing to the ring buffer.

Ein Ringpuffer kann auf Probation („Bewährung“) gesetzt werden, wenn z.B. keine Live-und-Active-Publisher-Veröffentlichungsdaten zu dem Ringpuffer vorhanden sind. Dies kann geschehen, wenn z.B. ein Publisher die Veröffentlichung von Nachrichten an den Ringpuffer stoppt; ein Publisher hängt, crasht, neu startet oder anderweitig deaktiviert wird, oder dergleichen. Der Speicherbroker kann bestimmen, dass es keine Live-und-Active-Publisher-Veröffentlichungsdaten zu dem Ringpuffer gibt, indem mindestens eines der Folgenden analysiert wird: der Wert des seqlock-Zählers, der Wert des Pufferzählers oder der Schreibsperrzustand. Wenn z.B. der Wert des Pufferzählers sich nicht ändert (d.h. nicht inkrementiert) und/oder der seqlock-Zähler sich für eine bestimmte Zeitperiode nicht ändert (d.h., statischer Wert), kann der Speicherbroker bestimmen, dass ein Publisher keine Daten an den Ringpuffer veröffentlichte. Wenn die Schreibsperre für einen bestimmten Zeitraum nicht durch einen Publisher erfasst wird, kann der Speicherbroker auf ähnliche Weise bestimmen, dass ein Publisher keine Daten an den Ringpuffer veröffentlichte. Wenn die Schreibsperre, die durch einen Publisher vor einer Schreiboperation erfasst wird, nicht für eine bestimmte Zeitperiode freigegeben wird, kann der Speicherbroker bestimmen, dass der Publisher abgestürzt ist, sich aufgehangen hat, neu gestartet oder anderweitig deaktiviert wurde.A ring buffer can be placed on probation if, for example, there are no live and active publisher publication data for the ring buffer. This can happen if, for example, a publisher stops publishing messages to the ring buffer; a publisher hangs, crashes, restarts or is otherwise disabled, or the like. The storage broker may determine that there is no live and active publisher publishing data to the ring buffer by analyzing at least one of the following: the value of the seqlock counter, the value of the buffer counter, or the write lock state. For example, if the value of the buffer counter does not change (i.e., not incremented) and/or the seqlock counter does not change for a certain period of time (i.e., static value), the storage broker may determine that a publisher did not publish data to the ring buffer. Similarly, if the write lock is not acquired by a publisher for a certain period of time, the storage broker can determine that a publisher did not publish data to the ring buffer. If the write lock acquired by a publisher before a write operation is not released for a certain period of time, the storage broker may determine that the publisher has crashed, hung, rebooted, or is otherwise disabled.

Schließlich kann ein Ringpuffer während der Zustandsrekonstruktion eines Speicherbrokers nach dem Neustart des Speicherbrokers (nachstehend beschrieben) auf Probation gesetzt werden. Solche Ringpuffer verbleiben auf Probation, bis der Speicherbroker genügend Zustandsinformationen gesammelt hat, um zu bestimmen, dass es mindestens einen Live-Publisher gibt, der mit einem Ringpuffer assoziiert ist.Finally, a ring buffer may be placed on probation during state reconstruction of a storage broker after the storage broker is restarted (described below). Such ring buffers remain on probation until the storage broker has collected enough state information to determine that there is at least one live publisher associated with a ring buffer.

Nach dem Bestimmen, dass ein Ringpuffer auf Probation gesetzt werden sollte, kann der Speicherbroker 170 den Ringpuffer nicht aus der Verwendung entfernen und Lese-/Schreiboperationen können fortgesetzt werden, während der Broker den Ringpufferzustand analysiert. Sobald ein Ringpuffer auf Probation gesetzt ist, bleibt er in Probation, bis entweder bekannt ist, dass er einen Live-undaktiven Publisher aufweist und es keine Schreibsperren gibt, die durch jeden Publisher zu lang gehalten werden; oder bis er verlassen wird, basierend auf der Analyse des Zustands des Ringpuffers bei der Probation.After determining that a ring buffer should be placed on probation, the storage broker 170 cannot remove the ring buffer from use and read/write operations may continue while the broker analyzes the ring buffer state. Once a ring buffer is placed on probation, it remains in probation until either it is known to have a live and active publisher and there are no write locks held too long by each publisher; or until it is abandoned, based on the analysis of the state of the ring buffer during the trial.

Der Speicherbroker 170 kann auch einen Datensatz des Ringpuffers erzeugen, der in einem Datenspeicher 175a-n (d.h. zu einer Probationsliste hinzugefügt wird), wobei der Datensatz mindestens eine folgende Information enthält: Ringpuffer-ID, aktuelle Schreibposition oder HEAD in dem Ringpuffer, ob eine Schreibsperre auf dem Ringpuffer vorhanden ist (d.h. seqlock nicht freigegeben), Zeitstempel der jüngsten Schreiboperation, Zeitstempel, wenn der Ring auf Probation gesetzt wird, und Zeitstempel der jüngsten Aktualisierung des Datensatzes. In einigen Ausführungsformen kann der Speicherbroker 170 den Zustand jedes Ringpuffers auf der Probationsliste periodisch mit einer konfigurierbaren Frequenz (z.B. etwa 1 Hz, etwa 2 Hz, etwa 3 Hz oder dergleichen) analysieren. Alternativ und/oder zusätzlich kann der Speicherbroker 170 den Zustand eines oder mehrerer Ringpuffer auf der Probationsliste bei Auftreten eines Auslöseereignisses analysieren.The storage broker 170 may also generate a record of the ring buffer that is stored in a data store 175a-n (i.e. added to a trial list), the record containing at least one of the following information: ring buffer ID, current write position or HEAD in the ring buffer, whether a Write lock is present on the ring buffer (i.e. seqlock not released), timestamp of the most recent write operation, timestamp when the ring is put on probation, and timestamp of the most recent record update. In some embodiments, storage broker 170 may periodically analyze the state of each ring buffer on the probe list at a configurable frequency (e.g., about 1 Hz, about 2 Hz, about 3 Hz, or the like). Alternatively and/or additionally, the storage broker 170 may analyze the state of one or more ring buffers on the trial list upon the occurrence of a trigger event.

Der Speicherbroker 170 kann den Zustand eines Ringpuffers durch Prüfen auf Zustandsaktualisierungen in dem Ringpuffer selbst analysieren, z.B. durch Vergleichen des aktuellen Zustands mit den entsprechenden Werten/Informationen des Datensatzes, der in der Probationsliste enthalten ist. Der Speicherbroker 170 kann die Aufzeichnung des Ringpuffers in der Probationsliste aktualisieren, um die aktuelle Zustandsinformation oder den aktuellen Wert und die entsprechenden Zeitstempel einzuschließen. Beispielsweise können Zustandsinformationen, die dem Status der Schreibsperre entsprechen, erfasst/freigegeben werden, sich in der HEAD- oder aktuellen Schreibposition des Ringpuffers oder dergleichen ändern.The storage broker 170 may analyze the state of a ring buffer by checking for state updates in the ring buffer itself, e.g., by comparing the current state with the corresponding values/information of the data set contained in the trial list. The storage broker 170 may update the record of the ring buffer in the trial list to include the current state information or value and the corresponding timestamps. For example, state information corresponding to the write lock status may be captured/released, change in the HEAD or current write position of the ring buffer, or the like.

Der Speicherbroker 170 kann eine Pufferliste aus der Probation entfernen, wenn sich der Zustand eines Ringpuffers auf Proband-Änderungen hin ändert, um eines der Folgenden zu umfassen: mindestens einen bekannten Publisher, eine Änderung in der HEAD-Position und/oder eine Freigabe jeglicher Schreibsperren, die während der letzten Prüfung gesehen werden. Nach Entfernen eines Ringpuffers aus der Probation kann der Speicherbroker 170 eine Benachrichtigung (z.B. SUBSCRIBE_TO-Nachrichten) an Subscriber dieses Ringpuffers, Themas oder Kanals senden.The storage broker 170 may remove a buffer list from probation when the state of a ring buffer changes in response to probate changes to include one of the following: at least one known publisher, a change in HEAD position, and/or a release of any write locks , which are seen during the final test. After removing a ring buffer from probation, the storage broker 170 may send a notification (e.g., SUBSCRIBE_TO messages) to subscribers of that ring buffer, topic, or channel.

Wenn jedoch der Zustand eines Ringpuffers sich so ändert, dass er nicht aus der Probation entfernt werden kann, kann der Speicherbroker 170 die Zeitstempel (z.B. die Gesamtzeit der Probation, Gesamtzeit der aufrechterhaltenen Schreibsperre, die Zeit seit der Änderung der HEAD-Position und/oder die Zeit seit der letzten veröffentlichten Nachricht usw.) in der gehaltenen Aufzeichnung des Ringpuffers verwenden, um zu bestimmen, ob der Ringpuffer aufgegeben werden sollte. Z.B. kann der Speicherbroker 170 die Zeitstempel überprüfen, um die Gesamtzeit zu bestimmen, die der Ringpuffer auf Probation gewesen ist, und wenn er größer als eine Schwellenzeit ist (z.B. ungefähr 8-12 Sekunden, ungefähr 5-15 Sekunden, ungefähr 2-18 Sekunden, ungefähr 9 Sekunden, ungefähr 10 Sekunden, ungefähr 11 Sekunden oder dergleichen), kann der Speicherbroker 170 den Ringpuffer aufgeben. In ähnlicher Weise kann der Speicherbroker 170 die Zeitstempel überprüfen, um die Gesamtzeit zu bestimmen, die einer Schreibsperre des Ringpuffers zugeordnet ist, die gehalten oder erfasst wird, und wenn sie größer als eine Schwellenzeit ist (z.B. etwa 0,1-0,2 Sekunden, etwa 0,2-0,5 Sekunden oder dergleichen), kann der Speicherbroker 170 den Ringpuffer verlassen. Zusätzlich und/oder alternativ kann, wenn sich die HEAD- oder Schreibposition des Ringpuffers nicht für einen Schwellenzeitraum ändert, der dem Kanal des Ringpuffers zugeordnet ist (z.B. etwa 2-8 Sekunden, etwa 3-7 Sekunden, etwa 4-6 Sekunden, etwa 5 Sekunden, etwa 4 Sekunden, etwa 7 Sekunden oder dergleichen), der Speicherbroker 170 den Ringpuffer aufgeben. In noch einer anderen Ausführungsform kann, wenn der Zeitstempel, der mit der jüngsten Nachricht assoziiert ist, die dem Ringpuffer veröffentlicht wird, älter ist als eine Schwellenzeitspanne, die dem Kanal des Ringpuffers zugeordnet ist (z.B. etwa 2-8 Sekunden, etwa 3-7 Sekunden, etwa 4-6 Sekunden, etwa 5 Sekunden, etwa 4 Sekunden, etwa 7 Sekunden oder dergleichen), der Speicherbroker 170 den Ringpuffer aufgeben.However, if the state of a ring buffer changes such that it cannot be removed from probation, the memory broker 170 may use the timestamps (e.g., the total time in probation, total time of write lock held, the time since the HEAD position changed, and/or the time since the last published message, etc.) in the ring buffer's held record to determine whether the ring buffer should be abandoned. For example, the storage broker 170 may examine the timestamps to determine the total time that the ring buffer has been on probation and if it is greater than a threshold time (e.g., about 8-12 seconds, about 5-15 seconds, about 2-18 seconds , about 9 seconds, about 10 seconds, about 11 seconds, or the like), the memory broker 170 may abandon the ring buffer. Similarly, the storage broker 170 may examine the timestamps to determine the total time associated with a ring buffer write lock being held or captured, and if it is greater than a threshold time (e.g., about 0.1-0.2 seconds , about 0.2-0.5 seconds or so), the memory broker 170 may exit the ring buffer. Additionally and/or alternatively, if the HEAD or write position of the ring buffer does not change for a threshold period associated with the channel of the ring buffer (e.g., about 2-8 seconds, about 3-7 seconds, about 4-6 seconds, about 5 seconds, about 4 seconds, about 7 seconds or the like), the memory broker 170 gives up the ring buffer. In yet another embodiment, if the timestamp associated with the most recent message published to the ring buffer is older than a threshold time period associated with the channel of the ring buffer (e.g., about 2-8 seconds, about 3-7 seconds, about 4-6 seconds, about 5 seconds, about 4 seconds, about 7 seconds or the like), the memory broker 170 gives up the ring buffer.

Wenn der Speicherbroker 170 bestimmt, dass der Ringpuffer aufgegeben werden sollte, kann er eine Verlassen-Prozedur ausführen. Das Verlassen-Verfahren kann das Durchführen eines oder mehrerer der Folgenden beinhalten: Protokollieren eines Fehlers und Durchführen einer Diagnose auf dem Ringpuffer; Markieren des Ringpuffers als ungültig/aufgegeben in dem gemeinsam genutzten Speicher 110 (z.B.in einem Header-Raum des gemeinsam genutzten Speichers 110); Senden einer Benachrichtigung an die Peers des Ringpuffers (Subscriber, die den Ringpuffer abonnieren, und Publisher, die an den Ringpuffer publizieren), dass er aufgegeben wurde;If memory broker 170 determines that the ring buffer should be abandoned, it may execute an abandon procedure. The exit procedure may involve performing a or more of the following: logging an error and performing diagnostics on the ring buffer; marking the ring buffer as invalid/abandoned in shared memory 110 (eg, in a header space of shared memory 110); Sending a notification to the ring buffer's peers (subscribers subscribing to the ring buffer and publishers publishing to the ring buffer) that it has been abandoned;

Löschen des entsprechenden Speicherbereichs aus dem gemeinsam genutzten Speicher; Löschen von Aufzeichnung, die mit dem Ringpuffer in dem temporären Datenspeicher 172 assoziiert ist; und Verwerfen aller Metadaten und Informationen, die in Verbindung mit dem Ringpuffer gespeichert sind. Sobald ein Ringpuffer verlassen wird, kann das System oder der Speicherbroker 170 noch Nachrichten zu Protokollierungszwecken lesen (selbst wenn die Nachrichten verfälscht sind).deleting the corresponding memory area from the shared memory; deleting recording associated with the ring buffer in temporary data storage 172; and discarding all metadata and information stored in connection with the ring buffer. Once a ring buffer is exited, the system or storage broker 170 can still read messages for logging purposes (even if the messages are corrupted).

In einigen Ausführungsformen kann der Speicherbroker 170 Subscriber anweisen, dass sie weiterhin anhängige Nachrichten von dem Ringpuffer verbrauchen können, der verlassen wird, aber dann den Ring freigeben sollten, sobald sie alle anhängigen Nachrichten (z.B. eine CLOSE_RING-Nachricht) gelesen haben. Alternativ kann der Speicherbroker 170 Subscriber anweisen, den Ringpuffer sofort freizugeben, wobei anhängige Nachrichten unverbraucht bleiben (z.B. ABAN-DON_RING-Nachricht). Es sollte beachtet werden, dass Publisher niemals neue Nachrichten zu einem Ringpuffer veröffentlichen können, der aufgegeben wird.In some embodiments, storage broker 170 may instruct subscribers that they can continue to consume pending messages from the ring buffer being exited, but should then release the ring once they have read all pending messages (e.g., a CLOSE_RING message). Alternatively, the storage broker 170 may instruct subscribers to immediately release the ring buffer, leaving pending messages unconsumed (e.g. ABAN-DON_RING message). It should be noted that publishers can never publish new messages to a ring buffer that is abandoned.

Der Speicherbroker kann periodisch und/oder beim Auftreten eines auslösenden Ereignisses Informationen bezüglich der Peers analysieren und aktualisieren. Solche Informationen können z.B. eine Angabe beinhalten, ob ein Peer mit dem Speicherbroker 170 verbunden ist, Kanäle, die abonniert oder publiziert werden, Themen, Latenz oder dergleichen.The storage broker may analyze and update information regarding the peers periodically and/or upon the occurrence of a triggering event. Such information may include, for example, whether a peer is connected to the storage broker 170, channels subscribed to or published, topics, latency, or the like.

Wie oben erörtert, hat der Speicherbroker 170 Zugriff auf Metadaten und/oder Informationen über den Zustand aller gemeinsam genutzten Ringpuffer, Speicherbereiche und Kanäle, die dem gemeinsam genutzten Speicher 120 vom Systemstart bis zum Abschalten zugeordnet sind. Wenn daher ein Publisher oder Subscriber nicht verfügbar wird (z.B., absichtlich durch einen Ausfall, einen Absturz oder einen Verlust der Verbindung), kann der Speicherbroker 170 jegliche verlorene Information über die gemeinsam genutzten Ringpuffer, Speicherbereiche und/oder Kanäle, die dem gemeinsam genutzten Speicher 120 zugeordnet sind, zu dem Publisher oder dem Subscriber beim Neustart aus einem Fehler/Crash und/oder bei Neuverbindung mit dem Speicherbroker 170 bereitstellen (solange der Speicherbroker am Leben bleibt).As discussed above, memory broker 170 has access to metadata and/or information about the state of all shared ring buffers, memory areas, and channels associated with shared memory 120 from system startup until shutdown. Therefore, if a publisher or subscriber becomes unavailable (e.g., intentionally due to a failure, crash, or loss of connection), the storage broker 170 may recover any lost information about the shared ring buffers, memory areas, and/or channels associated with the shared memory 120, to the publisher or the subscriber upon reboot from an error/crash and/or upon reconnection to the storage broker 170 (as long as the storage broker remains alive).

Der Speicherbroker 170 kann auch so konfiguriert sein, dass er sich von Ausfällen oder Crashs des Speicherbrokers selbst unter Verwendung der nachstehend beschriebenen Zustandsrekonstruktionsverfahren erholt („recover“). Eine solche Zustandsrekonstruktion unterbricht keine bestehende und etablierte Publisher-/Subscriber-Beziehung, so dass Publisher weiterhin Nachrichten auf bestehenden Ringpuffern veröffentlichen und Subscriber weiterhin diese Nachrichten empfangen.The memory broker 170 may also be configured to recover from failures or crashes of the memory broker itself using the state reconstruction techniques described below. Such state reconstruction does not disrupt any existing and established publisher/subscriber relationship, so publishers continue to publish messages to existing ring buffers and subscribers continue to receive these messages.

5 ist ein Flussdiagramm, das ein beispielhaftes Verfahren zur Zustandsrekonstruktion eines Speicherbrokers bei Neustart nach einem Fehler oder einem Absturz veranschaulicht. Es sollte beachtet werden, dass während der Zustandsrekonstruktion irgendwelche existierenden und aktiven Publisher/Subscriber-Beziehungen, die vor dem Speicherbroker-Neustart hergestellt wurden, weiterhin normal arbeiten können. Der Speicherbroker kann diese Beziehungen nicht unterbrechen, es sei denn, er bestimmt, dass ein zugehöriges Problem oder Fehler vorliegt (nachstehend erörtert). 5 is a flowchart illustrating an example procedure for state reconstruction of a memory broker upon restart after a failure or crash. It should be noted that during state reconstruction, any existing and active publisher/subscriber relationships established before the storage broker restart may continue to operate normally. The storage broker cannot break these relationships unless it determines that there is an associated problem or error (discussed below).

Bei 502 kann ein Speicherbroker von einem Crash oder einem Ausfall neu starten. Z.B. kann der Speicherbroker einen neuen UNIX-Socket erzeugen. Der Speicherbroker kann bestimmen, ob der Neustart aus einem Absturz oder einem Fehler durch Prüfen auf übriggebliebene oder verlassene Speicherbereiche in dem gemeinsam genutzten temporären Speicher 172 (z.B. /dev/shm/) resultiert, da solche verlassenen Speicherbereiche nur bei Neustart aus einem Fehler existieren (und nicht nach einem sauberen Abschaltereignis). Bei Detektion solcher übriggebliebenen Speicherbereiche kann der Speicherbroker dann alle vorhandenen und aktiven Ringpuffer in dem gemeinsam genutzten Speicher auf Probation (504) setzen, bis der Ring entweder aufgegeben oder einem Live- und aktiven Publisher zugeordnet ist.At 502, a storage broker can restart from a crash or failure. For example, the storage broker can create a new UNIX socket. The memory broker can determine whether the reboot results from a crash or a failure by checking for leftover or abandoned memory areas in the shared temporary memory 172 (e.g., /dev/shm/), since such abandoned memory areas only exist during a failure reboot ( and not after a clean shutdown event). Upon detection of such remaining memory areas, the memory broker may then place all existing and active ring buffers in the shared memory on probation (504) until the ring is either abandoned or assigned to a live and active publisher.

Beim Neustart kann der Speicherbroker bei Empfang einer Verbindungsanforderung (z.B. in einem HELLO-Paket) eine Verbindung (506) mit einem Peer herstellen. Der Peer kann die Verbindung herstellen, indem er eine Verbindungsanforderung sendet, die Identifikationsinformationen und/oder Authentifizierungsinformationen an den Speicherbroker enthält. Wie oben erörtert, können die Identifikationsinformationen z.B. eine Peer-ID, eine Task-GUID, einen Aufgabeninstanznamen oder dergleichen umfassen. Der Speicherbroker kann die Identifikations- und/oder Authentifizierungsinformationen durch Konsultieren eines Datenspeichers verifizieren, der konfiguriert ist, um Peer-Informationen zu speichern und die Verbindung bei der Verifizierung herzustellen. Der Speicherbroker kann auch Metadaten aktualisieren, die dem Peer in dem Datenspeicher 175a-n zugeordnet sind. Wenn der Broker eine Verbindungsanforderung von einem Peer empfängt, kann er die Peer-ID auf Duplikate/Kollisionen überprüfen und kann die Verbindungsanforderung verweigern, wenn eine Verbindung bereits mit dem anfordernden Peer existiert.Upon reboot, the storage broker can establish a connection (506) with a peer upon receipt of a connection request (e.g. in a HELLO packet). The peer can establish the connection by sending a connection request containing identification information and/or authentication information to the storage broker. As discussed above, the identification information may include, for example, a peer ID, a task GUID, a task instance name, or the like. The storage broker may verify the identification and/or authentication information by consulting a data store configured to store peer information and the connection at the to establish verification. The storage broker may also update metadata associated with the peer in the data store 175a-n. When the broker receives a connection request from a peer, it can check the peer ID for duplicates/collisions and can deny the connection request if a connection already exists with the requesting peer.

Sobald eine Verbindung mit einem Peer hergestellt ist, kann der Speicherbroker eine Anforderung zum Veröffentlichen und/oder Abonnieren von dem Peer (508) empfangen. Der Speicherbroker kann bestimmen, ob der Peer bereits vor dem Speicherbroker-Neustart (510) an einen dem Speicherbroker zugeordneten Ringpuffer publiziert oder abonniert wurde. Wenn der Peer bereits vor dem Neustart des Speicherbrokers an einen dem Speicherbroker zugeordneten Ringpuffer publiziert oder abonniert wurde, hat der Peer Informationen oder Metadaten über den Ringpuffer (zuvor von dem Speicherbroker zu dem Peer bereitgestellt, wie oben erörtert). Beispiele für solche Informationen können - ohne Einschränkung - Ringpuffer-ID/Name, Speicherbereichsname, Kanal-ID/Name, Kanalparameter, Subscriber-IDs (für einen Publisher), Publisher-IDs (für einen Subscriber) oder dergleichen umfassen.Once connected to a peer, the storage broker may receive a publish and/or subscribe request from the peer (508). The storage broker may determine whether the peer was already published or subscribed to a ring buffer associated with the storage broker prior to the storage broker restart (510). If the peer has already been published or subscribed to a ring buffer associated with the storage broker before the storage broker restarts, the peer will have information or metadata about the ring buffer (previously provided by the storage broker to the peer, as discussed above). Examples of such information may include, without limitation, ring buffer ID/name, memory area name, channel ID/name, channel parameters, subscriber IDs (for a publisher), publisher IDs (for a subscriber), or the like.

Wenn daher die Anforderung zum Publizieren und/oder Abonnieren Informationen oder Metadaten über den oder die entsprechenden Ringpuffer enthält, kann der Speicherbroker bestimmen, dass der Peer bereits vor dem Speicherbroker-Neustart (510: JA) an einen dem Speicherbroker zugeordneten Ringpuffer veröffentlicht oder abonniert wurde. Wenn jedoch die Anforderung zum Veröffentlichen und/oder Abonnieren keine Information über einen Ringpuffer enthält, kann der Speicherbroker bestimmen, dass der Peer vor dem Speicherbroker-Neustart nicht an einen Ringpuffer, der dem Speicherbroker vor dem Zugriff zugeordnet war, publiziert oder abonniert wurde (510: NEIN) und kann einen neuen Ringpuffer für den Peer erzeugen (wie oben mit Bezug auf 4 erörtert).Therefore, if the request to publish and/or subscribe contains information or metadata about the corresponding ring buffer(s), the storage broker may determine that the peer has already been published or subscribed to a ring buffer associated with the storage broker prior to the storage broker restart (510: YES). . However, if the publish and/or subscribe request does not contain information about a ring buffer, the storage broker may determine that the peer was not published or subscribed to a ring buffer that was associated with the storage broker before the access before the storage broker restart (510 : NO) and can create a new ring buffer for the peer (as referenced above 4 discussed).

Wenn der Speicherbroker bestimmt, dass der Peer bereits vor dem Speicherbroker-Neustart (510: JA) an einen dem Speicherbroker zugeordneten Ringpuffer publiziert oder abonniert wurde, kann er die empfangenen Informationen über den Ringpuffer verwenden, um zu bestimmen, ob er einen entsprechenden Ringpuffer in dem Zwischenspeicher 172 (z.B. /dev/shm/) identifizieren kann, der bei solchen Ausfällen oder Crashs (512) bewahrt wird (d.h. einer der Ringpuffer war auf Probation gesetzt). Wenn der Speicherbroker keinen entsprechenden Ringpuffer in dem temporären Speicher 172 identifizieren kann (512: NEIN), kann er feststellen, dass die Ringpuffereinrichtung entweder nicht in dem gemeinsam genutzten Speicher vorhanden war oder vorhanden war, sondern als ungültig/verfälscht bestimmt wurde und verlassen wurde, so dass der entsprechende Eintrag gelöscht wurde, um einen temporären Speicher zu bilden (wie oben erörtert). Der Speicherbroker kann dann Anweisungen übertragen, um den Ringpuffer an den Peer (514) zu verlassen. Der Peer kann dann die Ringpufferinformationen aus seinem Speicher schließen und den zugehörigen Speicherbereich nicht abbilden.If the storage broker determines that the peer has already been published or subscribed to a ring buffer associated with the storage broker before the storage broker restart (510: YES), it may use the received information about the ring buffer to determine whether to place a corresponding ring buffer in the buffer 172 (e.g. /dev/shm/), which is preserved in the event of such failures or crashes (512) (i.e. one of the ring buffers was set to probation). If the memory broker cannot identify a corresponding ring buffer in the temporary memory 172 (512: NO), it may determine that the ring buffer device was either not present in the shared memory or was present but was determined to be invalid/corrupted and abandoned, so that the corresponding entry has been deleted to form temporary storage (as discussed above). The memory broker can then transmit instructions to exit the ring buffer to the peer (514). The peer can then close the ring buffer information from its memory and not map the associated memory area.

Wenn der Speicherbroker einen entsprechenden Ringpuffer in dem temporären Speicher 172 und/oder den Datenspeichern 175a-n identifizieren kann (512: JA), kann der Speicherbroker den Peer zu einem Kanal hinzufügen, der dem Ringpuffer (516) zugeordnet ist. Z.B. kann der Speicherbroker den Peer zu der Liste von Publishern/Subscribern für diesen Kanal hinzufügen. In bestimmten Ausführungsformen kann der Speicherbroker, wenn der Peer ein Subscriber ist, Subscribe-Benachrichtigungen/Informationen bezüglich aller bekannten Ringpuffer für den Kanal an den Peer senden (z.B. SUBSCRIBE_TO-Nachrichten). In einigen Ausführungsformen kann, wenn der Speicherbroker einen entsprechenden Ringpuffer identifizieren kann, aber kein zugehöriger Kanal vorhanden ist, der Speicherbroker einen Kanal unter Verwendung von durch den Peer bereitgestellten Informationen identifizieren und den Kanal mit dem Peer assoziieren.If the storage broker can identify a corresponding ring buffer in the temporary memory 172 and/or the data stores 175a-n (512: YES), the storage broker can add the peer to a channel associated with the ring buffer (516). For example, the storage broker can add the peer to the list of publishers/subscribers for this channel. In certain embodiments, if the peer is a subscriber, the storage broker may send subscribe notifications/information regarding all known ring buffers for the channel to the peer (e.g., SUBSCRIBE_TO messages). In some embodiments, if the storage broker can identify a corresponding ring buffer but no associated channel is present, the storage broker may identify a channel using information provided by the peer and associate the channel with the peer.

In bestimmten Ausführungsformen kann der Speicherbroker, wenn der identifizierte Ringpuffer auf Probation ist und der Peer ein Publisher ist, den Ringpuffer aus der Probation entfernen. Der Speicherbroker kann dann eine Benachrichtigung an alle bekannten Subscriber für diesen Kanal/Ringpuffer senden, um sie über den neuen Ringpuffer (z.B. SUBSCRIBE_TO-Nachrichten) zu informieren. Bestimmte Subscriber können diese Benachrichtigung ignorieren, wenn sie bereits etwa die Existenz des Ringpuffers kennen, wenn beispielsweise der Speicherbroker unter Zustandsrekonstruktion steht und nicht weiß, dass die Subscriber bereits Kenntnis des neuen Ringpuffers haben.In certain embodiments, if the identified ring buffer is on probation and the peer is a publisher, the storage broker may remove the ring buffer from probation. The storage broker can then send a notification to all known subscribers for that channel/ring buffer to inform them of the new ring buffer (e.g. SUBSCRIBE_TO messages). Certain subscribers may ignore this notification if they already know the existence of the ring buffer, for example if the storage broker is under state reconstruction and does not know that the subscribers already know about the new ring buffer.

In bestimmten Ausführungsformen kann der Speicherbroker, wenn der identifizierte Ringpuffer auf Probation ist und der Peer ein Subscriber ist, den Ringpuffer nicht aus der Probation entfernen. Der Speicherbroker kann Subscriber-Informationen für Ringpuffer bei der Probation speichern und kann auf Ringbefehle zurücksenden, wenn der Ringpuffer später als blockiert/verfälscht bestimmt wird.In certain embodiments, if the identified ring buffer is on probation and the peer is a subscriber, the storage broker may not remove the ring buffer from probation. The storage broker can store subscriber information for ring buffers upon probation and can respond to ring commands if the ring buffer is later determined to be blocked/corrupted.

Der Speicherbroker kann auch die Ringpufferinformationen/Metadaten in dem entsprechenden Datensatz aktualisieren (518), um Informationen über den Peer (z.B. Liste von Publishern/Subscribern), eine neue Verbindung, einen neuen Kanal und/oder beliebige andere Informationen, die in der vom Peer empfangenen Anforderung enthalten sind, einzuschließen.The storage broker may also update (518) the ring buffer information/metadata in the corresponding record to include information about the peer (e.g. list of publishers/subscribers), a new connection, a new channel and/or to include any other information contained in the request received from the peer.

Wenn der Speicherbroker bestimmt, dass der Peer nicht bereits vor dem Speicherbroker-Neustart (510: NEIN) veröffentlichen oder abonniert hat, kann der Speicherbroker eine Nachricht an den Peer (520) senden. Wenn der Peer ein Publisher ist, kann der Speicherbroker dem Peer einen neuen Ringpuffer zuweisen und die übertragene Nachricht kann Informationen in Bezug auf den zugewiesenen Ringpuffer (wie oben mit Bezug auf 4). Wenn der Peer ein Subscriber ist, kann die gesendete Nachricht Informationen in Bezug auf einen oder mehrere Ringpuffer/Kanäle enthalten, die der Subscriber abonnieren kann (wie oben mit Bezug auf 4).If the storage broker determines that the peer has not already published or subscribed before the storage broker restart (510: NO), the storage broker may send a message to the peer (520). If the peer is a publisher, the storage broker may allocate a new ring buffer to the peer and the transmitted message may contain information related to the allocated ring buffer (as referred to above 4 ). If the peer is a subscriber, the message sent may contain information relating to one or more ring buffers/channels to which the subscriber may subscribe (as referred to above 4 ).

Der obige Prozess ermöglicht es dem Speicherbroker, in einen Zustand zu rekonstruieren, der vor einem Zusammenstoß oder einem Fehler existierte, basierend auf Informationen von dem Betriebssystem (z.B. temporäre Speicherauflistung /dev/shm) und Informationen, die von dem Peer bereitgestellt werden, wenn sie sich wieder mit dem Speicherbroker verbinden. Während der Zustandsrekonstruktion können Ringpuffer in der Probation verbleiben, bis bekannt ist, dass sie mindestens einen Live-Publisher haben. Der Broker kann auch Diagnosetests durchführen, indem er beispielsweise analysiert, ob er Zugriff auf den gemeinsam genutzten Speicher hat oder nicht, ob die Headerinformation korrekt ist, usw.The above process allows the memory broker to reconstruct to a state that existed before a collision or error based on information from the operating system (e.g. temporary memory listing /dev/shm) and information provided by the peer when reconnect to the storage broker. During state reconstruction, ring buffers can remain in probation until they are known to have at least one live publisher. The broker can also perform diagnostic tests, for example by analyzing whether or not it has access to the shared memory, whether the header information is correct, etc.

NetzbrückeNetwork bridge

Die obige Beschreibung betrifft eine gemeinsam genutzte Speicherverwendung und Verwaltung in einem Publish/Subscribe-Messaging-System in Bezug auf ein einzelnes Netzwerk eines Kommunikationssystems. Insbesondere beschreibt die obige Beschreibung das Teilen von Nachrichten zwischen Publishern und Subscribern auf demselben Netzwerk. Oft werden solche Publish/Subscribe-Messaging-Systeme in verteilten Computersystemen verwendet, die eine große Anzahl von Netzwerken oder Knoten auf verschiedenen Netzwerken beinhalten. Solche verteilten Computersysteme sollten in der Lage sein, große Datenmengen und Kommunikationen zu handhaben, die benötigt werden, um unterschiedliche Systeme wirksam zu lassen und Informationen gemeinsam zu nutzen. Die folgende Offenbarung beschreibt Systeme und Verfahren zum Teilen von Daten zwischen Netzwerken eines verteilten Computersystems unter Verwendung eines Publish/Subscribe-Messaging-Systems und das Verhindern von Netzwerküberlastung, Redundanz und Latenz, die üblicherweise mit solchen verteilten Systemen assoziiert sind.The above description relates to shared storage usage and management in a publish/subscribe messaging system with respect to a single network of a communication system. In particular, the above description describes sharing messages between publishers and subscribers on the same network. Often such publish/subscribe messaging systems are used in distributed computer systems that include large numbers of networks or nodes on different networks. Such distributed computing systems should be able to handle large amounts of data and communications needed to keep different systems operating and sharing information. The following disclosure describes systems and methods for sharing data between networks of a distributed computing system using a publish/subscribe messaging system and preventing network congestion, redundancy and latency commonly associated with such distributed systems.

Unter Bezugnahme auf 6 ist eine beispielhafte Architektur des verteilten Computersystems 600 dargestellt. Wie in 6 gezeigt, kann das verteilte Computersystem 600 Netzwerkknoten 601a-n (oder Netzwerke) beinhalten. Jeder Netzwerkknoten 601 a-n kann einen gemeinsam genutzten Speicher 610a-n beinhalten, der Speicherbereiche 612a-n und Ringpuffer 620a-n umfasst. Jeder Netzwerkknoten 601 a-n kann auch einen Speicherbroker 670a-n, einen temporären Speicher 672a-n und Datenspeicher 675a-n umfassen. Für jeden Netzwerkknoten sind ein oder mehrere Threads oder Computerprozesse 651a-n, 652a-n,..., 653a-n, die jeweils einen oder mehrere Publisher 661a-n, 662a-n, ..., 663n-a enthalten, die kommunikativen Zugriff auf den gemeinsam genutzten Speicher dieses Netzwerkknotens haben. Zusätzlich können ein oder mehrere Threads oder Computerprozesse 671 a-n, 672a-n, ..., 673a-n, die jeweils einen oder mehrere Subscriber 681 a-n, 682a-n, ..., 683a-n umfassen, auch Zugriff auf den gemeinsam genutzten Speicher dieses Netzwerkknotens haben. Jede dieser Komponenten in einem Netzwerkknoten hat eine Funktionalität/Konfiguration, wie oben unter Bezugnahme auf die 1-5 beschrieben.With reference to 6 An exemplary architecture of the distributed computer system 600 is shown. As in 6 As shown, the distributed computer system 600 may include network nodes 601a-n (or networks). Each network node 601 may include shared memory 610a-n, which includes memory areas 612a-n and ring buffers 620a-n. Each network node 601 may also include a storage broker 670a-n, temporary storage 672a-n, and data storage 675a-n. For each network node there are one or more threads or computer processes 651a-n, 652a-n,..., 653a-n, each containing one or more publishers 661a-n, 662a-n,..., 663n-a, which have communicative access to the shared storage of this network node. In addition, one or more threads or computer processes 671 at, 672a-n, ..., 673a-n, each comprising one or more subscribers 681 at, 682a-n, ..., 683a-n, may also access the shared used memory of this network node. Each of these components in a network node has a functionality/configuration as referred to above 1-5 described.

Jeder Netzwerkknoten 601 a-n kann auch ein Brückenmodul 690a-n (d.h. eine Software, die auf jedem Knoten läuft) beinhalten, die konfiguriert ist, eine Überbrückung zwischen Netzwerkknoten des verteilten Computersystems 600 bereitzustellen, um das Teilen von Nachrichten zwischen solchen Netzwerkknoten zu erleichtern, wie nachstehend erörtert. Die Überbrückung oder Bridge verbindet zwei verschiedene Netzwerke oder Netzwerkknoten des verteilten Computersystems, die es ihnen erlauben, miteinander zu kommunizieren, als ob sie ein einzelnes Netzwerk wären. Diese können verschiedene Datentransportprotokolle verwenden, wie etwa, ohne Einschränkung, ein Internetprotokoll (IP), ein Transportsteuerungsprotokoll (TCP), ein Universal Datagram Protocol (UDP), ein Stream Control Transmission-Protokoll (SCTP), Remote Memory-Synchronisations-Protokolle wie Remote Direct Memory Access (RDMA)-Protokolle, ein Datagramm-Überlastungssteuerprotokoll (DCCP), einen Switch, einen Router oder dergleichen.Each network node 601a-n may also include a bridge module 690a-n (i.e., software running on each node) configured to provide bridging between network nodes of the distributed computing system 600 to facilitate the sharing of messages between such network nodes, such as discussed below. The bridging or bridge connects two different networks or network nodes of the distributed computer system, allowing them to communicate with each other as if they were a single network. These may use various data transport protocols such as, without limitation, an Internet Protocol (IP), a Transport Control Protocol (TCP), a Universal Datagram Protocol (UDP), a Stream Control Transmission Protocol (SCTP), remote memory synchronization protocols such as Remote Direct Memory Access (RDMA) protocols, a datagram congestion control protocol (DCCP), a switch, a router or the like.

In bestimmten Ausführungsformen kann ein Brückenmodul in dem Speicherbroker eines Netzwerkknotens enthalten sein. Alternativ und/oder zusätzlich kann ein Brückenmodul als separater Prozess auf einem Netzwerkknoten laufen. Ein Brückenmodul kann einen einzigen Prozess beinhalten, der konfiguriert ist, um alle Aufgaben oder mehrere Prozesse auszuführen, die zugewiesen sind, um eine oder mehrere der Aufgaben der Brückenanwendung durchzuführen.In certain embodiments, a bridge module may be included in the storage broker of a network node. Alternatively and/or additionally, a bridge module can run as a separate process on a network node. A bridge module may include a single process configured to perform all tasks or multiple processes assigned to perform one or more of the bridge application's tasks.

Unter Bezugnahme auf 7 ist ein Flussdiagramm gezeigt, das ein beispielhaftes Verfahren zum Teilen von Informationen zwischen Netzwerkknoten eines verteilten Systems veranschaulicht. Bei 702 kann ein Brückenmodul Informationen bezüglich des verteilten Systems empfangen. Insbesondere kann das Brückenmodul Informationen über vorhandene Kanäle und Ringpuffer im verteilten System sowie die Netzwerkorte von Publishern und Subscribern bestehender Kanäle empfangen. Ein Brückenmodul kann Informationen über Kanäle, Ringpuffer, Publisher und Subscriber empfangen, die auf demselben Netzwerkknoten wie das Brückenmodul existieren (d.h. lokale Daten) von beispielsweise einem Speicherbroker im Netzwerk des Brückenmoduls (wie oben erörtert, die Speicherbroker halten und aktualisieren Kanalinformationen in dem Datenspeicher 675a-n). Alternativ kann ein Brückenmodul verschiedene Benachrichtigungen von gemeinsamem Speicher, Publisher, Subscriber, Datenspeicher usw. abonnieren, um die lokalen Informationen direkt zu empfangen.With reference to 7 Shown is a flowchart illustrating an example method for sharing information between network nodes of a distributed system. At 702, a bridge module may receive information regarding the distributed system. In particular, the bridge module can receive information about existing channels and ring buffers in the distributed system as well as the network locations of publishers and subscribers of existing channels. A bridge module may receive information about channels, ring buffers, publishers, and subscribers that exist on the same network node as the bridge module (ie, local data) from, for example, a storage broker on the bridge module's network (as discussed above, the storage brokers maintain and update channel information in the data store 675a -n). Alternatively, a bridge module can subscribe to various notifications from shared storage, publisher, subscriber, data store, etc. to receive the local information directly.

Ein Brückenmodul kann Informationen über Kanäle, Ringpuffer, Publisher und Subscriber empfangen, die auf entfernten Netzwerken (d.h. „remote data“) von anderen Brückenmodulen (auf anderen Netzwerkknoten) in dem verteilten System existieren. Ein Brückenmodul kann mit anderen Brückenmodulen (z.B. zur gemeinsamen Nutzung von Informationen, über die Kanäle veröffentlicht und an ihren lokalen Knoten abonniert sind) in dem verteilten System durch beliebige geeignete Kommunikationsprotokolle, wie etwa, ohne Einschränkung, TCP/IP, UDP/IP, Ethernet, SCTP oder dergleichen. Das System kann verschiedene Synchronisationsverfahren zum Synchronisieren von Daten verwenden, die von einem Brückenmodul von anderen Brückenmodulen in dem verteilten System empfangen werden. Beispiele können, ohne Einschränkung, schließlich konsistente Überknoten-Replikationsmechanismen, verteilte Konsensalgorithmen (z.B. Paxos®, Raft® usw.), Nicht-Konsensus-basierte Master-Slave-Replikationsalgorithmen oder dergleichen umfassen. Z.B. kann in einer Ausführungsform jedes Brückenmodul konfiguriert sein, um den eigenen Master-Teil seiner eigenen Teilmenge der Daten (d.h. lokale Daten) zu sein, und jedes andere Brückenmodul kann ein Slave dieser Daten sein. Somit sind alle Brückenmodule sowohl Master als auch Slaves über unterschiedliche Teilmengen der synchronisierten Daten. In bestimmten Ausführungsformen sind die Informationen über die vorhandenen Kanäle, Puffer, Ringe, Publisher, Subscriber und Netzwerkorte von Publishern und Subscribern in dem verteilten System können statistisch konfiguriert sein (z.B. beim Start), und den Brückenmodulen bereitgestellt werden, wenn sich beispielsweise die Informationen während der Laufzeit nicht ändern.A bridge module can receive information about channels, ring buffers, publishers, and subscribers that exist on remote networks (i.e., “remote data”) from other bridge modules (on other network nodes) in the distributed system. A bridge module may interact with other bridge modules (e.g., to share information about which channels are published and subscribed to their local nodes) in the distributed system through any suitable communication protocols such as, without limitation, TCP/IP, UDP/IP, Ethernet , SCTP or the like. The system may use various synchronization methods to synchronize data received by a bridge module from other bridge modules in the distributed system. Examples may include, without limitation, eventually consistent cross-node replication mechanisms, distributed consensus algorithms (e.g., Paxos® , Raft® , etc.), non-consensus-based master-slave replication algorithms, or the like. For example, in one embodiment, each bridge module may be configured to be the master portion of its own subset of data (ie, local data), and each other bridge module may be a slave to that data. Thus, all bridge modules are both masters and slaves over different subsets of the synchronized data. In certain embodiments, the information about the existing channels, buffers, rings, publishers, subscribers, and network locations of publishers and subscribers in the distributed system may be statistically configured (e.g., at startup), and provided to the bridge modules, for example, when the information is during do not change during the term.

Bei 704 kann das Brückenmodul die empfangenen Informationen verwenden, um für jeden vorhandenen Kanal-/ Ringpuffer auf dem Netzwerk des Brückenmoduls („local channel / local buffer ring“) zu bestimmen, ob ein oder mehrere Subscriber auf einem anderen Netzwerkknoten existieren („Remote-Subscriber“). Wenn solche entfernten Subscriber existieren (704: JA), kann ein Brückenmodul den oder die Netzwerkknoten (706) identifizieren, auf denen die entfernten Subscriber existieren („remote node“). Für jeden solchen entfernten Knoten kann das Brückenmodul die Überbrückung 708 ausführen (um mit einem Brückenmodul eines solchen entfernten Knotens verbunden zu werden), um Daten von dem/den lokalen Ringpuffer (n) zu den entfernten Subscribern auf diesem entfernten Knoten zu übertragen. Wenn solche entfernten Subscriber nicht existieren (704: NEIN), kann ein Brückenmodul weiterhin das verteilte System überwachen, indem er Informationen darüber empfängt (702).At 704, the bridge module may use the received information to determine, for each existing channel/ring buffer on the bridge module's network (“local channel/local buffer ring”), whether one or more subscribers exist on another network node (“remote- Subscribers”). If such remote subscribers exist (704: YES), a bridge module can identify the network node or nodes (706) on which the remote subscribers exist (“remote node”). For each such remote node, the bridge module may perform bridging 708 (to connect to a bridge module of such remote node) to transfer data from the local ring buffer(s) to the remote subscribers on that remote node. If such remote subscribers do not exist (704: NO), a bridge module can continue to monitor the distributed system by receiving information about it (702).

Wie in 7 gezeigt, kann das Brückenmodul zum Ausführen einer Überbrückung (706) mit einem entfernten Knoten zuerst den/die Ringpuffer / Kanal / Kanäle identifizieren, die entfernte Subscriber auf dem entfernten Knoten (781) aufweisen. Das Brückenmodul kann dann Nachrichten abonnieren, die auf den identifizierten Ringpuffern (782) veröffentlicht wurden. Das Brückenmodul kann die von den identifizierten Ringpuffern gelesenen Nachrichten an den entfernten Knoten (783) übertragen und die Nachrichten an entsprechende Ringpuffer in einem gemeinsam genutzten Speicher des entfernten Knotens (784) zur Nutzung durch die entfernten Subscriber auf dem entfernten Knoten veröffentlichen. Auf diese Weise wirken Brückenmodule als „Subscriber“ auf dem lokalen Knoten, wo sich der Publisher befindet, und als „Publisher“ auf dem/den entfernten Knoten, wo sich die entfernten Subscriber befinden. Das Brückenmodul kann Ringpuffer auf dem lokalen Knoten abonnieren und auf Ringpuffern auf dem entfernten Knoten veröffentlichen, wobei die oben beschriebenen Verfahren und Systeme verwendet werden.As in 7 As shown, to perform bridging (706) with a remote node, the bridge module may first identify the ring buffer(s)/channel(s) that have remote subscribers on the remote node (781). The bridge module can then subscribe to messages published on the identified ring buffers (782). The bridge module may transmit the messages read from the identified ring buffers to the remote node (783) and publish the messages to corresponding ring buffers in a shared memory of the remote node (784) for use by the remote subscribers on the remote node. In this way, bridge modules act as “subscribers” on the local node where the publisher is located, and as “publishers” on the remote node(s) where the remote subscribers are located. The bridge module can subscribe to ring buffers on the local node and publish to ring buffers on the remote node using the methods and systems described above.

Es sollte beachtet werden, dass für jeden Ringpuffer auf dem lokalen Knoten, dass das Brückenmodul abonniert hat, ein entsprechender und identischer Ringpuffer in dem gemeinsam genutzten Speicher des entfernten Knotens erzeugt wird. Insbesondere wird unter Verwendung der Verfahren der vorliegenden Offenbarung eine Kopie des Ringpuffers in dem lokalen Knoten auf dem entfernten Knoten durch das Brückenmodul erzeugt. Publisher und Subscriber bleiben von jedem anderen Netzwerkknoten unaufmerksam. Ferner werden Daten, die an einen Ringpuffer auf einem lokalen Knoten veröffentlicht werden, nur einmal an den entfernten Knoten übertragen, um die Ringpufferkopie zu erzeugen, unabhängig von der Anzahl der entfernten Subscriber auf dem entfernten Knoten.It should be noted that for each ring buffer on the local node that the bridge module has subscribed to, a corresponding and identical ring buffer is created in the shared memory of the remote node. Specifically, using the methods of the present disclosure, a copy of the ring buffer in the local node is created on the remote node by the bridge module. Publishers and subscribers remain unattended by any other network node. Furthermore, data published to a ring buffer on a local node is transmitted to the remote node only once to create the ring buffer copy gen, regardless of the number of remote subscribers on the remote node.

Das Brückenmodul kann jedes der oben beschriebenen Netzwerkprotokolle (z.B. TCP, USP, SCTP usw.) zum Übertragen von Daten an das entfernte Netzwerk (über das Brückenmodul des entfernten Netzwerkknotens) verwenden.The bridge module can use any of the network protocols described above (e.g. TCP, USP, SCTP, etc.) to transmit data to the remote network (via the remote network node bridge module).

Alternativ und/oder zusätzlich können andere Netzwerkprotokolle verwendet werden, um die Überbrückung in einer „Zero-Copy“-Weise auszuführen, wobei ein Brückenmodul, das einen Kernel-Netzwerkstapel und/oder Netzwerkhardware (z.B. Brücke, Switch, Router usw.) beinhaltet, direkt Nachrichten von den Ringpuffern auf dem lokalen Knoten lesen und diese in Ringpuffern auf dem entfernten Knoten schreiben kann. In solchen Szenarien kann das System die Integrität der seqlock-basierten Synchronisations- und Benachrichtigungsmechanismen, die oben diskutiert wurden, bewahren, indem zusätzliche Prüfungen an seqlock-Zählern ausgeführt werden, die mit dem Ringpuffer auf dem lokalen Knoten und der entsprechenden Ringpufferkopie auf dem entfernten Knoten assoziiert sind. Am lokalen Knoten kann das Brückenmodul den seqlock-Zähler des Ringpuffers sowohl „vor“ als auch „nach“ einer Leseoperation lesen und die Werte an das Brückenmodul des entfernten Knotens übertragen. An dem entfernten Knoten kann das Brückenmodul eine Schreibsperre auf dem seqlock der Ringpufferkopie erhalten, den Wert „vor“ dem seqlock-Wert in den lokalen Speicher lesen, die Nachrichtendaten direkt in den gemeinsam genutzten Speicher lesen, den Ablesewert „nach“ dem seqlock-Wert lesen und die Nachrichtendaten mit den Werten vergleichen; wenn es eine Fehlanpassung gibt, war das Lesen inkonsistent und die Zielnachricht muss als ungültig markiert werden. Dieser Prozess kann unter Verwendung z.B. von vektorisierten Scatter/Gather-Befehlen, E/A-Befehlen oder dergleichen (ähnlich dem oben beschriebenen sperrfreien Mechanismus) implementiert sein.Alternatively and/or additionally, other network protocols may be used to perform the bridging in a "zero-copy" manner, wherein a bridge module that includes a kernel network stack and/or network hardware (e.g. bridge, switch, router, etc.), can directly read messages from the ring buffers on the local node and write them to ring buffers on the remote node. In such scenarios, the system can preserve the integrity of the seqlock-based synchronization and notification mechanisms discussed above by performing additional checks on seqlock counters associated with the ring buffer on the local node and the corresponding ring buffer copy on the remote node are associated. At the local node, the bridge module can read the ring buffer's seqlock counter both "before" and "after" a read operation and transmit the values to the remote node's bridge module. At the remote node, the bridge module can obtain a write lock on the seqlock of the ring buffer copy, read the value "before" the seqlock value into the local memory, read the message data directly into the shared memory, the read value "after" the seqlock value read and compare the message data with the values; if there is a mismatch, the read was inconsistent and the target message must be marked as invalid. This process may be implemented using, for example, vectorized scatter/gather instructions, I/O instructions, or the like (similar to the lock-free mechanism described above).

In einigen Ausführungsformen kann das Brückenmodul die Übertragung und Veröffentlichung von Nachrichten, die bestimmten Kanälen oder Ringpuffern zugeordnet sind, zu dem entfernten Knoten über andere Kanäle oder Ringpuffer priorisieren. Das Brückenmodul kann daher die mit den Kanälen verbundene Latenz konfigurieren und steuern. Das System kann die Latenz basierend auf beispielsweise der Wichtigkeit des Themas des Ringpuffers/Kanals, der Anzahl von Subscribern, der Anzahl von Publishern oder dergleichen bestimmen.In some embodiments, the bridge module may prioritize the transmission and publication of messages associated with particular channels or ring buffers to the remote node over other channels or ring buffers. The bridge module can therefore configure and control the latency associated with the channels. The system may determine latency based on, for example, the importance of the ring buffer/channel topic, the number of subscribers, the number of publishers, or the like.

8 veranschaulicht die Verwendung einer Netzwerkbrücke zur Verteilung von Nachrichten, die von Publishern an einem Knoten 801 an Subscriber an einem anderen Knoten 802. veröffentlicht werden. Z.B. kann der Knoten 801, wie in 8 gezeigt, einen Ringpuffer 811 beinhalten, der Daten in Bezug auf verarbeitete LiDAR-Daten speichert, einen Ringpuffer 812, der Daten in Bezug auf beobachtete Posen speichert, und einen Ringpuffer 813, der Daten in Bezug auf gefilterte Posen speichert. Ein LiDAR-Datenverarbeitungssystem (nicht gezeigt, aber auf Knoten 801) kann Daten zum Ringpuffer 811 senden. LiDAR-Daten-Subscriber, wie z.B. einen Scan-Matcher 815 (auf Knoten 801) und einen Tracker 821 (auf Knoten 802), können Daten in dem Ringpuffer 811 veröffentlichen. Der Scan-Matcher 815 kann Daten an den Ringpuffer 812 veröffentlichen, und ein Pose-Filter 816 kann die veröffentlichten Daten in dem Ringpuffer 812 abonnieren. Der Pose-Filter 816 kann Daten an den Ringpuffer 813 veröffentlichen, und mehrere Subscriber, wie z.B. der Scan-Matcher 815 (am Knoten 801), der Tracker 821 (am Knoten 802) oder andere Systeme 822 (am Knoten 802) können Daten auf dem Ringpuffer 813 abonnieren. 8th illustrates the use of a network bridge to distribute messages published from publishers on one node 801 to subscribers on another node 802. For example, node 801, as in 8th shown include a ring buffer 811 that stores data related to processed LiDAR data, a ring buffer 812 that stores data related to observed poses, and a ring buffer 813 that stores data related to filtered poses. A LiDAR data processing system (not shown, but on node 801) may send data to ring buffer 811. LiDAR data subscribers, such as a scan matcher 815 (on node 801) and a tracker 821 (on node 802), may publish data in the ring buffer 811. The scan matcher 815 may publish data to the ring buffer 812, and a pose filter 816 may subscribe to the published data in the ring buffer 812. The pose filter 816 may publish data to the ring buffer 813, and multiple subscribers, such as the scan matcher 815 (at node 801), the tracker 821 (at node 802), or other systems 822 (at node 802) may receive data Subscribe to the ring buffer 813.

Subscriber eines Kanal-/ Ringpuffers, die auf demselben Netzwerkknoten wie ein Publisher dieses Kanals existieren, können Nachrichten von einem Ringpuffer im gemeinsam genutzten Speicher dieses Netzwerkknotens lesen, wie oben beschrieben. Z.B. abonniert der Scan-Matcher 815 auf dem Knoten 801 die Ringpuffer 811 und 813, und der Posenfilter 816 abonniert den Ringpuffer 812, der Nachrichten von den jeweiligen Ringpuffer unter Verwendung der oben erörterten Verfahren liest. Wenn jedoch der Subscriber eines Kanals auf einem anderen Netzwerkknoten von dem des Publishers dieses Kanals existiert, kann das Brückenmodul auf dem Netzwerkknoten des Publishers eine Überbrückung erzeugen, um eine Kopie des Ringpuffers auf dem Netzwerkknoten 802 des Subscribers zu erzeugen (wie oben beschrieben), und alle Subscriber auf dem Netzwerkknoten 802 können Daten lesen, die an den Ringpuffer durch Zugreifen auf eine Ringpufferkopie veröffentlicht wurden. Diese Überbrückung ist für die Peers transparent. Z.B. kann das Brückenmodul (hier nicht gezeigt) auf dem Netzwerkknoten 801 eine Kopie 811 (a) des Ringpuffers 811 auf dem Netzwerkknoten 802 erzeugen, und der Tracker 821 auf dem Knoten 802, der den Ringpuffer 811 abonniert, kann Daten von der Ringpufferkopie 811 (a) lesen. In ähnlicher Weise kann das Brückenmodul auf dem Netzwerkknoten 801 eine Kopie 813 (a) des Ringpuffers 813 auf dem Netzwerkknoten 802 erzeugen, und der Tracker 821 und/oder andere Subscriber 822 auf dem Knoten 802, der den Ringpuffer 813 abonniert, kann Daten von der Ringpufferkopie 813 (a) lesen. Auf diese Weise kann das verteilte System, das mehrere Netzwerkknoten enthält, ein vereinheitlichtes Publish/Subscribe-Messaging-System präsentieren, in dem Subscriber, die an verschiedenen Knoten angebracht sind, Veröffentlichungsnachrichten empfangen können, die den Knoten, an den der Publisher angeschlossen wurde, nicht bewusst sind.Subscribers to a channel/ring buffer that exist on the same network node as a publisher of that channel can read messages from a ring buffer in that network node's shared memory, as described above. For example, scan matcher 815 on node 801 subscribes to ring buffers 811 and 813, and pose filter 816 subscribes to ring buffer 812, which reads messages from the respective ring buffers using the methods discussed above. However, if the subscriber of a channel exists on a different network node from that channel's publisher, the bridge module may create a bridge on the publisher's network node to create a copy of the ring buffer on the subscriber's network node 802 (as described above), and all subscribers on network node 802 can read data published to the ring buffer by accessing a ring buffer copy. This bridging is transparent to the peers. For example, the bridge module (not shown here) on the network node 801 may create a copy 811 (a) of the ring buffer 811 on the network node 802, and the tracker 821 on the node 802 that subscribes to the ring buffer 811 may receive data from the ring buffer copy 811 ( a) read. Similarly, the bridge module on the network node 801 may create a copy 813 (a) of the ring buffer 813 on the network node 802, and the tracker 821 and/or other subscribers 822 on the node 802 that subscribe to the ring buffer 813 may receive data from the Read ring buffer copy 813 (a). In this way, the distributed system containing multiple network nodes can present a unified publish/subscribe messaging system in which subscribers attached to different nodes can receive publish messages representing the node the publisher is connected to.

9 zeigt ein Beispiel einer internen Hardware, die in einer beliebigen der elektronischen Komponenten des Systems enthalten sein kann, wie etwa interne Verarbeitungssysteme, externe Überwachungs- und Meldesysteme oder entfernte Server. Ein elektrischer Bus 900 dient als Informationsautobahn, die die anderen dargestellten Komponenten der Hardware miteinander verbindet. Der Prozessor 905 ist eine zentrale Verarbeitungsvorrichtung des Systems, die konfiguriert ist, um Berechnungen und Logikoperationen durchzuführen, die erforderlich sind, um Programmieranweisungen auszuführen. Wie in diesem Dokument und in den Ansprüchen verwendet, können sich die Begriffe „Prozessor“ und „Verarbeitungsvorrichtung“ auf einen einzelnen Prozessor oder eine beliebige Anzahl von Prozessoren in einem Satz von Prozessoren beziehen, die gemeinsam einen Satz von Operationen durchführen, wie etwa eine zentrale Verarbeitungseinheit (CPU), eine Grafikverarbeitungseinheit (GPU), einen entfernten Server oder eine Kombination davon. Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM), Flash-Speicher, Festplattenlaufwerke und andere Vorrichtungen, die elektronische Daten speichern können, stellen Beispiele für Speichervorrichtungen 925 dar. 9 shows an example of internal hardware that may be included in any of the electronic components of the system, such as internal processing systems, external monitoring and reporting systems, or remote servers. An electrical bus 900 serves as an information highway connecting the other hardware components shown. Processor 905 is a central processing device of the system configured to perform calculations and logic operations required to execute programming instructions. As used herein and in the claims, the terms "processor" and "processing device" may refer to a single processor or any number of processors in a set of processors that collectively perform a set of operations, such as a central one processing unit (CPU), a graphics processing unit (GPU), a remote server, or a combination thereof. Read-only memory (ROM), random access memory (RAM), flash memory, hard drives, and other devices capable of storing electronic data represent examples of storage devices 925.

Eine Speichervorrichtung kann eine einzelne Vorrichtung oder eine Sammlung von Vorrichtungen beinhalten, über die Daten und/oder Anweisungen gespeichert sind. Verschiedene Ausführungsformen der Erfindung können ein computerlesbares Medium beinhalten, das Programmieranweisungen enthält, die konfiguriert sind, um einen oder mehrere Prozessoren zu veranlassen, die im Kontext der vorherigen Figuren beschriebenen Funktionen auszuführen.A storage device may include a single device or a collection of devices through which data and/or instructions are stored. Various embodiments of the invention may include a computer-readable medium containing programming instructions configured to cause one or more processors to perform the functions described in the context of the previous figures.

Eine optionale Anzeigeschnittstelle 930 kann es ermöglichen, dass Informationen von dem Bus 900 auf einer Anzeigevorrichtung 935 in einem visuellen, graphischen oder alphanumerischen Format angezeigt werden. Eine Audioschnittstelle und eine Audioausgabe (wie etwa ein Lautsprecher) können ebenfalls bereitgestellt werden. Die Kommunikation mit externen Vorrichtungen kann unter Verwendung verschiedener Kommunikationsvorrichtungen 940, wie etwa einer drahtlosen Antenne, eines RFID-Tags und/oder eines Nahbereichs- oder Nahfeldkommunikations-Sendeempfängers, erfolgen, von denen jede wahlweise kommunikativ mit anderen Komponenten der Vorrichtung über ein oder mehrere Kommunikationssysteme verbunden sein kann. Die Kommunikationsvorrichtung(en) 940 kann bzw. können konfiguriert sein, um kommunikativ mit einem Kommunikationsnetzwerk, wie etwa dem Internet, einem lokalen Netzwerk oder einem zellularen Telefondatennetzwerk, verbunden zu sein.An optional display interface 930 may allow information from the bus 900 to be displayed on a display device 935 in a visual, graphical, or alphanumeric format. An audio interface and an audio output (such as a speaker) may also be provided. Communication with external devices may occur using various communication devices 940, such as a wireless antenna, an RFID tag, and/or a short-range or near-field communication transceiver, each of which is selectively communicable with other components of the device via one or more communication systems can be connected. The communication device(s) 940 may be configured to be communicatively connected to a communication network, such as the Internet, a local area network, or a cellular telephone data network.

Die Hardware kann auch einen Benutzerschnittstellensensor 945 beinhalten, der den Empfang von Daten von Eingabevorrichtungen 950, wie etwa einer Tastatur, einer Maus, einem Joystick, einem Touchscreen, einem Touchpad, einer Fernbedienung, einer Zeigevorrichtung und/oder einem Mikrofon, ermöglicht. Digitale Frames können auch von einer Kamera 920 empfangen werden, die Video- und/oder Standbilder erfassen kann.The hardware may also include a user interface sensor 945 that enables receiving data from input devices 950 such as a keyboard, a mouse, a joystick, a touch screen, a touchpad, a remote control, a pointing device, and/or a microphone. Digital frames may also be received by a camera 920 that can capture video and/or still images.

Die oben offenbarten Merkmale und Funktionen sowie Alternativen können zu vielen anderen verschiedenen Systemen oder Anwendungen kombiniert werden. Verschiedene Komponenten können in Hardware oder Software oder eingebetteter Software implementiert sein. Verschiedene derzeit unvorhergesehene oder unerwartete Alternativen, Modifikationen, Variationen oder Verbesserungen können vom Fachmann vorgenommen werden, von denen jeder auch von den offenbarten Ausführungsformen umfasst sein soll.The features and functions and alternatives disclosed above may be combined into many other different systems or applications. Various components may be implemented in hardware or software or embedded software. Various currently unforeseen or unexpected alternatives, modifications, variations, or improvements may be made by those skilled in the art, each of which is also intended to be encompassed by the disclosed embodiments.

Die Terminologie, die für die oben bereitgestellte Offenbarung relevant ist, umfasst:Terminology relevant to the disclosure provided above includes:

Eine „automatisierte Vorrichtung“ oder „Robotervorrichtung“ bezieht sich auf eine elektronische Vorrichtung, die einen Prozessor, Programmierenweisungen und eine oder mehrere physische Hardwarekomponenten beinhaltet, die als Reaktion auf Befehle von dem Prozessor mit minimalem oder keinem menschlichen Eingriff bewegen können. Durch eine solche Bewegung kann eine Robotervorrichtung eine oder mehrere automatische Funktionen oder Funktionssätze durchführen. Beispiele für solche Operationen, Funktionen oder Aufgaben können ohne Einschränkung Betriebsräder oder Propeller beinhalten, um Antriebs-, Flug- oder andere Transportaktionen zu bewirken, Roboterlifte zum Laden, Entladen, medizintechnische Prozesse, konstruktionsbedingte Prozesse und/oder dergleichen zu betreiben. Beispielhafte automatisierte Vorrichtungen können ohne Einschränkung autonome Fahrzeuge, Drohnen und andere autonome Robotervorrichtungen beinhalten.An “automated device” or “robotic device” refers to an electronic device that includes a processor, programming instructions, and one or more physical hardware components that can move in response to commands from the processor with minimal or no human intervention. Such movement allows a robotic device to perform one or more automatic functions or sets of functions. Examples of such operations, functions or tasks may include, without limitation, operating wheels or propellers to effect propulsion, flight or other transportation actions, to operate robotic lifts for loading, unloading, medical processes, engineering processes and/or the like. Example automated devices may include, without limitation, autonomous vehicles, drones, and other autonomous robotic devices.

Der Begriff „Fahrzeug“ bezieht sich auf eine beliebige bewegliche Beförderungsform, die in der Lage ist, entweder einen oder mehrere menschliche Insassen und/oder Fracht zu tragen, und wird durch eine beliebige Form von Energie mit Energie versorgt. Der Begriff „Fahrzeug“ beinhaltet, ohne darauf beschränkt zu sein, Autos, Lastkraftwagen, Vans, Züge, autonome Fahrzeuge, Flugzeuge, Luftdrohnen und dergleichen. Ein "autonomes Fahrzeug ist ein Fahrzeug mit einem Prozessor, Programmieranweisungen und Antriebsstrangkomponenten, die durch den Prozessor steuerbar sind, ohne einen menschlichen Bediener zu erfordern. Ein autonomes Fahrzeug kann vollständig autonom sein, indem es keinen menschlichen Bediener für die meisten oder alle Fahrbedingungen und Funktionen benötigt, oder es kann halbautonom sein, indem ein menschlicher Bediener unter bestimmten Bedingungen oder für bestimmte Operationen erforderlich sein kann oder dass ein menschlicher Fahrzeugführer das autonome System des Fahrzeugs außer Kraft setzen kann und die Steuerung des Fahrzeugs übernehmen kann. Autonome Fahrzeuge beinhalten auch Fahrzeuge, in denen autonome Systeme den menschlichen Betrieb des Fahrzeugs unterstützen, wie etwa Fahrzeuge mit fahrerunterstützter Lenkung, Geschwindigkeitssteuerung, Bremsen, Parken und andere Systeme.The term “vehicle” refers to any movable form of transportation capable of carrying either one or more human occupants and/or cargo and is powered by any form of energy. The term “vehicle” includes, but is not limited to, cars, trucks, vans, trains, autonomous vehicles, airplanes, aerial drones and the like. An "autonomous vehicle is a vehicle with a processor, programming instructions and powertrain components that can be controlled by the processor without requiring a human operator. An autonomous vehicle may be fully autonomous, in that it does not require a human operator for most or all driving conditions and functions, or it may be semi-autonomous, in that a human operator may be required under certain conditions or for certain operations, or that a human vehicle operator may require the autonomous vehicle Can override the vehicle's system and take over control of the vehicle. Autonomous vehicles also include vehicles in which autonomous systems assist human operation of the vehicle, such as vehicles with driver-assisted steering, cruise control, braking, parking, and other systems.

Eine „elektronische Vorrichtung“ oder eine „Rechenvorrichtung“ bezieht sich auf eine Vorrichtung, die einen Prozessor und einen Speicher umfasst. Jede Vorrichtung kann ihren eigenen Prozessor und/oder Speicher aufweisen, oder der Prozessor und/oder der Speicher können mit anderen Vorrichtungen wie in einer virtuellen Maschine oder Containeranordnung gemeinsam genutzt werden. Der Speicher enthält oder empfängt Programmieranweisungen, die, wenn sie durch den Prozessor ausgeführt werden, die elektronische Vorrichtung veranlassen, eine oder mehrere Operationen gemäß den Programmieranweisungen durchzuführen.An “electronic device” or a “computing device” refers to a device that includes a processor and a memory. Each device may have its own processor and/or memory, or the processor and/or memory may be shared with other devices such as in a virtual machine or container array. The memory contains or receives programming instructions that, when executed by the processor, cause the electronic device to perform one or more operations in accordance with the programming instructions.

Die Begriffe „Speicher“, „Speichervorrichtung“, „Datenspeicher“, „Datenspeicher“ und dergleichen beziehen sich jeweils auf eine nichtflüchtige Vorrichtung, auf der computerlesbare Daten, Programmieranweisungen oder beide gespeichert sind. Mit Ausnahme, wo ausdrücklich anders angegeben, sollen die Begriffe „Speicher“, „Speichervorrichtung“, „Datenspeicher“, „Datenspeichereinrichtung“ und dergleichen einzelne Vorrichtungsausführungsformen umfassen, Ausführungsformen, bei denen mehrere Speichervorrichtungen zusammen oder gemeinsam einen Satz von Daten oder Anweisungen speichern, sowie einzelne Sektoren innerhalb solcher Vorrichtungen.The terms "memory", "storage device", "data storage", "data storage" and the like each refer to a non-transitory device on which computer-readable data, programming instructions, or both are stored. Except where expressly stated otherwise, the terms "memory", "storage device", "data storage", "data storage device" and the like are intended to include individual device embodiments, embodiments in which multiple storage devices store a set of data or instructions together or in common, as well as individual sectors within such devices.

Die Begriffe „Prozessor“ und „Verarbeitungsvorrichtung“ beziehen sich auf eine Hardwarekomponente einer elektronischen Vorrichtung, die konfiguriert ist, um Programmieranweisungen auszuführen. Mit Ausnahme dort, wo spezifisch anders angegeben, soll der Singular-Ausdruck „Prozessor“ oder „Verarbeitungsvorrichtung“ sowohl Einzelverarbeitungsvorrichtungsausführungsformen als auch Ausführungsformen umfassen, in denen mehrere Verarbeitungsvorrichtungen zusammen oder gemeinsam einen Prozess durchführen.The terms “processor” and “processing device” refer to a hardware component of an electronic device that is configured to execute programming instructions. Except where specifically stated otherwise, the singular term “processor” or “processing device” is intended to include both single processing device embodiments and embodiments in which multiple processing devices perform a process together or in concert.

In diesem Dokument bedeuten die Begriffe „Kommunikationsverbindung“ und „Kommunikationsweg“ einen drahtgebundenen oder drahtlosen Weg, über den eine erste Vorrichtung Kommunikationssignale an eine oder mehrere andere Vorrichtungen sendet und/oder Kommunikationssignale empfängt. Vorrichtungen sind über eine Kommunikationsverbindung miteinander verbunden oder kommunikativ gekoppelt, wenn die Vorrichtungen Daten über eine Kommunikationsverbindung senden und/oder empfangen können. Die elektronische Kommunikation bezieht sich auf die Übertragung von Daten über ein oder mehrere Signale zwischen zwei oder mehr elektronischen Vorrichtungen, sei es über ein drahtgebundenes oder drahtloses Netzwerk, und ob direkt oder indirekt über eine oder mehrere Zwischenvorrichtungen.As used in this document, the terms “communication link” and “communication path” mean a wired or wireless path over which a first device sends communication signals to one or more other devices and/or receives communication signals. Devices are connected or communicatively coupled to one another via a communication link if the devices can send and/or receive data over a communication link. Electronic communication refers to the transmission of data via one or more signals between two or more electronic devices, whether over a wired or wireless network, and whether directly or indirectly through one or more intermediate devices.

Obwohl Abschnitte der Erörterung hierin zu beispielhaften Zwecken auf drahtgebundene Verbindungen und/oder drahtgebundene Kommunikationen beziehen, sind Ausführungsformen der Erfindung in dieser Hinsicht nicht beschränkt und können eine oder mehrere drahtgebundene oder drahtlose Verbindungen beinhalten, können eine oder mehrere Komponenten der drahtlosen Kommunikation verwenden, können ein oder mehrere Verfahren oder Protokolle drahtloser Kommunikation oder dergleichen verwenden. Einige Ausführungsformen der Erfindung können drahtgebundene Kommunikation und/oder drahtlose Kommunikation verwenden.Although portions of the discussion herein refer to wired connections and/or wired communications for exemplary purposes, embodiments of the invention are not limited in this regard and may include one or more wired or wireless connections, may use one or more wireless communication components, may include a or use multiple methods or protocols of wireless communication or the like. Some embodiments of the invention may use wired communications and/or wireless communications.

Der Begriff „Subscriber“, wie er hier verwendet wird, umfasst z. B. einen entfernten Subscriber; einen lokalen Subscriber, einen entfernten Client, einen lokalen Client, einen Subscriber, der unter Verwendung einer virtuellen Maschine (VM) implementiert ist, einen Subscriber, der unter Verwendung von Hardwarekomponenten und/oder Softwarekomponenten implementiert ist, einen Subscriber, der unter Verwendung einer Client-Vorrichtung oder eines Client-Computers od. dgl. implementiert istThe term “subscriber” as used herein includes, for example: B. a remote subscriber; a local subscriber, a remote client, a local client, a subscriber implemented using a virtual machine (VM), a subscriber implemented using hardware components and/or software components, a subscriber implemented using a client -Device or a client computer or the like is implemented

Der Begriff „Publisher“, wie er hier verwendet wird, umfasst z.B. einen entfernten Publisher, einen lokalen Publisher, einen entfernten Server, einen lokalen Server, einen Publisher, der unter Verwendung einer virtuellen Maschine (VM) implementiert wird, einen Publisher, der unter Verwendung von Hardwarekomponenten und/oder Softwarekomponenten implementiert ist, einen Publisher, der unter Verwendung einer Publisher-Vorrichtung oder eines Publisher-Computers oder dergleichen implementiert ist.The term "publisher" as used herein includes, for example, a remote publisher, a local publisher, a remote server, a local server, a publisher implemented using a virtual machine (VM), a publisher implemented under using hardware components and/or software components, a publisher implemented using a publisher device or a publisher computer or the like.

In diesem Dokument sollen, wenn relative Begriffe einer Reihenfolge, wie z.B. „erster“, „zweiter“ verwendet werden, um ein Nomen zu modifizieren, eine solche Verwendung lediglich dazu gedacht sein, ein Element von einem anderen zu unterscheiden, und dies soll keine sequentielle Reihenfolge implizieren, sofern nicht ausdrücklich angegeben.In this document, when relative terms of an order, such as "first", "second", are used to modify a noun, such use is intended only to do so be to distinguish one element from another, and this is not intended to imply sequential order unless explicitly stated.

Ein „automatisiertes Vorrichtungsüberwachungssystem“ ist ein Satz von Hardware, der kommunikativ und/oder elektrisch mit verschiedenen Komponenten (wie etwa Sensoren) eines Fahrzeugs zum Sammeln von Status- oder Betriebsparameterwerten von diesen Komponenten verbunden ist. Ein automatisiertes Vorrichtungsüberwachungssystem kann eine Datenprotokollierungsvorrichtung beinhalten oder damit verbunden sein, die eine Dateneingabe (wie etwa einen drahtlosen Empfänger) beinhaltet, die konfiguriert ist, Vorrichtungsbetriebsdaten direkt oder indirekt von den Komponenten der Vorrichtung zu empfangen. Das Überwachungssystem kann auch einen Prozessor, einen Sender und einen Speicher mit Programmieranweisungen beinhalten. Ein Überwachungssystem kann einen Sender zum Senden von Befehlen und/oder Daten an externe elektronische Vorrichtungen und/oder entfernte Server beinhalten. In verschiedenen Ausführungsformen kann ein Überwachungssystem mit den anderen Computersystemkomponenten des automatisierten Geräts eingebettet oder integral ausgebildet sein, oder es kann sich um eine separate Vorrichtung handeln, die mit einem oder mehreren anderen lokalen Systemen in Kommunikation steht, wie beispielsweise im Kontext eines autonomen Fahrzeugs, eines On-Board-Diagnosesystems.An “automated device monitoring system” is a set of hardware that is communicatively and/or electrically connected to various components (such as sensors) of a vehicle for collecting status or operating parameter values from those components. An automated device monitoring system may include or be connected to a data logging device that includes a data input (such as a wireless receiver) configured to receive device operating data directly or indirectly from the components of the device. The monitoring system may also include a processor, a transmitter, and a memory with programming instructions. A monitoring system may include a transmitter for sending commands and/or data to external electronic devices and/or remote servers. In various embodiments, a monitoring system may be embedded or integral with the other computer system components of the automated device, or may be a separate device in communication with one or more other local systems, such as in the context of an autonomous vehicle On-board diagnostic system.

ZITATE ENTHALTEN IN DER BESCHREIBUNGQUOTES INCLUDED IN THE DESCRIPTION

Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of documents listed by the applicant was generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.

Zitierte PatentliteraturCited patent literature

  • US 17/097590 [0001]US 17/097590 [0001]
  • US 17/097671 [0001]US 17/097671 [0001]
  • US 17/097699 [0001]US 17/097699 [0001]

Claims (91)

System zum Bereitstellen eines sperrfreien Zugriffs auf einen Ringpuffer, wobei das System umfasst: einen gemeinsam genutzten Speicher, der den Ringpuffer umfasst, wobei der Ringpuffer umfasst: - eine Vielzahl von sequentiell angeordneten Puffern fester Größe, die konfiguriert sind, um Nachrichten zu speichern, und - einen globalen Header, der einen Zähler und eine Sperre umfasst; einen Publisher, der konfiguriert ist, um eine Vielzahl von Nachrichten zu der Vielzahl von Puffern fester Größe in dem Ringpuffer zu schreiben; und einen Subscriber, der konfiguriert ist, um eine oder mehrere der Vielzahl von Nachrichten, die durch den Publisher geschrieben werden, zu lesen, wobei der Zähler Informationen bezüglich eines Puffers fester Größe in dem Ringpuffer bereitstellt, an den der Publisher als nächstes eine Nachricht schreiben wird.A system for providing lock-free access to a ring buffer, the system comprising: a shared memory comprising the ring buffer, the ring buffer comprising: - a plurality of sequentially arranged fixed-size buffers configured to store messages, and - a global header comprising a counter and a lock; a publisher configured to write a plurality of messages to the plurality of fixed-size buffers in the ring buffer; and a subscriber configured to read one or more of the plurality of messages written by the publisher, wherein the counter provides information regarding a fixed size buffer in the ring buffer to which the publisher will next write a message. System nach Anspruch 1, wobei ein negativer Wert des Zählers einen Zustand des Systems anzeigt, in dem der Ringpuffer keine Nachrichten enthält.System after Claim 1 , where a negative value of the counter indicates a state of the system in which the ring buffer contains no messages. System nach Anspruch 2, wobei der Publisher ferner konfiguriert ist zum Zuweisen eines Wertes von 0 zu dem Zähler nach Abschluss eines ersten Schreibens in den Ringpuffer.System after Claim 2 , wherein the publisher is further configured to assign a value of 0 to the counter upon completion of a first write to the ring buffer. System nach Anspruch 3, wobei der Publisher ferner konfiguriert ist, um den Wert des Zählers nach jeder nachfolgenden Operation so zu erhöhen, dass ein Index des Puffers mit fester Größe in dem Ringpuffer, an den der Publisher zuletzt eine Nachricht übermittelt hat, bestimmt wird, indem ein Wert des Zählers durch 2 dividiert wird.System after Claim 3 , wherein the publisher is further configured to increment the value of the counter after each subsequent operation such that an index of the fixed-size buffer in the ring buffer to which the publisher last delivered a message is determined by a value of the The numerator is divided by 2. System nach Anspruch 1, wobei: die Sperre durch den Publisher erfasst wird, bevor ein Schreiben in einen der mehreren Puffer mit fester Größe ausgeführt wird; und die Sperre durch den Publisher nach Ausführung des Schreibens freigegeben wird.System after Claim 1 , where: the lock is acquired by the publisher before a write is performed to one of the plurality of fixed-size buffers; and the lock is released by the publisher after the write is executed. System nach Anspruch 5, ferner umfassend: eine Vielzahl von Publishern, wobei jeder der Vielzahl von Publishern konfiguriert ist, um eine oder mehrere Nachrichten zu der Vielzahl von Puffern fester Größe in dem Ringpuffer zu schreiben; und wobei die Sperre durch eine einzelne der Vielzahl von Publishern zu jeder gegebenen Zeit erfasst werden kann.System after Claim 5 , further comprising: a plurality of publishers, each of the plurality of publishers configured to write one or more messages to the plurality of fixed-size buffers in the ring buffer; and wherein the suspension may be acquired by any one of the plurality of publishers at any given time. System nach Anspruch 1, wobei jede der Vielzahl von Nachrichten eine endliche Größe aufweist.System after Claim 1 , where each of the plurality of messages has a finite size. System nach Anspruch 1, wobei die mehreren Puffer mit fester Größe keine Cache-Zeilen miteinander in dem gemeinsam genutzten Speicher teilen.System after Claim 1 , where the multiple fixed size buffers do not share cache lines with each other in the shared memory. System nach Anspruch 1, wobei jeder der Vielzahl von Puffern einen Pufferheader umfasst, der konfiguriert ist, um mindestens eines der Folgenden zu speichern: eine Pufferindexnummer, Synchronisationsinformationen oder Pufferzustandsinformationen.System after Claim 1 , wherein each of the plurality of buffers includes a buffer header configured to store at least one of: a buffer index number, synchronization information, or buffer state information. System nach Anspruch 9, wobei der Pufferheader eine eindeutige Cache-Zeile in dem gemeinsam genutzten Speicher einnimmt.System after Claim 9 , where the buffer header occupies a unique cache line in shared memory. System nach Anspruch 10, wobei jeder der Vielzahl von Puffern ferner einen Datenbereich umfasst, der in einer Cache-Zeile des gemeinsam genutzten Speichers unmittelbar nach der eindeutigen Cache-Zeile eines entsprechenden Pufferheaders beginnt.System after Claim 10 , wherein each of the plurality of buffers further includes a data area beginning in a cache line of the shared memory immediately after the unique cache line of a corresponding buffer header. System nach Anspruch 1, wobei der gemeinsam genutzte Speicher ferner einen Synchronisationsdatenspeicherbereich umfasst, der jedem der Vielzahl von Puffern mit fester Größe entspricht, wobei der Synchronisationsdatenspeicherbereich, der einem Puffer mit fester Größe entspricht, einen Pufferzähler umfasst, der die Genauigkeit einer Nachricht angibt, die von dem Puffer mit fester Größe durch den Subscriber gelesen wird.System after Claim 1 , wherein the shared memory further comprises a synchronization data storage area corresponding to each of the plurality of fixed size buffers, the synchronization data storage area corresponding to a fixed size buffer comprising a buffer counter indicating the accuracy of a message sent from the buffer fixed size is read by the subscriber. System nach Anspruch 12, wobei eine Speicheradresse des Synchronisationsdatenspeicherbereichs in einem Pufferheader dieses Puffers mit fester Größe enthalten ist.System after Claim 12 , wherein a memory address of the synchronization data storage area is contained in a buffer header of this fixed-size buffer. System nach Anspruch 12, wobei: ein Anfangswert des Pufferzählers auf 0 gesetzt wird; und der Publisher konfiguriert ist, um für die Ausführung eines Schreibens in diesen Puffer mit fester Größe einen Wert des Pufferzählers vor der Ausführung des Schreibens und nach der Ausführung des Schreibens zu inkrementieren.System after Claim 12 , where: an initial value of the buffer counter is set to 0; and the publisher is configured to increment a value of the buffer counter before executing the write and after executing the write to perform a write to said fixed-size buffer. System nach Anspruch 14, wobei der Subscriber konfiguriert ist zum: Vergleichen eines ersten Werts des Pufferzählers vor der Ausführung eines Lesens aus diesem festen Größenpuffer mit einem zweiten Wert des Pufferzählers nach Ausführung des Lesens aus dem Puffer mit fester Größe; und Verwerfen einer Nachricht, die von dem Puffer mit fester Größe gelesen wird, wenn der erste Wert nicht mit dem zweiten Wert übereinstimmt.System after Claim 14 , wherein the subscriber is configured to: compare a first value of the buffer counter before performing a read from that fixed size buffer with a second value of the buffer counter after performing the read from the fixed size buffer; and discarding a message read from the fixed-size buffer if the first value does not match the second value. System nach Anspruch 12, wobei ein Wert des Pufferzählers während der Ausführung eines Schreibens in den Puffer mit fester Größe durch den Publisher ungerade ist.System after Claim 12 , where a value of the buffer counter during the execution of a The number of times the publisher writes to the fixed-size buffer is odd. System nach Anspruch 16, wobei der Subscriber konfiguriert ist, um auf eine Benachrichtigung über den Abschluss des Schreibens zu warten, wenn der Wert des Pufferzählers ungerade ist, bevor ein Lesen auf dem Puffer mit fester Größe ausgeführt wird.System after Claim 16 , where the Subscriber is configured to wait for a write completion notification if the value of the buffer counter is odd before performing a read on the fixed-size buffer. System nach Anspruch 12, wobei der Datensynchronisationsbereich ferner einen Futex-Systemaufruf umfasst, der konfiguriert ist, um eine neue Nachrichtenbenachrichtigung an den Subscriber zu senden, wenn ein Wert des Pufferzählers um 2 inkrementiert und gerade ist.System after Claim 12 , wherein the data synchronization section further comprises a futex system call configured to send a new message notification to the subscriber when a value of the buffer counter is incremented by 2 and is even. System nach Anspruch 12, wobei der Datensynchronisationsbereich ferner einen Futex-Systemaufruf umfasst, der konfiguriert ist, um eine Wartebenachrichtigung an den Subscriber zu senden, wenn ein Wert des Pufferzählers entweder ungerade ist oder nicht inkrementiert wurde.System after Claim 12 , wherein the data synchronization section further comprises a futex system call configured to send a wait notification to the subscriber when a value of the buffer counter is either odd or has not been incremented. System nach Anspruch 12, wobei der Datensynchronisationsbereich ferner einen Futex-Systemaufruf umfasst, der konfiguriert ist, um eine Wartebenachrichtigung an eine Vielzahl von Publishern in dem System zu senden, wenn ein Wert des Pufferzählers ungerade ist.System after Claim 12 , wherein the data synchronization section further comprises a futex system call configured to send a wait notification to a plurality of publishers in the system when a value of the buffer counter is odd. System nach Anspruch 1, wobei eine Größe der Vielzahl von Zonen fester Größe basierend auf mindestens einem der Folgenden bestimmt wird: maximale Nachrichtengröße, maximale Anzahl von Zonen fester Größe oder Ausrichtung.System after Claim 1 , wherein a size of the plurality of fixed-size zones is determined based on at least one of: maximum message size, maximum number of fixed-size zones, or orientation. Verfahren zum Ermöglichen einer Nachrichtenübertragung zwischen einem Publisher und einem Subscriber, wobei das Verfahren durch einen Prozessor Folgendes umfasst: Erzeugen, in einem gemeinsam genutzten Speicher: - einer Datenstruktur, die einen Ringpuffer umfasst, wobei der Ringpuffer umfasst: - einer Vielzahl von sequentiell angeordneten Puffern fester Größe, die konfiguriert sind, um Nachrichten zu speichern, und - eines globalen Headers, der eine seqlock umfasst, wobei die seqlock einen seqlock-Zähler umfasst, der Informationen in Bezug auf einen Puffer fester Größe in dem Ringpuffer bereitstellt, an den der Publisher als nächstes eine Nachricht schreiben wird; und - einen Synchronisationsdatenspeicherbereich, der jedem der Vielzahl von Puffern mit fester Größe entspricht, wobei der Synchronisationsdatenspeicherbereich einen Pufferzähler umfasst, der die Genauigkeit einer Nachricht angibt, die von dem Festgrößenpuffer durch den Subscriber gelesen wird.A method for enabling message transmission between a publisher and a subscriber, the method comprising, by a processor: Generate in shared storage: - a data structure comprising a ring buffer, the ring buffer comprising: - a plurality of sequentially arranged fixed size buffers configured to store messages, and - a global header comprising a seqlock, the seqlock comprising a seqlock counter providing information relating to a fixed size buffer in the ring buffer to which the publisher will next write a message; and - a synchronization data storage area corresponding to each of the plurality of fixed size buffers, the synchronization data storage area including a buffer counter indicating the accuracy of a message read from the fixed size buffer by the subscriber. Verfahren nach Anspruch 22, wobei ein negativer Wert des seqlock-Zählers einen Zustand des Systems anzeigt, in dem der Ringpuffer keine Nachrichten enthält.Procedure according to Claim 22 , where a negative value of the seqlock counter indicates a state of the system in which the ring buffer contains no messages. Verfahren nach Anspruch 23, ferner umfassend, durch den Publisher, Zuweisen eines Wertes von 0 zu dem Zähler nach Abschluss eines ersten Schreibens in den Ringpuffer.Procedure according to Claim 23 , further comprising, by the publisher, assigning a value of 0 to the counter upon completion of a first write to the ring buffer. Verfahren nach Anspruch 24, ferner umfassend, durch den Publisher, Erhöhen des Wertes des Zählers nach jeder nachfolgenden Operation, so dass ein Index des Puffers mit fester Größe in dem Ringpuffer, auf den der Publisher, der zuletzt eine Nachricht ist, bestimmt wird, durch Dividieren eines Wertes des Zählers um 2 bestimmt wird.Procedure according to Claim 24 , further comprising, by the publisher, incrementing the value of the counter after each subsequent operation so that an index of the fixed size buffer in the ring buffer to which the publisher that is most recently a message is determined by dividing a value of the Counter is determined by 2. Verfahren nach Anspruch 22, wobei: die Sperre durch den Publisher erfasst wird, bevor ein Schreiben in einen der mehreren Puffer mit fester Größe ausgeführt wird; und die Sperre durch den Publisher nach Ausführung des Schreibens freigegeben wird.Procedure according to Claim 22 , where: the lock is acquired by the publisher before a write is performed to one of the plurality of fixed-size buffers; and the lock is released by the publisher after the write is executed. Verfahren nach Anspruch 22, wobei die mehreren Puffer mit fester Größe keine Cache-Zeilen miteinander in dem gemeinsam genutzten Speicher teilen.Procedure according to Claim 22 , where the multiple fixed size buffers do not share cache lines with each other in the shared memory. Verfahren nach Anspruch 22, wobei jeder der Vielzahl von Puffern einen Pufferheader umfasst, der konfiguriert ist, um mindestens eines der Folgenden zu speichern: eine Pufferindexnummer, Synchronisationsinformationen oder Pufferzustandsinformationen.Procedure according to Claim 22 , wherein each of the plurality of buffers includes a buffer header configured to store at least one of: a buffer index number, synchronization information, or buffer state information. Verfahren nach Anspruch 28, wobei der Pufferheader eine eindeutige Cache-Zeile in dem gemeinsam genutzten Speicher einnimmt.Procedure according to Claim 28 , where the buffer header occupies a unique cache line in shared memory. Verfahren nach Anspruch 29, wobei jeder der Vielzahl von Puffern ferner einen Datenbereich umfasst, der in einer Cache-Zeile des gemeinsam genutzten Speichers unmittelbar nach der eindeutigen Cache-Zeile eines entsprechenden Pufferheaders beginnt.Procedure according to Claim 29 , wherein each of the plurality of buffers further includes a data area beginning in a cache line of the shared memory immediately after the unique cache line of a corresponding buffer header. Verfahren nach Anspruch 22, wobei eine Speicheradresse des Synchronisationsdatenspeicherbereichs in einem Pufferheader dieses Puffers mit fester Größe enthalten ist.Procedure according to Claim 22 , wherein a memory address of the synchronization data storage area is contained in a buffer header of this fixed-size buffer. Verfahren nach Anspruch 22, wobei: ein Anfangswert des Pufferzählers auf 0 gesetzt wird; und der Publisher konfiguriert ist, um für die Ausführung eines Schreibens in diesen Puffer mit fester Größe einen Wert des Pufferzählers vor der Ausführung des Schreibens und nach der Ausführung des Schreibens zu inkrementieren.Procedure according to Claim 22 , where: an initial value of the buffer counter is set to 0; and the publisher is configured to perform a write to this fixed-size buffer by specifying a value of the buffer counter before execution of writing and incrementing after executing the write. Verfahren nach Anspruch 32, ferner umfassend, durch den Subscriber: Vergleichen eines ersten Werts des Pufferzählers vor der Ausführung eines Lesens aus diesem festen Größenpuffer mit einem zweiten Wert des Pufferzählers nach Ausführung des Lesens aus dem Puffer mit fester Größe; und Verwerfen einer Nachricht, die von dem Puffer mit fester Größe gelesen wird, wenn der erste Wert nicht mit dem zweiten Wert übereinstimmt.Procedure according to Claim 32 , further comprising, by the subscriber: comparing a first value of the buffer counter before performing a read from that fixed size buffer with a second value of the buffer counter after performing the read from the fixed size buffer; and discarding a message read from the fixed-size buffer if the first value does not match the second value. Verfahren nach Anspruch 22, wobei ein Wert des Pufferzählers während der Ausführung eines Schreibens in den Puffer mit fester Größe durch den Publisher ungerade ist.Procedure according to Claim 22 , where a value of the buffer counter is odd during the publisher's execution of a write to the fixed-size buffer. Verfahren nach Anspruch 34, ferner umfassend, durch den Subscriber, Warten auf eine Benachrichtigung über den Abschluss des Schreibens, der ausgeführt wird, wenn der Wert des Pufferzählers ungerade ist, bevor ein Lesen auf dem Puffer mit fester Größe ausgeführt wird.Procedure according to Claim 34 , further comprising, by the subscriber, waiting for notification of completion of the write performed when the value of the buffer counter is odd before performing a read on the fixed size buffer. System zum Teilen von Informationen zwischen einem Publisher und einem Subscriber, wobei das System umfasst: einen gemeinsam genutzten Speicher; und einen Speicherbroker, umfassend: einen Prozessor und ein nichtflüchtiges computerlesbares Medium, das eine oder mehrere Programmieranweisungen umfasst, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor: - Empfangen, von einem Publisher, einer Anforderung zum Schreiben einer Nachricht, die sich auf ein Thema bezieht; - Bestimmen, ob ein Kommunikationskanal, der dem Thema entspricht, in dem gemeinsam genutzten Speicher vorhanden ist; und - als Reaktion auf das Bestimmen, dass der Kommunikationskanal, der dem Thema entspricht, vorhanden ist: - Zuweisen eines Ringpuffers auf dem Kommunikationskanal zu dem Publisher, - Senden, an den Publisher, von Informationen, die sich auf den Ringpuffer beziehen, und - Senden, an einen oder mehrere Subscriber des Kommunikationskanals, von Informationen, die sich auf den Ringpuffer beziehen.System for sharing information between a publisher and a subscriber, the system comprising: a shared memory; and a storage broker comprising: a processor and a non-transitory computer-readable medium that includes one or more programming instructions that, when executed by the processor, cause the processor to: - Receive, from a Publisher, a request to write a message related to a topic; - determining whether a communication channel corresponding to the topic exists in the shared memory; and - in response to determining that the communication channel corresponding to the topic is present: - Assigning a ring buffer on the communication channel to the publisher, - Sending, to the publisher, information related to the ring buffer, and - Sending, to one or more subscribers of the communication channel, information relating to the ring buffer. System nach Anspruch 36, ferner umfassend Programmieranweisungen, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor als Reaktion auf das Bestimmen, dass der Kommunikationskanal, der dem Thema entspricht, nicht existiert: Erzeugen eines neuen Kommunikationskanals, der dem Thema entspricht, wobei der neue Kommunikationskanal mindestens einen Ringpuffer umfasst; und Übertragen von Informationen in Bezug auf den neuen Kommunikationskanal und den mindestens einen Ringpuffer an den Publisher.System after Claim 36 , further comprising programming instructions that, when executed by the processor, cause the processor, in response to determining that the communication channel corresponding to the topic does not exist, to: generate a new communication channel corresponding to the topic, wherein the new communication channel comprises at least one ring buffer; and transmitting information regarding the new communication channel and the at least one ring buffer to the publisher. System nach Anspruch 37, ferner umfassend Programmieranweisungen, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor eine Nachricht von einem Subscriber empfängt, um das Thema zu abonnieren.System after Claim 37 , further comprising programming instructions that, when executed by the processor, cause the processor to receive a message from a subscriber to subscribe to the topic. System nach Anspruch 37, wobei der neue Kommunikationskanal basierend auf mindestens einem der folgenden Kanalparameter erzeugt wird: eine maximale Größe jeder Nachricht auf dem neuen Kommunikationskanal, eine maximale Anzahl von Nachrichten zu einer Warteschlange, eine Anzahl von Publishern, die auf einem Ringpuffer des neuen Kommunikationskanals veröffentlicht werden dürfen, eine maximale Anzahl von Ringpuffern auf dem Kanal, ob eine Ringpufferteilung erlaubt ist, eine zulässige Latenz in dem neuen Kommunikationskanal, Arten von Nachrichten ein Kanalbenennungsprotokoll oder eine zulässige Liste von Publishern, die dem neuen Kommunikationskanal veröffentlicht werden dürfen.System after Claim 37 , where the new communication channel is created based on at least one of the following channel parameters: a maximum size of each message on the new communication channel, a maximum number of messages to a queue, a number of publishers that are allowed to be published on a ring buffer of the new communication channel, a maximum number of ring buffers on the channel, whether ring buffer sharing is allowed, an allowed latency in the new communication channel, types of messages, a channel naming protocol, or an allowed list of publishers that are allowed to publish to the new communication channel. System nach Anspruch 37, ferner umfassend Programmieranweisungen, die bewirken, dass der Prozessor eine Aufzeichnung des neuen Kommunikationskanals in einem Datenspeicher erzeugt.System after Claim 37 , further comprising programming instructions that cause the processor to create a record of the new communication channel in a data memory. System nach Anspruch 36, wobei die Programmieranweisungen, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor den Ringpuffer auf dem Kommunikationskanal dem Publisher zuweist, Programmieranweisungen umfasst, um den Prozessor zu veranlassen, einen neuen Ringpuffer auf dem Kommunikationskanal zum Zuweisen zu dem Publisher zu erzeugen, wenn mindestens eines der Folgenden bestimmt wird: - der Speicherbroker ermöglicht nicht, dass mehrere Publisher Nachrichten an einen einzelnen Ringpuffer veröffentlichen, und alle geeignet konfigurierten Ringpuffer auf dem Kommunikationskanal sind bereits mit einem Live-Publisher assoziiert; - der Speicherbroker ermöglicht, dass mehrere Publisher Nachrichten zu einem einzelnen Ringpuffer veröffentlichen, aber die Ringpuffer auf dem Kanal für die Nachrichten des Publisher nicht geeignet konfiguriert sind; - bestehende Ringpuffer des Kommunikationskanals für die Nachrichten des Publisher nicht geeignet konfiguriert sind; - Ringpuffer des Kanals in einem Fehlerzustand sind; oder - der Publisher nicht auf vorhandene Ringpuffer des Kommunikationskanals veröffentlichen darf.System after Claim 36 , wherein the programming instructions that, when executed by the processor, cause the processor to allocate the ring buffer on the communication channel to the publisher include programming instructions for causing the processor to allocate a new ring buffer on the communication channel for allocation to the publisher generate when at least one of the following is determined: - the storage broker does not allow multiple publishers to publish messages to a single ring buffer and all appropriately configured ring buffers on the communication channel are already associated with a live publisher; - the storage broker allows multiple publishers to publish messages to a single ring buffer, but the ring buffers on the channel are not configured appropriately for the publisher's messages; - existing ring buffers of the communication channel are not suitably configured for the publisher's messages; - The channel's ring buffers are in an error state; or - the publisher is not allowed to publish to existing ring buffers of the communication channel. System nach Anspruch 36, wobei die Programmieranweisungen, die, wenn sie durch den Prozessor ausgeführt werden, bewirken, dass der Prozessor den Ringpuffer auf dem Kommunikationskanal dem Publisher zuweist, Programmieranweisungen umfasst, um den Prozessor zu veranlassen, einen bereits existierenden Ringpuffer auf dem Kommunikationskanal zu dem Publisher zuzuweisen, wenn mindestens eines der Folgenden bestimmt wird: der Speicherbroker ermöglicht, dass mehrere Publisher Nachrichten zu einem einzelnen Ringpuffer veröffentlichen, und es gibt einen Ringpuffer auf dem Kanal, der geeignet für die Nachrichten des Publishers konfiguriert ist; oder der Speicherbroker ermöglicht es mehreren Publishern nicht, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, und es gibt mindestens einen geeignet konfigurierten Ringpuffer auf dem Kanal, der nicht bereits mit einem Live-Publisher assoziiert ist.System after Claim 36 , wherein the programming instructions that, when executed by the processor, cause the processor to allocate the ring buffer on the communication channel to the publisher, comprise programming instructions for causing the processor to allocate a pre-existing ring buffer on the communication channel to the publisher, if at least one of the following is determined: the storage broker allows multiple publishers to publish messages to a single ring buffer, and there is a ring buffer on the channel appropriately configured for the publisher's messages; or the storage broker does not allow multiple publishers to publish messages to a single ring buffer and there is at least one appropriately configured ring buffer on the channel that is not already associated with a live publisher. System nach Anspruch 36, ferner umfassend Programmieranweisungen, die bewirken, dass der Prozessor einen Datensatz, der dem zugewiesenen Ringpuffer zugeordnet ist, in einem Datenspeicher aktualisiert.System after Claim 36 , further comprising programming instructions that cause the processor to update a data set associated with the assigned ring buffer in a data memory. System nach Anspruch 36, ferner umfassend Programmieranweisungen, die den Prozessor veranlassen zum: Analysieren eines Zustands einer Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher; und Bestimmen, basierend auf dem Zustand, einer Aktion in Bezug auf einen oder mehrere der Vielzahl von Ringpuffern, wobei die Aktion mindestens eines der Folgenden umfasst: - temporäres Entfernen von der Verwendung durch Setzen dieses Ringpuffers auf Probation; # - Revidieren aus der Probation; oder - dauerhaft aus der Nutzung zu entfernen.System after Claim 36 , further comprising programming instructions that cause the processor to: analyze a state of a plurality of ring buffers in the shared memory; and determining, based on the state, an action with respect to one or more of the plurality of ring buffers, the action comprising at least one of the following: - temporarily removing from use by placing that ring buffer on probation; # - Revising from probation; or - permanently remove it from use. System nach Anspruch 44, wobei die Programmieranweisungen, die den Prozessor veranlassen, den Zustand der Vielzahl von Ringpuffern zu analysieren, Programmieranweisungen umfassen, um den Prozessor zu veranlassen, den Zustand periodisch zu analysieren.System after Claim 44 , wherein the programming instructions that cause the processor to analyze the state of the plurality of ring buffers include programming instructions for causing the processor to periodically analyze the state. System nach Anspruch 44, wobei die Programmieranweisungen, die den Prozessor veranlassen, den Zustand der Vielzahl von Ringpuffern zu analysieren, Programmieranweisungen umfassen, um den Prozessor zu veranlassen, den Zustand beim Auftreten eines Auslöseereignisses zu analysieren, wobei das Auslöseereignis mindestens eines der Folgenden umfasst: einen unerwarteten Verlust der Verbindung zwischen dem Speicherbroker und dem Publisher, Empfangen einer Nachricht von einem Peer des Ringpuffers, der ein Problem mit dem Ringpuffer anzeigt, Auftreten einer fehlerhaften Leseoperation an einen Ringpuffer, Auftreten einer fehlerhaften Schreiboperation an einen Ringpuffer oder eine Speicherbroker-Zustandsrekonstruktion.System after Claim 44 , wherein the programming instructions for causing the processor to analyze the state of the plurality of ring buffers include programming instructions for causing the processor to analyze the state upon the occurrence of a triggering event, the triggering event comprising at least one of the following: an unexpected loss of the Connection between the storage broker and the publisher, receiving a message from a peer of the ring buffer indicating a problem with the ring buffer, occurrence of a bad read operation to a ring buffer, occurrence of a bad write operation to a ring buffer, or a storage broker state reconstruction. System nach Anspruch 44, wobei ein Ringpuffer permanent aus der Verwendung entfernt wird, wenn bestimmt wird, dass der Ringpuffer verfälscht ist.System after Claim 44 , where a ring buffer is permanently removed from use if the ring buffer is determined to be corrupted. System nach Anspruch 44, wobei ein Ringpuffer permanent aus der Verwendung entfernt wird, wenn mindestens eines der Folgenden bestimmt wird: keinen Live- und aktiven Publisher, der mit dem Ringpuffer assoziiert ist; oder während der Zustandsrekonstruktion des Speicherbrokers.System after Claim 44 , wherein a ring buffer is permanently removed from use if at least one of the following is determined: no live and active publisher associated with the ring buffer; or during memory broker state reconstruction. System nach Anspruch 44, wobei: die bestimmte Aktion vorübergehend von der Verwendung entfernt wird; und der Speicherbroker ferner Programmieranweisungen umfasst, die bewirken, dass der Prozessor einen Datensatz des Ringpuffers in einer Probationsliste erzeugt, wobei der Datensatz mindestens eines der Folgenden umfasst: Ringpuffer-ID, aktuelle Schreibposition in dem Ringpuffer, ob eine Schreibsperre auf dem Ringpuffer vorhanden ist oder nicht, ein Zeitstempel der letzten Schreiboperation, ein Zeitstempel, wenn der Ring vorübergehend aus der Verwendung entfernt wird, oder ein Zeitstempel der jüngsten Aktualisierung des Datensatzes.System after Claim 44 , where: the particular action is temporarily removed from use; and the memory broker further comprises programming instructions that cause the processor to create a record of the ring buffer in a trial list, the record comprising at least one of the following: ring buffer ID, current write position in the ring buffer, whether a write lock is present on the ring buffer, or not, a timestamp of the last write operation, a timestamp when the ring is temporarily removed from use, or a timestamp of the most recent update of the record. System nach Anspruch 49, ferner umfassend Programmieranweisungen, um den Prozessor zu veranlassen, den Datensatz zu überprüfen, um zu bestimmen, ob der Ringpuffer dauerhaft aus der Verwendung entfernt oder von der Probation revidiert werden sollte.System after Claim 49 , further comprising programming instructions to cause the processor to examine the data set to determine whether the ring buffer should be permanently removed from use or revised from probation. System nach Anspruch 36, ferner umfassend Programmieranweisungen, um den Prozessor zu veranlassen, eine Rekonstruktion des gemeinsam genutzten Speichers nach einem Ausfall durchzuführen durch: temporäres Entfernen einer Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher; Herstellen einer Verbindung von einem Peer; Empfangen, von dem Peer, einer Anforderung zum Durchführen einer Lese-/Schreiboperation in einem gemeinsam genutzten Speicher; Bestimmen, ob der Peer die Lese-/Schreiboperation an einen Ringpuffer der Vielzahl von Speicherpuffern vor dem Ausfall ausführt; und nach dem Bestimmen, dass der Peer die Lese-/Schreiboperation an den Ringpuffer vor dem Ausfall ausführt, den Ringpuffer zur Verwendung durch den Peer zu revidieren.System after Claim 36 , further comprising programming instructions for causing the processor to perform a reconstruction of the shared memory after a failure by: temporarily removing a plurality of ring buffers in the shared memory; Connecting from a peer; receiving, from the peer, a request to perform a read/write operation on shared memory; determining whether the peer performs the read/write operation to a ring buffer of the plurality of memory buffers before the failure; and after determining that the peer has the reading /write operation to the ring buffer before the failure to revise the ring buffer for use by the peer. System nach Anspruch 51, ferner umfassend Programmieranweisungen, um den Prozessor zu veranlassen zum: Bestimmen, dass der Peer ein Publisher ist; und nach dem Bestimmen, dass der Peer die Lese-/Schreiboperation nicht vor dem Ausfall an den Ringpuffer ausführt, einen neuen Ringpuffer in dem gemeinsam genutzten Speicher für den Peer zu erzeugen.System after Claim 51 , further comprising programming instructions to cause the processor to: determine that the peer is a publisher; and after determining that the peer does not perform the read/write operation prior to the failure to the ring buffer, create a new ring buffer in the shared memory for the peer. Verfahren zum Teilen von Informationen zwischen einem Publisher und einem Subscriber, wobei das Verfahren durch einen Speicherbroker Folgendes umfasst: Empfangen, von einem Publisher, einer Anforderung zum Schreiben einer Nachricht, die sich auf ein Thema bezieht; Bestimmen, ob ein Kommunikationskanal, der dem Thema entspricht, in einem gemeinsam genutzten Speicher vorhanden ist; und als Reaktion auf das Bestimmen, dass der Kommunikationskanal, der dem Thema entspricht, vorhanden ist: - Zuweisen eines Ringpuffers auf dem Kommunikationskanal zu dem Publisher, Übertragen, an den Publisher, von Informationen, die sich auf den Ringpuffer beziehen, und - Senden, an einen oder mehrere Subscriber des Kommunikationskanals, von Informationen, die sich auf den Ringpuffer beziehen.A method for sharing information between a publisher and a subscriber, the method comprising, through a storage broker: Receiving, from a Publisher, a request to write a message related to a topic; determining whether a communication channel corresponding to the topic exists in shared memory; and in response to determining that the communication channel corresponding to the topic is in place: - Allocating a ring buffer on the communication channel to the publisher, transmitting to the publisher information relating to the ring buffer, and - Sending, to one or more subscribers of the communication channel, information relating to the ring buffer. Verfahren nach Anspruch 53, ferner umfassend, als Reaktion auf das Bestimmen, dass der Kommunikationskanal, der dem Thema entspricht, nicht existiert: Erzeugen eines neuen Kommunikationskanals, der dem Thema entspricht, wobei der neue Kommunikationskanal mindestens einen Ringpuffer umfasst; und Übertragen von Informationen in Bezug auf den neuen Kommunikationskanal und den mindestens einen Ringpuffer an den Publisher.Procedure according to Claim 53 , further comprising, in response to determining that the communication channel corresponding to the topic does not exist: creating a new communication channel corresponding to the topic, the new communication channel comprising at least one ring buffer; and transmitting information regarding the new communication channel and the at least one ring buffer to the publisher. Verfahren nach Anspruch 54, ferner umfassend das Empfangen einer Nachricht von einem Subscriber, um das Thema zu abonnieren.Procedure according to Claim 54 , further comprising receiving a message from a subscriber to subscribe to the topic. Verfahren nach Anspruch 54, wobei der neue Kommunikationskanal basierend auf mindestens einem der folgenden Kanalparameter erzeugt wird: eine maximale Größe jeder Nachricht auf dem neuen Kommunikationskanal, eine maximale Anzahl von Nachrichten zu einer Warteschlange, eine Anzahl von Publishern, die auf einem Ringpuffer des neuen Kommunikationskanals veröffentlicht werden dürfen, eine maximale Anzahl von Ringpuffern auf dem Kanal, ob eine Ringpufferteilung erlaubt ist, eine zulässige Latenz in dem neuen Kommunikationskanal, Arten von Nachrichten ein Kanalbenennungsprotokoll oder eine zulässige Liste von Publishern, die dem neuen Kommunikationskanal veröffentlicht werden dürfen.Procedure according to Claim 54 , where the new communication channel is created based on at least one of the following channel parameters: a maximum size of each message on the new communication channel, a maximum number of messages to a queue, a number of publishers that are allowed to be published on a ring buffer of the new communication channel, a maximum number of ring buffers on the channel, whether ring buffer sharing is allowed, an allowed latency in the new communication channel, types of messages, a channel naming protocol, or an allowed list of publishers that are allowed to publish to the new communication channel. Verfahren nach Anspruch 54, ferner umfassend das Erstellen einer Aufzeichnung des neuen Kommunikationskanals in einem Datenspeicher.Procedure according to Claim 54 , further comprising creating a record of the new communication channel in a data storage. Verfahren nach Anspruch 53, wobei das Zuweisen des Ringpuffers auf dem Kommunikationskanal zu dem Publisher das Erzeugen eines neuen Ringpuffers auf dem Kommunikationskanal zum Zuweisen zu dem Publisher umfasst, wenn mindestens eines der Folgenden bestimmt wird: der Speicherbroker ermöglicht nicht, dass mehrere Publisher Nachrichten an einen einzelnen Ringpuffer veröffentlichen, und alle geeignet konfigurierten Ringpuffer auf dem Kommunikationskanal sind bereits mit einem Live-Publisher assoziiert; der Speicherbroker ermöglicht, dass mehrere Publisher Nachrichten zu einem einzelnen Ringpuffer veröffentlichen, aber die Ringpuffer auf dem Kanal für die Nachrichten des Publisher nicht geeignet konfiguriert sind; bestehende Ringpuffer des Kommunikationskanals für die Nachrichten des Publisher nicht geeignet konfiguriert sind; Ringpuffer des Kanals in einem Fehlerzustand sind; oder der Publisher nicht auf vorhandene Ringpuffer des Kommunikationskanals veröffentlichen darf.Procedure according to Claim 53 , wherein allocating the ring buffer on the communications channel to the publisher includes creating a new ring buffer on the communications channel to allocate to the publisher when at least one of the following is determined: the storage broker does not allow multiple publishers to publish messages to a single ring buffer, and all appropriately configured ring buffers on the communication channel are already associated with a live publisher; the storage broker allows multiple publishers to publish messages to a single ring buffer, but the ring buffers on the channel are not configured appropriately for the publisher's messages; existing ring buffers of the communication channel are not suitably configured for the publisher's messages; The channel's ring buffers are in an error state; or the publisher is not allowed to publish to existing ring buffers of the communication channel. Verfahren nach Anspruch 53, wobei das Zuweisen des Ringpuffers auf dem Kommunikationskanal zu dem Publisher das Zuweisen eines bereits existierenden Ringpuffers auf dem Kommunikationskanal zu dem Publisher beim Bestimmen von mindestens einem der Folgenden umfasst: der Speicherbroker ermöglicht, dass mehrere Publisher Nachrichten zu einem einzelnen Ringpuffer veröffentlichen, und es gibt einen Ringpuffer auf dem Kanal, der geeignet für die Nachrichten des Publishers konfiguriert ist; oder der Speicherbroker ermöglicht es mehreren Publishern nicht, Nachrichten an einen einzelnen Ringpuffer zu veröffentlichen, und es gibt mindestens einen geeignet konfigurierten Ringpuffer auf dem Kanal, der nicht bereits mit einem Live-Publisher assoziiert ist.Procedure according to Claim 53 , wherein allocating the ring buffer on the communication channel to the publisher includes allocating a pre-existing ring buffer on the communication channel to the publisher in determining at least one of the following: the storage broker allows multiple publishers to publish messages to a single ring buffer, and there are a ring buffer on the channel appropriately configured for the publisher's messages; or the storage broker does not allow multiple publishers to publish messages to a single ring buffer and there is at least one appropriately configured ring buffer on the channel that is not already associated with a live publisher. Verfahren nach Anspruch 53, das ferner das Aktualisieren eines Datensatzes umfasst, der dem zugewiesenen Ringpuffer in einem Datenspeicher zugeordnet ist.Procedure according to Claim 53 , further comprising updating a data set associated with the allocated ring buffer in a data store. Verfahren nach Anspruch 53, ferner umfassend: Analysieren eines Zustands einer Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher; und Bestimmen, basierend auf dem Zustand, einer Aktion in Bezug auf einen oder mehrere der Vielzahl von Ringpuffern, wobei die Aktion mindestens eines der Folgenden umfasst: - temporäres Entfernen von der Verwendung durch Setzen dieses Ringpuffers auf Probation; Revidieren aus der Probation; oder - dauerhaft aus der Nutzung zu entfernen.Procedure according to Claim 53 , further comprising: analyzing a state of a plurality of ring buffers in the shared memory; and Determine, based on the state, an action with respect to one or more of the plurality of ring buffers, the action comprising at least one of the following: - temporarily removing from use by placing that ring buffer on probation; revision from probation; or - permanently remove it from use. Verfahren nach Anspruch 61, wobei das Analysieren des Zustands der Vielzahl von Ringpuffern das Analysieren des Zustands periodisch umfasst.Procedure according to Claim 61 , wherein analyzing the state of the plurality of ring buffers includes analyzing the state periodically. Verfahren nach Anspruch 61, wobei das Analysieren des Zustands der Vielzahl von Ringpuffern das Analysieren des Zustands beim Auftreten eines Auslöseereignisses umfasst, wobei das Auslöseereignis mindestens eines der Folgenden umfasst: einen unerwarteten Verlust der Verbindung zwischen dem Speicherbroker und dem Publisher, Empfangen einer Nachricht von einem Peer des Ringpuffers, der ein Problem mit dem Ringpuffer anzeigt, Auftreten einer fehlerhaften Leseoperation an einen Ringpuffer das Auftreten einer fehlerhaften Schreiboperation auf einen Ringpuffer oder eine Speicherbroker-Zustandsrekonstruktion.Procedure according to Claim 61 , wherein analyzing the state of the plurality of ring buffers includes analyzing the state upon the occurrence of a trigger event, the trigger event comprising at least one of the following: an unexpected loss of connection between the storage broker and the publisher, receiving a message from a peer of the ring buffer, indicating a problem with the ring buffer, the occurrence of a bad read operation to a ring buffer, the occurrence of a bad write operation to a ring buffer, or a memory broker state reconstruction. Verfahren nach Anspruch 61, wobei ein Ringpuffer permanent aus der Verwendung entfernt wird, wenn bestimmt wird, dass der Ringpuffer verfälscht ist.Procedure according to Claim 61 , where a ring buffer is permanently removed from use if the ring buffer is determined to be corrupted. Verfahren nach Anspruch 61, wobei ein Ringpuffer permanent aus der Verwendung entfernt wird, wenn mindestens eines der Folgenden bestimmt wird: keinen Live- und aktiven Publisher, der mit dem Ringpuffer assoziiert ist; oder während der Zustandsrekonstruktion des Speicherbrokers.Procedure according to Claim 61 , wherein a ring buffer is permanently removed from use if at least one of the following is determined: no live and active publisher associated with the ring buffer; or during memory broker state reconstruction. Verfahren nach Anspruch 61, wobei: die bestimmte Aktion vorübergehend von der Verwendung entfernt wird; und das Verfahren ferner das Erzeugen eines Datensatzes des Ringpuffers in einer Probationsliste umfasst, wobei der Datensatz mindestens eine der folgenden umfasst: Ringpuffer-ID, aktuelle Schreibposition in dem Ringpuffer, ob eine Schreibsperre auf dem Ringpuffer vorhanden ist oder nicht, ein Zeitstempel der letzten Schreiboperation, ein Zeitstempel, wenn der Ring vorübergehend aus der Verwendung entfernt wird, oder ein Zeitstempel der jüngsten Aktualisierung des Datensatzes.Procedure according to Claim 61 , where: the particular action is temporarily removed from use; and the method further comprises generating a record of the ring buffer in a trial list, the record comprising at least one of the following: ring buffer ID, current write position in the ring buffer, whether or not a write lock is present on the ring buffer, a timestamp of the last write operation , a timestamp when the ring is temporarily removed from use, or a timestamp of the most recent update to the record. Verfahren nach Anspruch 66, das ferner das Überprüfen des Datensatzes umfasst, um zu bestimmen, ob der Ringpuffer dauerhaft aus der Verwendung entfernt oder von der Probation revidiert werden sollte.Procedure according to Claim 66 , which further includes reviewing the data set to determine whether the ring buffer should be permanently removed from use or revised from probation. Verfahren nach Anspruch 53, ferner umfassend das Durchführen einer Rekonstruktion des gemeinsam genutzten Speichers durch den Speicherbroker nach einem Ausfall durch: temporäres Entfernen einer Vielzahl von Ringpuffern in dem gemeinsam genutzten Speicher; Herstellen einer Verbindung von einem Peer; Empfangen, von dem Peer, einer Anforderung zum Durchführen einer Lese-/Schreiboperation in einem gemeinsam genutzten Speicher; Bestimmen, ob der Peer die Lese-/Schreiboperation an einen Ringpuffer der Vielzahl von Speicherpuffern vor dem Ausfall ausführt; und nach dem Bestimmen, dass der Peer die Lese-/Schreiboperation an den Ringpuffer vor dem Ausfall ausführt, den Ringpuffer zur Verwendung durch den Peer zu revidieren.Procedure according to Claim 53 , further comprising performing a reconstruction of the shared memory by the memory broker after a failure by: temporarily removing a plurality of ring buffers in the shared memory; Connecting from a peer; receiving, from the peer, a request to perform a read/write operation on shared memory; determining whether the peer performs the read/write operation to a ring buffer of the plurality of memory buffers before the failure; and after determining that the peer completes the read/write operation to the ring buffer before the failure, revise the ring buffer for use by the peer. Verfahren nach Anspruch 53, ferner umfassend: Bestimmen, dass der Peer ein Publisher ist; und nach dem Bestimmen, dass der Peer die Lese-/Schreiboperation nicht vor dem Ausfall an den Ringpuffer ausführt, einen neuen Ringpuffer in dem gemeinsam genutzten Speicher für den Peer zu erzeugen.Procedure according to Claim 53 , further comprising: determining that the peer is a publisher; and after determining that the peer does not perform the read/write operation prior to the failure to the ring buffer, create a new ring buffer in the shared memory for the peer. Nachrichtenübermittlungssystem zum Routen von Nachrichten zwischen Netzwerkknoten eines verteilten Computersystems, wobei das Nachrichtensystem Folgendes umfasst: eine Vielzahl von Netzwerkknoten, wobei jeder der Netzwerkknoten Folgendes umfasst: einen gemeinsam genutzten Speicher, der einen gemeinsam genutzten Speicherbereich umfasst, der konfiguriert ist, um Nachrichten zu speichern; einen Publisher; und ein erstes Brückenmodul, das konfiguriert ist zum: Bestimmen für einen gemeinsam genutzten Speicherbereich dieses Netzwerkknotens, ob ein Subscriber auf einem entfernten Netzwerkknoten existiert, wobei der entfernte Netzwerkknoten einer der Vielzahl von Netzwerkknoten ist, der den Publisher nicht enthält, und als Reaktion auf das Bestimmen, dass der Subscriber auf dem entfernten Netzwerkknoten existiert: Lesen einer Vielzahl von Nachrichten aus dem gemeinsam genutzten Speicherbereich und Übertragen der Vielzahl von Nachrichten an ein zweites Brückenmodul des entfernten Netzwerkknotens, wobei das zweite Brückenmodul konfiguriert ist, um die Vielzahl von Nachrichten in einen entfernten Speicherbereich auf dem entfernten Netzwerkknoten zu schreiben.Messaging system for routing messages between network nodes of a distributed computer system, the messaging system comprising: a plurality of network nodes, each of the network nodes comprising: a shared memory comprising a shared memory area configured to store messages; a publisher; and a first bridge module configured to: Determining, for a shared storage area of that network node, whether a subscriber exists on a remote network node, the remote network node being one of the plurality of network nodes that does not include the publisher, and in response to determining that the Subscriber exists on the remote network node: Reading a plurality of messages from the shared memory area and transmitting the plurality of messages to a second bridge module of the remote network node, the second bridge module being configured to write the plurality of messages to a remote memory area on the remote network node. Nachrichtensystem nach Anspruch 70, wobei der entfernte Speicherbereich mit dem gemeinsam genutzten Speicherbereich identisch ist.messaging system Claim 70 , where the remote memory area is the same as the shared memory area. Nachrichtensystem nach Anspruch 70, wobei der Subscriber konfiguriert ist, um die Vielzahl von Nachrichten aus dem entfernten Speicherbereich zu lesen.messaging system Claim 70 , where the subscriber is configured to read the plurality of messages from the remote storage area. Nachrichtensystem nach Anspruch 70, wobei das erste Brückenmodul konfiguriert ist, um für den gemeinsam genutzten Speicherbereich zu bestimmen, ob der Subscriber auf dem entfernten Netzwerkknoten existiert durch: Empfangen von Informationen über mindestens eines der Folgenden in dem verteilten Robotersystem: einen oder mehrere Kommunikationskanäle, einen oder mehrere Ringpuffer, Netzwerkorte von einem oder mehreren Publishern oder einen Netzwerkstandort eines oder mehrerer Subscriber; und Verwenden der empfangenen Informationen, um für den gemeinsam genutzten Speicherbereich zu bestimmen, ob der Subscriber auf dem entfernten Netzwerkknoten existiert.messaging system Claim 70 , wherein the first bridge module is configured to determine for the shared memory area whether the subscriber exists on the remote network node by: receiving information about at least one of the following in the distributed robot system: one or more communication channels, one or more ring buffers, Network locations of one or more publishers or a network location of one or more subscribers; and using the received information to determine for the shared storage area whether the subscriber exists on the remote network node. Nachrichtensystem nach Anspruch 73, wobei das erste Brückenmodul konfiguriert ist, um die Informationen von dem zweiten Brückenmodul auf dem entfernten Netzwerkknoten zu empfangen.messaging system Claim 73 , wherein the first bridge module is configured to receive the information from the second bridge module on the remote network node. Nachrichtensystem nach Anspruch 73, wobei das erste Brückenmodul konfiguriert ist, um die Informationen von einem Datenspeicher auf dem Netzwerkknoten des Publishers zu empfangen.messaging system Claim 73 , wherein the first bridge module is configured to receive the information from a data store on the publisher's network node. Nachrichtensystem nach Anspruch 70, wobei das erste Brückenmodul konfiguriert ist, um die Vielzahl von Nachrichten an den entfernten Netzwerkknoten unter Verwendung eines „Zero-Copy“-Netzwerkprotokolls zu übertragen.messaging system Claim 70 , wherein the first bridge module is configured to transmit the plurality of messages to the remote network node using a “zero-copy” network protocol. Nachrichtensystem nach Anspruch 70, wobei das erste Brückenmodul konfiguriert ist, um die Vielzahl von Nachrichten unter Verwendung eines Stream-Control-Übertragungsprotokolls (SCTP) an den entfernten Netzwerkknoten zu übertragen.messaging system Claim 70 , wherein the first bridge module is configured to transmit the plurality of messages to the remote network node using a stream control transmission protocol (SCTP). Nachrichtensystem nach Anspruch 70, wobei der gemeinsam genutzte Speicherbereich einen Ringpuffer umfasst, wobei der Ringpuffer umfasst: eine Vielzahl von sequentiell angeordneten Puffern fester Größe, die konfiguriert sind, um Nachrichten zu speichern; und einen globalen Header, der einen seqlock-Zähler umfasst, der eine Genauigkeit der Vielzahl von Nachrichten anzeigt, die in den entfernten Speicherbereich geschrieben sind.messaging system Claim 70 , wherein the shared memory area comprises a ring buffer, the ring buffer comprising: a plurality of sequentially arranged fixed size buffers configured to store messages; and a global header that includes a seqlock counter indicating an accuracy of the plurality of messages written to the remote storage area. Nachrichtensystem nach Anspruch 78, wobei das zweite Brückenmodul ferner konfiguriert ist, um den Ringpuffer in dem entfernten Speicherbereich zu replizieren.messaging system Claim 78 , wherein the second bridge module is further configured to replicate the ring buffer in the remote memory area. Nachrichtensystem nach Anspruch 70, ferner umfassend eine Vielzahl von Subscribern auf dem entfernten Netzwerkknoten, die konfiguriert sind, um die Vielzahl von Nachrichten aus dem entfernten Speicherbereich zu lesen.messaging system Claim 70 , further comprising a plurality of subscribers on the remote network node configured to read the plurality of messages from the remote storage area. Verfahren zum Routen von Nachrichten zwischen Netzwerkknoten eines verteilten Computersystems, wobei das Verfahren umfasst: durch ein erstes Brückenmodul: - Bestimmen, für einen gemeinsam genutzten Speicherbereich eines ersten Netzwerkknotens, ob ein Subscriber auf einem entfernten Netzwerkknoten existiert, wobei der entfernte Netzwerkknoten einer der Vielzahl von Netzwerkknoten ist, der keinen Publisher enthält, der konfiguriert ist, um Nachrichten in den gemeinsam genutzten Speicherbereich zu schreiben, und - als Reaktion auf das Bestimmen, dass der Subscriber auf dem entfernten Netzwerkknoten existiert: - Lesen einer Vielzahl von Nachrichten aus dem gemeinsam genutzten Speicherbereich und - Übertragen der Vielzahl von Nachrichten durch ein zweites Brückenmodul des entfernten Netzwerkknotens; und durch das zweite Brückenmodul, Schreiben der Vielzahl von Nachrichten in einen entfernten Speicherbereich auf dem entfernten Netzwerkknoten.A method for routing messages between network nodes of a distributed computer system, the method comprising: through a first bridge module: - Determine, for a shared storage area of a first network node, whether a subscriber exists on a remote network node, the remote network node being one of the plurality of network nodes that does not include a publisher configured to write messages to the shared storage area , and - in response to determining that the Subscriber exists on the remote network node: - Reading a variety of messages from the shared memory area and - transmitting the plurality of messages through a second bridge module of the remote network node; and by the second bridge module, writing the plurality of messages to a remote storage area on the remote network node. Verfahren nach Anspruch 81, wobei der entfernte Speicherbereich mit dem gemeinsam genutzten Speicherbereich identisch ist.Procedure according to Claim 81 , where the remote memory area is the same as the shared memory area. Verfahren nach Anspruch 81, wobei der Subscriber konfiguriert ist, um die Vielzahl von Nachrichten aus dem entfernten Speicherbereich zu lesen.Procedure according to Claim 81 , where the subscriber is configured to read the plurality of messages from the remote storage area. Verfahren nach Anspruch 81, ferner umfassend, durch das erste Brückenmodul, Bestimmen für den gemeinsam genutzten Speicherbereich, ob der Subscriber auf dem entfernten Netzwerkknoten existiert durch: Empfangen von Informationen über mindestens eines der Folgenden in dem verteilten Robotersystem: einen oder mehrere Kommunikationskanäle, einen oder mehrere Ringpuffer, Netzwerkorte von einem oder mehreren Publishern oder einen Netzwerkstandort eines oder mehrerer Subscriber; und Verwenden der empfangenen Informationen, um für den gemeinsam genutzten Speicherbereich zu bestimmen, ob der Subscriber auf dem entfernten Netzwerkknoten existiert.Procedure according to Claim 81 , further comprising, by the first bridge module, determining for the shared memory area whether the subscriber exists on the remote network node by: receiving information about at least one of the following in the distributed robot system: one or more communication channels, one or more ring buffers, network locations from one or more publishers or a network location of one or more subscribers; and using the received information to determine for the shared storage area whether the subscriber exists on the remote network node. Verfahren nach Anspruch 84, ferner umfassend, durch das erste Brückenmodul, Empfangen der Informationen von dem zweiten Brückenmodul auf dem entfernten Netzwerkknoten.Procedure according to Claim 84 , further comprising, received by the first bridge module the information from the second bridge module on the remote network node. Verfahren nach Anspruch 84, ferner umfassend, durch das erste Brückenmodul, Empfangen der Informationen von einem Datenspeicher auf dem Netzwerkknoten des Publishers.Procedure according to Claim 84 , further comprising, by the first bridge module, receiving the information from a data store on the publisher's network node. Verfahren nach Anspruch 81, ferner umfassend, durch das erste Brückenmodul, Senden der Vielzahl von Nachrichten an den entfernten Netzwerkknoten unter Verwendung eines „Zero-Copy“-Netzwerkprotokolls.Procedure according to Claim 81 , further comprising, by the first bridge module, sending the plurality of messages to the remote network node using a “zero-copy” network protocol. Verfahren nach Anspruch 81, ferner umfassend, durch das erste Brückenmodul, Senden der Vielzahl von Nachrichten an den entfernten Netzwerkknoten unter Verwendung eines Stream-Control-Übertragungsprotokolls (SCTP).Procedure according to Claim 81 , further comprising, by the first bridge module, sending the plurality of messages to the remote network node using a stream control transmission protocol (SCTP). Verfahren nach Anspruch 81, wobei der gemeinsam genutzte Speicherbereich einen Ringpuffer umfasst, wobei der Ringpuffer umfasst: eine Vielzahl von sequentiell angeordneten Puffern fester Größe, die konfiguriert sind, um Nachrichten zu speichern; und einen globalen Header, der einen seqlock-Zähler umfasst, der eine Genauigkeit der Vielzahl von Nachrichten anzeigt, die in den entfernten Speicherbereich geschrieben sind.Procedure according to Claim 81 , wherein the shared memory area comprises a ring buffer, the ring buffer comprising: a plurality of sequentially arranged fixed size buffers configured to store messages; and a global header that includes a seqlock counter indicating an accuracy of the plurality of messages written to the remote storage area. Verfahren nach Anspruch 89, ferner umfassend, durch das zweite Brückenmodul, Replizieren des Ringpuffers in dem entfernten Speicherbereich.Procedure according to Claim 89 , further comprising, by the second bridge module, replicating the ring buffer in the remote memory area. Verfahren nach Anspruch 81, ferner umfassend, durch eine Vielzahl von Subscribern auf dem entfernten Netzwerkknoten, Lesen der Vielzahl von Nachrichten aus dem entfernten Speicherbereich.Procedure according to Claim 81 , further comprising, by a plurality of subscribers on the remote network node, reading the plurality of messages from the remote storage area.
DE112021005942.4T 2020-11-13 2021-11-09 Methods and systems for providing lock-free access to a shared memory area in a publish-and-subscribe system Pending DE112021005942T5 (en)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US17/097,590 2020-11-13
US17/097,671 US11709620B2 (en) 2020-11-13 2020-11-13 Methods and systems for memory management in a publish and subscribe system
US17/097,671 2020-11-13
US17/097,590 US11429290B2 (en) 2020-11-13 2020-11-13 Methods and systems for providing a lockless access to a shared memory region in a publish and subscribe system
US17/097,699 2020-11-13
US17/097,699 US11363099B2 (en) 2020-11-13 2020-11-13 Methods and systems for enabling publish-subscribe message transmission in a distributed environment
PCT/US2021/058516 WO2022103708A1 (en) 2020-11-13 2021-11-09 Methods and systems for providing a lockless access to a shared memory region in a publish and subscribe system

Publications (1)

Publication Number Publication Date
DE112021005942T5 true DE112021005942T5 (en) 2023-09-14

Family

ID=81601689

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112021005942.4T Pending DE112021005942T5 (en) 2020-11-13 2021-11-09 Methods and systems for providing lock-free access to a shared memory area in a publish-and-subscribe system

Country Status (2)

Country Link
DE (1) DE112021005942T5 (en)
WO (1) WO2022103708A1 (en)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008293484A (en) * 2007-04-27 2008-12-04 Panasonic Corp Buffer memory sharing apparatus
US10785296B1 (en) * 2017-03-09 2020-09-22 X Development Llc Dynamic exchange of data between processing units of a system
US10572405B1 (en) * 2018-12-28 2020-02-25 Didi Research America, Llc Writing messages in a shared memory architecture for a vehicle

Also Published As

Publication number Publication date
WO2022103708A1 (en) 2022-05-19

Similar Documents

Publication Publication Date Title
US11709620B2 (en) Methods and systems for memory management in a publish and subscribe system
DE69728176T2 (en) PROCESS AND DEVICE ALLOWS THE DISTRIBUTED CONTROL OF JOINT RESOURCES
DE69836778T2 (en) Apparatus and method for remote buffer allocation and management for message transmission between network nodes
CN1327347C (en) Executing processes in a multiprocessing environment
DE69923802T2 (en) Configure a set of volumes with a single operational view
DE69826930T2 (en) System and method for effective remote disk input / output
EP2786258B1 (en) System, computer-implemented method and computer program product for direct communication between hardware accelerators in a computer cluster
DE112015004336T5 (en) Configuration-based selection of a cache coherence protocol
DE102012023395A1 (en) Interface device and method for exchanging user data
DE60225473T2 (en) METHOD OF DATA PROCESSING
DE112020005928T5 (en) Master agent and distributed agent architecture for vehicles
DE112012000989B4 (en) Peer-to-peer cooperation of publishers in a Publication Subscription environment
DE102009031870B4 (en) Dynamically update the routing table
DE102013209643A1 (en) Mechanism for optimized message exchange data transfer between nodelets within a tile
DE112012000274B4 (en) Protecting the integrity of data on storage media
DE112019002392T5 (en) VEHICLE CONTROL UNIT, METHOD FOR MANAGING INTERRUPT INFORMATION AND PROGRAM FOR MANAGING INTERRUPT INFORMATION
DE112012004554B4 (en) Serial processing of access to data in data processing environments with several mainframes
DE102021210323A1 (en) Detection of abnormal communication
DE112018003291T5 (en) Vehicle control unit
US11363099B2 (en) Methods and systems for enabling publish-subscribe message transmission in a distributed environment
DE112020006047T5 (en) CONTROLLING TRANSACTION REQUESTS BETWEEN APPLICATIONS AND SERVERS
DE112021005942T5 (en) Methods and systems for providing lock-free access to a shared memory area in a publish-and-subscribe system
DE102022209097A1 (en) Intelligent telematics data synchronization
DE102019217047A1 (en) Method and device for managing access by several software components to software interfaces
DE112011104020T5 (en) Validate access to a shared record for read and write access by multiple requestors