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 PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9047—Buffering arrangements including multiple buffers, e.g. buffer pools
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-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.
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.
Wie in
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
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
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
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
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
Das Datenkommunikationsnetzwerk 150, das in
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
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
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
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
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
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
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
In
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
In einem anderen Beispiel kann, wie in
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
Unter erneuter Bezugnahme auf
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
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
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
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
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
Unter erneuter Bezugnahme auf
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
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
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
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
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
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
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
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,
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
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
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
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
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
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
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
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
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
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
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
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
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,
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
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,
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
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
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
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
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
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
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
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
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
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.
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,
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
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
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)
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)
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 |
-
2021
- 2021-11-09 WO PCT/US2021/058516 patent/WO2022103708A1/en active Application Filing
- 2021-11-09 DE DE112021005942.4T patent/DE112021005942T5/en active Pending
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 |