DE112011103276T5 - Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur - Google Patents

Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur Download PDF

Info

Publication number
DE112011103276T5
DE112011103276T5 DE112011103276T DE112011103276T DE112011103276T5 DE 112011103276 T5 DE112011103276 T5 DE 112011103276T5 DE 112011103276 T DE112011103276 T DE 112011103276T DE 112011103276 T DE112011103276 T DE 112011103276T DE 112011103276 T5 DE112011103276 T5 DE 112011103276T5
Authority
DE
Germany
Prior art keywords
read
sequence
offset
prefetch
read request
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.)
Ceased
Application number
DE112011103276T
Other languages
English (en)
Inventor
Oded SONIN
Lior Aronovich
Konstantin MUSHKIN
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112011103276T5 publication Critical patent/DE112011103276T5/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/163Server or database system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

Bei einem Verfahren für die Vorauslese-(Read-Ahead)-Verarbeitung in einer Client-Server-Netzwerkarchitektur werden Lesenachrichten durch eine Vielzahl eindeutiger Sequenzkennungen (IDs) gruppiert, wobei jede der Sequenz-IDs einer bestimmten Lesesequenz entspricht, die aus allen Lese- und Vorausleseanfragen besteht, die ein bestimmtes Speichersegment betreffen, das sequenziell durch einen Ausführungsstrang (thread of execution) in einer Client-Anwendung gelesen wird. Das Speichersystem verwendet den Sequenz-ID-Wert, um Vorauslesenachrichten zu erkennen und herauszufiltern, die obsolet sind, wenn sie durch das Speichersystem empfangen werden, da sich die Client-Anwendung bereits weiterbewegt hat, um ein anderes Speichersegment zu lesen. Grundsätzlich wird eine Nachricht verworfen, wenn ihr Sequenz-ID-Wert älter ist als der jüngste vom Speichersystem bereits zur Kenntnis genommene Wert. Die Sequenz-IDs werden durch das Speichersystem verwendet, um entsprechende in den Vorauslese-Cachespeicher zu ladende Vorauslesedaten zu ermitteln.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Erfindung betrifft im Allgemeinen Computer und genauer die Vorauslese-(Read-Ahead)-Verarbeitung in einer Client-Server-Netzwerkarchitektur in einer Computerspeicherumgebung.
  • HINTERGRUND
  • Beim Durchführen sequenzieller Leseoperationen verbessert ein Vorauslesemechanismus die Effizienz des Leseprozesses, indem Hintergrund-Vorausleseoperationen durchgeführt werden, bei denen Daten von einer Speichereinheit in einen arbeitsspeichergestützten Cachespeicher geladen und diese Daten dann bei nachfolgenden Lesevorgängen direkt aus dem Cachespeicher gelesen werden. Dies ermöglicht es, die Speicherkanäle und -einheiten effizient zu nutzen, den E/A-Zugriff über der Zeit auszugleichen und somit die Effizienz des gesamten Leseprozesses zu steigern. Insbesondere beim Verarbeiten einer Leseoperation sind die Daten allgemein bereits im Vorauslese-Cachespeicher verfügbar, anstatt darauf zu warten, dass sie von der Speichereinheit abgerufen werden, und da ein Cachespeicher-Zugriff (der gemeinhin arbeitsspeichergestützt ist) schneller als ein E/A-Zugriff ist, ist der gesamte Leseprozess effizienter.
  • KURZDARSTELLUNG
  • Ein Vorauslesemechanismus ist allgemein für einen Anwendungsfall des sequenziellen Lesens optimiert. Bei der in den folgenden veranschaulichten Ausführungsformen betrachteten Architektur und dem beanspruchten Gegenstand können mehrere Faktoren die Effizienz eines Vorauslesemechanismus verringern.
  • Da davon ausgegangen wird, dass Nachrichten umgeordnet werden können, wenn sie das Netzwerk durchlaufen, werden Nachrichten in erster Linie am Ziel möglicherweise in einer anderen Reihenfolge empfangen als derjenigen, in der sie erstellt und gesendet wurden. Dies kann dazu führen, dass durch einen Client sequenziell ausgegebene Lese- und Vorauslesenachrichten nicht-sequenziell erscheinen, wenn sie durch ein Speichersystem empfangen werden. Insbesondere können diese Nachrichten den Anschein erwecken, Lücken und Zurückleseverhalten aufzuweisen. Beide dieser Verhaltensweisen können die Effizienz eines im Speichersystem arbeitenden Vorauslesemechanismus verringern, da es in solch einer Situation schwieriger ist, festzustellen, für welche Daten es am vorteilhaftesten ist, wenn sie sich im Vorauslese-Cachespeicher des Speichersystems befinden.
  • Da darüber hinaus die Client-Anwendung vom Lesen eines Speichersegments zu einem anderen voranschreitet, erreichen durch den Client für vorherige Segmente ausgegebene Vorauslesenachrichten das Speichersystem unter Umständen erst, nachdem bereits den nächsten Segmenten zugehörige Lese- und Vorauslesenachrichten durch das Speichersystem verarbeitet wurden. Ein Verarbeiten der den vorherigen Segmenten zugehörigen obsoleten Nachrichten wäre ineffizient, da eine solche Verarbeitung Ressourcen verbraucht. Des Weiteren kann ein Verarbeiten solcher obsoleter Nachrichten den im Speichersystem arbeitenden Vorauslesemechanismus auf die vorherigen Segmente umlenken, was ebenfalls die Effizienz des Leseprozesses verringert.
  • Im Hinblick auf das Vorhergehende besteht ein Bedarf nach Mechanismen, welche die vorstehenden Herausforderungen lösen. Dementsprechend werden verschiedene Ausführungsformen für Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur durch eine Prozessoreinheit bereitgestellt. Lesenachrichten werden durch eine Vielzahl eindeutiger Sequenzkennungen (IDs) gruppiert, wobei jede der Sequenz-IDs einer bestimmten Lesesequenz entspricht, die aus allen Lese- und Vorausleseanfragen besteht, die ein bestimmtes Speichersegment betreffen, das sequenziell durch einen Ausführungsstrang (thread of execution) in einer Client-Anwendung gelesen wird. Das Speichersystem verwendet den Sequenz-ID-Wert, um Vorauslesenachrichten zu erkennen und herauszufiltern, die obsolet sind, wenn sie durch das Speichersystem empfangen werden, da sich die Client-Anwendung bereits weiterbewegt hat, um ein anderes Speichersegment zu lesen. Grundsätzlich wird eine Nachricht verworfen, wenn ihr Sequenz-ID-Wert älter als der jüngste vom Speichersystem bereits zur Kenntnis genommene Wert ist. Die Sequenz-IDs werden vom Speichersystem dazu verwendet, entsprechende Vorauslesedaten zu ermitteln, die in einen durch das Speichersystem für jede Client-Anwendungs-Lesesitzung unterhaltenen Vorauslese-Cachespeicher geladen werden sollen, wobei der Vorauslese-Cachespeicher logisch in vorhergehende und nachfolgende logische sequenzielle Puffer für die Datenverarbeitung unterteilt ist. Bei Voranschreiten der Dateninhalte des Vorauslese-Cachespeichers entsprechend der Art und Weise, in der die Leseanfragen der Client-Anwendungs-Lesesitzung voranschreiten, werden die Daten beginnend mit einem Versatz ein Byte nach dem Endversatz des vorhergehenden logischen Puffers in den nachfolgenden logischen Puffer geladen. Solange durch die Client-Anwendungs-Lesesitzung ein sequenzieller Lesestrom aufrecht erhalten wird, was durch Beobachten der eingehenden und unterhaltenen Werte der Sequenz-ID abgeleitet wird, schreitet der Ort des Vorauslese-Cachespeichers im gelesenen Datensegment unter Verwendung des vorstehend ausführlich beschriebenen Verfahrens voran, und Leseanfragen werden entweder aus dem Inhalt des Cachespeichers verarbeitet oder aus der Speichereinheit abgerufen (wenn die Daten, auf die sie sich beziehen, nicht vollständig im Cachespeicher enthalten sind). Wenn ein neuer sequenzieller Lesestrom erkannt wird, was wiederum durch Beobachten der eingehenden und der unterhaltenen Werte der Sequenz-ID abgeleitet wird, wird der Ort des Cachespeichers im gelesenen Datensegment auf der Grundlage des Versatzes der eingehenden Leseanfrage modifiziert und die angeforderten Daten werden aus dem Cachespeicher bereitgestellt.
  • Zusätzlich zur vorgenannten beispielhaften Verfahrensausführungsform werden weitere beispielhafte System- und Computerprodukt-Ausführungsformen bereitgestellt und bieten entsprechende Vorteile.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Nachfolgend werden in lediglich beispielhafter Weise Ausführungsformen der Erfindung unter Bezugnahme auf die begleitenden Zeichnungen beschrieben, in denen:
  • 1 eine beispielhafte Vorauslesearchitektur in einer Computerspeicherumgebung veranschaulicht;
  • 2 Lücken in einem sequenziellen Lesefluss veranschaulicht;
  • 3 ein beispielhaftes Verfahren zum Verarbeiten von Leseanfragen unter Berücksichtigung eingehender und unterhaltener Sequenz-ID-Werte veranschaulicht;
  • 4 ein beispielhaftes Verfahren zum Verarbeiten von Leseanfragen unter Berücksichtigung eingehender und unterhaltener Sequenz-ID-Werte und weitester Versatzwerte veranschaulicht;
  • 5 eine beispielhafte Verarbeitung eines aktualisierten Datenbereichs einer Leseanfrage unter Verwendung eines weitesten Versatzes veranschaulicht;
  • 6 und 7 eine beispielhafte Gestaltung logischer Puffer in einem physischen Puffer veranschaulichen, der als Vorauslese-Cachespeicher realisiert ist;
  • 8 eine beispielhafte Bedingung für ein Auslösen eines Voranschreitens von Dateninhalten der zuerst in 6 abgebildeten logischen Puffer auf der Grundlage zuvor festgelegter Schwellenwerte veranschaulicht;
  • 9 ein beispielhaftes Verfahren für die Verarbeitung einer eingehenden Leseanfrage unter Verwendung eines Cachespeicher-Puffers veranschaulicht; und
  • 10 beispielhafte Hardware veranschaulicht, die so eingerichtet ist, dass sie Aspekte des folgenden beanspruchten Gegenstandes realisieren kann.
  • DETAILLIERTE BESCHREIBUNG
  • In den folgenden veranschaulichten Ausführungsformen wird eine Client-Server-Netzwerkarchitektur betrachtet, in der eine Client-Anwendung Leseanfragen für in einem Speichersystem (bei dem es sich in dieser Architektur um den Server handelt) gespeicherte Daten ausgibt. Die Client-Anwendung und das Speichersystem sind über das Netzwerk verbunden. 1 veranschaulicht eine solche beispielhafte Client-Server-Netzwerkarchitektur 10. Ein Client-System 12 beherbergt eine Client-Anwendung 14, in der Leseanfragen über einen Client-Agenten 20 ausgegeben werden, der relativ zur Client-Anwendung lokal (d. h. auf demselben Prozessor) angeordnet ist und einen Vorauslese-Cachespeicher 18 verwendet. Bei dem Client-Agenten 20 handelt es sich um den Agenten des Speichersystems 26 auf dem Prozessor, der die Client-Anwendung 14 ausführt. Der Client-Agent 20 tauscht (anstelle der Client-Anwendung) über das Netzwerk 28 Daten mit dem Speichersystem 26 aus.
  • Der Client-Agent 20 und das Speichersystem 26 kommunizieren über das Netzwerk 28 mithilfe von Nachrichten (z. B. Lese- und Vorausleseanfragen 22). Wie im Hinblick auf Netzwerke üblicherweise anzunehmen ist, wird in dieser Architektur davon ausgegangen, dass Nachrichten 22 relativ zu ihrer Erstellungsreihenfolge umgeordnet werden können, wenn sie das Netzwerk durchlaufen. In der Architektur 10 können sowohl der Client-Agent 20 als auch das Speichersystem 26 ihre eigenen Vorauslesemechanismen anwenden. Insbesondere kann der Client-Agent 20 auf der Grundlage der durch die Client-Anwendung 20 ausgegebenen Leseanfragen Vorausleseoperationen erzeugen und die Vorauslesedaten in seinem eigenen Cachespeicher 18 speichern. Ebenso kann das Speichersystem 26 auf der Grundlage der von dem Client-Agenten 20 empfangenen Leseanfragen 22 Vorausleseoperationen erzeugen und die Vorauslesedaten in einem dedizierten Cachespeicher 24 speichern. Im Speichersystem 26 wird Speichernetzwerkkonnektivität 30 verwendet, um Lese- und Vorausleseanfragen 32 wie gezeigt an die Speichereinheit 32 zu senden.
  • Obwohl die durch die Client-Anwendung 14 ausgegebenen Leseanfragen der Annahme entsprechend sequenziell sind (daher der Vorteil des Vorauslesemechanismus in diesem Kontext), wird davon ausgegangen, dass das Lesemuster der Client-Anwendung auf übergeordneter Ebene zufällig ist. Ein Beispiel eines solchen Lesemusters wäre eine Anwendung, die relativ große Datenabschnitte unter Verwendung sequenzieller Leseoperationen kleinerer Teilabschnitte von mehreren Speichereinheiten (z. B. Dateien) liest, die jeweils unabhängig im Speichersystem gespeichert sind.
  • Wie zuvor erwähnt, ist ein Vorauslesemechanismus allgemein für einen Anwendungsfall des sequenziellen Lesens optimiert. In der bei den veranschaulichten Ausführungsformen betrachteten Architektur 10 können mehrere Faktoren die Effizienz des Vorauslesemechanismus verringern. Da davon ausgegangen wird, dass Nachrichten umgeordnet werden können, wenn sie das Netzwerk durchlaufen, werden Nachrichten in erster Linie am Ziel möglicherweise in einer anderen Reihenfolge empfangen als derjenigen, in der sie erstellt und gesendet wurden. Dies kann dazu führen, dass durch den Client-Agenten sequenziell ausgegebene Lese- und Vorauslesenachrichten nicht-sequenziell erscheinen, wenn sie durch das Speichersystem empfangen werden. Insbesondere können diese Nachrichten den Anschein erwecken, Lücken und Zurückleseverhalten aufzuweisen. Beide dieser Verhaltensweisen können die Effizienz eines im Speichersystem arbeitenden Vorauslesemechanismus verringern, da es in solch einer Situation schwieriger ist, festzustellen, für welche Daten es am vorteilhaftesten ist, wenn sie sich im Vorauslese-Cachespeicher des Speichersystems befinden.
  • Da, wie wiederum zuvor erwähnt, sich die Client-Anwendung darüber hinaus vom Lesen eines Speichersegments zu einem anderen weiterbewegt, erreichen durch den Client für vorherige Segmente ausgegebene Vorauslesenachrichten das Speichersystem unter Umständen erst, nachdem bereits den nächsten Segmenten zugehörige Lese- und Vorauslesenachrichten durch das Speichersystem verarbeitet wurden. Ein Verarbeiten der den vorherigen Segmenten zugehörigen obsoleten Nachrichten wäre ineffizient, da eine solche Verarbeitung Ressourcen verbraucht. Des Weiteren kann ein Verarbeiten solcher obsoleter Nachrichten den im Speichersystem arbeitenden Vorauslesemechanismus auf die vorherigen Segmente umlenken, was ebenfalls die Effizienz des Leseprozesses verringert.
  • Die folgenden veranschaulichten Ausführungsformen dienen dazu, die vorstehenden Herausforderungen wirksam zu lösen. In den Mechanismen der veranschaulichten Ausführungsformen übermittelt jede vom Client-Agenten an das Speichersystem gesendete Lese- und Vorauslesenachricht etwas, das hierin als ein Sequenz-ID-Wert bezeichnet wird, der Lesenachrichten in einer bestimmte Lesesequenz gruppiert, so dass allen Lese- und Vorausleseanfragen, die ein bestimmtes Speichersegment betreffen, das durch einen Ausführungsstrang in der Client-Anwendung sequenziell gelesen wird, derselbe eindeutige Sequenz-ID-Wert zugewiesen wird und sie somit zusammengruppiert werden. Das Speichersystem verwendet den Sequenz-ID-Wert, um Vorauslesenachrichten zu erkennen und herauszufiltern, die obsolet sind, wenn sie durch das Speichersystem empfangen werden, da sich die Client-Anwendung bereits weiterbewegt hat, um ein anderes Speichersegment zu lesen. Allgemein wird eine Nachricht verworfen, wenn ihr Sequenz-ID-Wert älter als der jüngste bereits vom Speichersystem zur Kenntnis genommene Wert ist.
  • Im Falle, dass die Realisierung des Vorauslesemechanismus des Client-Agenten in jeder Iteration ein Erzeugen einer Vorausleseanfrage beinhaltet, die alle Daten umfasst, die für das Laden in seinen Vorauslese-Cachespeicher erforderlich sind, und dabei zuvor ausgegebene Vorausleseanfragen oder Antworten auf Vorausleseanfragen, die momentan erzeugt oder gesendet werden, nicht berücksichtigt, ermöglichen es die Mechanismen der veranschaulichten Ausführungsformen dem Speichersystem, solche Vorausleseanfragen effizient zu verarbeiten. Das Verwenden eines solches Ansatzes für die Realisierung des Client-Agenten vereinfacht dessen Realisierung und ermöglicht es schließlich dem Speichersystem, sicherzustellen, dass über seine Vorauslesemechanismen auf die Speichereinheiten angewandte Lesezugriffe im Hinblick auf Ihre Versätze praktisch serialisiert werden und damit die Wirksamkeit der durch das Speichersystem verwendeten Vorauslesemechanismen verbessert wird. Bei diesem Ansatz können sich die durch den Client-Agenten erzeugten Vorausleseanfragen in ihren Datenbereichen überlappen, wodurch wiederum das Speichersystem Vorausleseanfragen auch auf der Grundlage ihrer angeforderten Datenbereiche filtern und modifizieren muss.
  • Im Verlauf der folgenden Beschreibung wird eine einem Ausführungsstrang in der Client-Anwendung zugehörige Lesesitzung als eine Client-Anwendungs-Lesesitzung bezeichnet. Entsprechend den Mechanismen der veranschaulichten Ausführungsformen unterhält das Speichersystem (zusätzlich zum unterhaltenen Sequenz-ID-Wert) für jede Client-Anwendungs-Lesesitzung den weitesten Versatz, den es im gelesenen Datensegment verarbeitet hat. Allgemein wird eine eingehende Nachricht durch das Speichersystem verworfen, wenn der durch die Nachricht angegebene Sequenz-ID-Wert der Leseanfrage dem unterhaltenen Sequenz-ID-Wert entspricht und der Endversatz der empfangenen Leseanfrage kleiner oder gleich dem unterhaltenen weitesten Versatz ist. Wenn die Sequenz-ID-Werte gleich sind und der Endversatz der Leseanfrage größer als der weiteste Versatz ist, wird der weiteste Versatz in den Endversatz der Leseanfrage geändert und der zu lesende und an den Client-Agenten zu sendende Datenbereich als der Bereich berechnet, der mit dem vorherigen Wert des weitesten Versatzes plus ein Byte beginnt und beim neuen Wert des weitesten Versatzes endet.
  • Das Speichersystem unterhält einen Vorauslese-Cachespeicher für jede Client-Anwendungs-Lesesitzung und verwendet die eingehenden und unterhaltenen Werte der Sequenz-ID, um die in den Vorauslese-Cachespeicher zu ladenden Dateninhalte zu ermitteln. Der den Vorauslese-Cachespeicher ausbildende physische Puffer ist logisch in zwei Puffer geteilt, die bezüglich ihrer zugehörigen Versätze in den Daten stets logisch fortlaufend sind. Jeder der logischen Puffer kann ungeachtet seiner Gestaltung im physischen Puffer bezüglich seiner Versätze in den Daten den ersten logischen Puffer bilden, und dann handelt es sich bei dem anderen Puffer um den zweiten logischen Puffer. Der Dateninhalt in den Puffern schreitet entsprechend der Art und Weise voran, in der die Leseanfragen der Client-Anwendungs-Lesesitzung voranschreiten. Die Dateninhalte der Puffer können sich im gelesenen Datensegment nur vorwärts bewegen und werden nicht zurückverfolgt. Das Voranschreiten wird durch Überschreiten eines Schwellenwerts der Anzahl von Leseanfragen ausgelöst, deren Endversätze einen Schwellenversatz im zweiten logischen Puffer überschreiten, wobei der letztere Versatz auf der Grundlage eines prozentualen Anteils des durch den zweiten logischen Puffers abgedeckten Datenbereichs definiert ist. Bei Aktivierung eines solchen Voranschreitens wird der Startversatz des ersten logischen Puffers als der Endversatz des zweiten logischen Puffers plus ein Byte festgelegt, und dann werden Daten in den neu definierten zweiten logischen Puffer geladen.
  • Beim Verarbeiten einer eingehenden Leseanfrage werden die Dateninhalte in beiden logischen Puffern als ein kohärentes Datensegment in einem einzigen Puffer behandelt. In einer Ausführungsform wird eine eingehende Leseanfrage unter Verwendung des folgenden, sogleich kurz beschriebenen Verfahrens verarbeitet. Solange durch eine Client-Anwendungs-Lesesitzung ein sequenzieller Lesestrom aufrecht erhalten wird, der durch Beobachten der eingehenden und vorhandenen Werte der Sequenz-ID abgeleitet wird, wird der Ort des Puffers im gelesenen Datensegment nur unter Verwendung des vorstehend ausführlich beschriebenen Verfahrens geändert, und Leseanfragen werden entweder aus dem Inhalt des Pufferspeichers verarbeitet oder aus der Speichereinheit abgerufen (falls die Daten, auf die sie sich beziehen, nicht vollständig im Puffer enthalten sind). Wenn ein neuer sequenzieller Lesestrom erkannt wird, was wiederum durch Beobachten der eingehenden und der vorhandenen Werte der Sequenz-ID abgeleitet wird, wird der Ort des Puffers im gelesenen Datensegment auf der Grundlage des Versatzes der eingehenden Leseanfrage geändert und die angeforderten Daten werden aus dem Puffer bereitgestellt.
  • Beim Prozess des Sendens der durch eine Leseoperation angeforderten Daten an den Client-Agenten teilt das Speichersystem die zurückgegebenen Daten in mehrere sich nicht überlappende Segmente und sendet jedes Segment in einer separaten Netzwerknachricht. Das Speichersystem sendet diese Antwortnachrichten gleichzeitig durch mehrere Ausführungsstränge und unter Verwendung mehrerer Netzwerkverbindungen (d. h. jede Antwortnachricht wird unter Umständen mittels einer anderen Netzwerkverbindung gesendet), wodurch die Antwortnachrichten gleichmäßig über Netzwerkverbindungen verteilt werden. Aufgrund dieses Verfahrens wird die Nutzung der Netzwerkbandbreite zwischen dem Speichersystem und dem Client-Agenten deutlich verbessert. Der Client-Agent sammelt die durch das Speichersystem gesendeten Antwortnachrichten und bildet die Daten der Lese- und Vorausleseanfragen aus den in den Antwortnachrichten übermittelten Datensegmenten. Da bei Verwendung des vorstehenden Verfahrens die Netzwerkbandbreite besser genutzt wird, wird die Gesamtleseleistung erhöht.
  • Durch den Client-Agenten erzeugte Vorauslesenachrichten können obsolet werden, wenn eine Client-Anwendungs-Lesesitzung zum Lesen eines anderen Speichersegments weiterschreitet und falls diese Nachrichten beim Speichersystem empfangen werden, nachdem durch das Speichersystem bereits dem nächsten Segment zugehörige Daten verarbeitet wurden. Entsprechend den Mechanismen der veranschaulichten Ausführungsformen können solche Nachrichten beim Speichersystem unter Verwendung der folgenden Verfahrensweise herausgefiltert werden.
  • Jede vom Client-Agenten an das Speichersystem gesendete Lese- und Vorauslesenachricht übermittelt einen Sequenz-ID-Wert, der Lesenachrichten in einer bestimmte Lesesequenz gruppiert, so dass allen Lese- und Vorausleseanfragen, die ein bestimmtes Speichersegment betreffen, das durch einen Ausführungsstrang in der Client-Anwendung sequenziell gelesen wird, derselbe eindeutige Sequenz-ID-Wert zugewiesen wird und sie somit zusammengruppiert werden. Zwischen den Sequenz-ID-Werten besteht eine Ordnungsbeziehung. Sequenz-ID-Werte werden durch den Client-Agenten für jede Client-Anwendungs-Lesesitzung unabhängig erzeugt und ermöglichen es, die unterschiedlichen Speichersegmente zu ermitteln, die durch die Sitzung sequenziell gelesen werden. Lese- und Vorausleseanfragen sind einem bestimmten Sequenz-ID-Wert zugeordnet, solange der Sequenz-ID-Wert nicht auf der Grundlage der als Nächstes beschriebenen Client-Agenten-Logik geändert wird.
  • In einer Ausführungsform erzeugt der Client-Agent in den folgenden Fällen einen neuen Sequenz-ID-Wert für eine Client-Anwendungs-Lesesitzung: (1) es gibt keinen vorherigen Sequenz-ID-Wert für die Sitzung, oder (2) durch die Sitzung wird ein neuer sequenzieller Lesefluss initiiert. In einer Ausführungsform kann ein neuer sequenzieller Lesefluss erkannt werden, indem eine Lücke im aktuellen Lesefluss (entweder eine Vorwärtslücke oder eine Rückwärtslücke) beobachtet wird, wie in 2 folgende beispielhaft verdeutlicht. Insbesondere besteht eine Lücke, wenn die Differenz zwischen dem Startversatz der neuen Leseanfrage und dem Endversatz der jüngsten Leseanfrage nicht genau ein einziges Byte beträgt (diese Differenz kann positiv oder negativ sein). Durch Beobachten einer Bewegung der Lesesitzung, um eine andere Dateneinheit im Speicher zu lesen (z. B. eine andere unabhängige Datei), wird auch ein neuer sequenzieller Lesefluss erkannt. Ein solches Ereignis wird erkannt, indem beobachtet wird, dass die Sitzung eine neue Speichereinheitenkennung verwendet.
  • 2 zeigt einen beispielhaften Bereich 50 in einem bestimmten gelesenen Datensegment, um Lücken im sequenziellen Lesefluss zu veranschaulichen. Der Datenbereich der nächsten Leseanfrage ist beispielhaft so dargestellt, dass er dem Datenbereich der jüngsten Leseanfrage 56 entweder vorausgeht 54 oder nachfolgt 60. Im ersten Fall erzeugen die Leseanfragen eine Rückwärtslücke 52, und im zweiten Fall erzeugen die Leseanfragen eine Vorwärtslücke 58.
  • Unter Bezugnahme auf 3 wird nun ein beispielhaftes Verfahren 70 zum Verarbeiten von Leseanfragen durch das Speichersystem veranschaulicht, bei dem Vorausleselogik angewandt wird und die eingehenden und unterhaltenen Sequenz-ID-Werte berücksichtigt werden. Für jede Client-Anwendungs-Lesesitzung wird durch das Speichersystem ein aktueller Sequenz-ID-Wert unterhalten. Der aktuelle Sequenz-ID-Wert wird als Nullwert initialisiert. Für eine neu empfangene, einer Client-Anwendungs-Lesesitzung zugehörige Leseanfrage (Schritt 74) gilt: wenn kein vorheriger Sequenz-ID-Wert für diese Sitzung vorhanden ist (Schritt 76) oder wenn der empfangene Sequenz-ID-Wert jünger als der unterhaltene Wert ist (Schritt 78), wird der unterhaltene Wert als der mit der neuen Leseanfrage gesendete Wert festgelegt (Schritt 80), und die Leseanfrage wird weiter verarbeitet (Schritt 82); wenn der empfangene Sequenz-ID-Wert dem unterhaltenen Wert entspricht (erneut Schritt 78), wird der unterhaltene Wert nicht geändert, und die Leseanfrage wird weiter verarbeitet (Schritt 82); und wenn der empfangene Sequenz-ID-Wert älter als der unterhaltene Wert ist (erneut Schritt 78), werden die zugehörige Leseanfrage und deren Sequenz-ID-Wert verworfen (Schritt 84). Dann endet das Verfahren 70 (Schritt 86).
  • In einer Ausführungsform unterhält der Client-Agent einen Vorauslese-Cachespeicher für jede Client-Anwendungs-Lesesitzung, um durch die Sitzung ausgegebene Leseanfragen effizient zu verarbeiten. Der Client-Agent erzeugt Vorausleseanfragen, um Daten in seinen Vorauslese-Cachespeicher zu laden. Diese Anfragen werden auf asynchrone Weise (im Hintergrund) erzeugt und deren Antworten vom Speichersystem in ebensolcher Weise verarbeitet.
  • In einer möglichen Ausführungsform hält der Client-Agent den weitesten Versatz fest, bis zu dem er Vorausleseanfragen ausgegeben hat und erzeugt zusätzliche, über diesen Versatz hinausgehende Vorausleseanfragen. In dieser Ausführungsform werden sich solche Vorausleseanfragen in ihren Datenbereichen nicht überlappen, und daher verarbeitet das Speichersystem die eingehenden Leseanfragen entsprechend ihren Bereichen und muss Leseanfragen nicht aufgrund von überlappenden Bereichen filtern oder modifizieren.
  • In einer anderen alternativen Ausführungsform erzeugt der Client-Agent in jeder Iteration eine Vorausleseanfrage, die alle für das Laden in seinen Vorauslese-Cachespeicher erforderlichen Daten abdeckt, wobei zuvor ausgegebene Vorausleseanfragen oder Antworten auf Vorausleseanfragen, die momentan erzeugt oder gesendet werden, nicht berücksichtigt werden. Dieser Ansatz vereinfacht die Realisierung des Client-Agenten und führt zu durch den Client-Agenten erzeugten Vorausleseanfragen, die sich in ihren Datenbereichen überlappen können. Dadurch muss das Speichersystem eingehende Leseanfragen zudem auf der Grundlage ihrer angeforderten Datenbereiche filtern und modifizieren. Als ein Ergebnis dieser Vorgehensweise kann das Speichersystem, sicherstellen, dass über seine Vorauslesemechanismen auf die Speichereinheiten angewandte Lesezugriffe im Hinblick auf Ihre Versätze praktisch serialisiert werden und damit die Wirksamkeit der durch das Speichersystem verwendeten Vorauslesemechanismen verbessert wird. Bei diesem Ansatz filtert und modifiziert das Speichersystem Anfragen mithilfe der folgenden Vorgehensweise wie in 4 folgende veranschaulicht.
  • 4 veranschaulicht ein beispielhaftes Verfahren 90 zum Verarbeiten von Leseanfragen durch das Speichersystem unter Berücksichtigung eingehender und unterhaltener Sequenz-ID-Werte und weitester Versatzwerte. Das Speichersystem unterhält für jede Client-Anwendungs-Lesesitzung den aktuellen weitesten Versatz, den es im gelesenen Datensegment verarbeitet hat. Dieser Wert wird auf Null initialisiert. Dieser Wert wird zusätzlich zum unterhaltenen Sequenz-ID-Wert unterhalten. Wenn für eine neue von einer Client-Anwendungs-Lesesitzung empfangene Leseanfrage (Schritt 94) der Sequenz-ID-Wert der Leseanfrage dem unterhaltenen Sequenz-ID-Wert entspricht (Schritt 98), gilt: Wenn der Endversatz der Leseanfrage kleiner oder gleich dem weitesten Versatz ist (Schritt 100), wird die Anfrage verworfen (da der angeforderte Bereich bereits verarbeitet und an den Client-Agenten gesendet wurde) (Schritt 108). Wenn der Endversatz der Leseanfrage größer als der weiteste Versatz ist (erneut Schritt 100), wird der weiteste Versatz in den Endversatz der Leseanfrage geändert (Schritt 102) und der zu lesende und an den Client-Agenten zu sendende Datenbereich wird als der Bereich berechnet, der mit dem vorherigen Wert des weitesten Versatzes plus ein Byte beginnt und beim neuen Wert des weitesten Versatzes endet (Schritt 104). Diese Berechnung 120 ist in 5 folgende gezeigt, worin sich für einen beispielhaften Datenbereich 122 einer Leseanfrage mit einem Startversatz 124 und einem Endversatz 132 sowie einem vorherigen Wert des weitesten Versatzes 126 ein aktualisierter Datenbereich 128 der Leseanfrage ergibt, der beim neuen Wert des weitesten Versatzes 130 endet.
  • Wenn der Sequenz-ID-Wert der Leseanfrage größer als der unterhaltene Sequenz-ID-Wert ist (erneut Schritt 98) oder wenn kein vorheriger Sequenz-ID-Wert für diese Sitzung vorhanden ist (Schritt 96), wird der unterhaltene Sequenz-ID-Wert als der mit der neuen Leseanfrage gesendete Wert festgelegt (Schritt 110), der weiteste Versatz wird als der Endversatz der neuen Leseanfrage festgelegt (Schritt 112) und die Leseanfrage wird ohne Modifizierung an ihrem Bereich weiter verarbeitet (Schritt 106). Wenn der Sequenz-ID-Wert der Leseanfrage kleiner als der unterhaltene Wert ist (erneut Schritt 98), werden die zugehörige Leseanfrage und deren Sequenz-ID-Wert verworfen (erneut Schritt 108). Dann endet das Verfahren 90 (Schritt 114).
  • In einer Ausführungsform unterhält das Speichersystem einen Vorauslese-Cachespeicher für jede Client-Anwendungs-Lesesitzung. Beim Folgenden handelt es sich um eine beispielhafte Verfahrensweise zum Ermitteln der in den Vorauslese-Cachespeicher zu ladenden Dateninhalte und der Verwendung des Cachespeichers zum Verarbeiten von Leseanfragen. Der den Vorauslese-Cachespeicher ausbildende physische Puffer ist logisch in zwei Puffer geteilt, deren Dateninhalt unter Verwendung von Folgendem ermittelt wird. Die zwei Puffer sind bezüglich ihrer zugehörigen Versätze in den Daten stets logisch sequenziell. Insbesondere beginnt der Startversatz des zweiten logischen Puffers stets ein Byte nach dem Endversatz des ersten logischen Puffers. Jeder der logischen Puffer kann ungeachtet seiner Gestaltung im physischen Puffer bezüglich seiner Versätze in den Daten den ersten logischen Puffer bilden, und dann handelt es sich bei dem anderen Puffer um den zweiten logischen Puffer. Diese Aufteilung 140, 150 eines beispielhaften Datensegments 148, 158 ist in 6 und 7 folgende als Fall (A) bzw. Fall (B) veranschaulicht. Der physische Puffer 142, 152 ist wie gezeigt in einen ersten und einen zweiten logischen Puffer 144, 146 und 154, 156 aufgeteilt.
  • Wenn beide logische Puffer bei der Initiierung leer sind und wenn die erste Leseanfrage in einer Client-Anwendungs-Lesesitzung verarbeitet wird, kann die folgende beispielhafte Verfahrensweise angewandt werden. Der Startversatz eines Puffers (z. B. des Puffers, der im physischen Puffer physisch der erste ist) wird als der Startversatz der Leseanfrage festgelegt. Der Startversatz des anderen Puffers wird als der Endversatz des ersten Pufferspeichers plus ein Byte festgelegt. Der in die Puffer zu ladende Datenumfang entspricht deren Gesamtgröße (d. h. der Größe der physischen Puffer). Daten werden in beide Puffer geladen (allgemein mit einer einzigen Leseoperation an die Speichereinheit). Die eingehende Leseanfrage wird aus den Puffern bedient.
  • Die Dateninhalte in den Puffern können entsprechend der Art und Weise voranschreiten, in der die Leseanfragen der Client-Anwendungs-Lesesitzung voranschreiten, indem zum Beispiel die folgende Verfahrensweise verwendet wird. Das Voranschreiten der Dateninhalte in den Puffern erfolgt durch Festlegen des Startversatzes des ersten logischen Puffers als der Endversatz des zweiten logischen Puffers plus ein Byte. Dadurch wird zwischen dem ersten und dem zweiten Puffer gewechselt. Dann werden Daten in den momentanen zweiten logischen Puffer geladen (bei dem es sich um den vorherigen ersten logischen Puffer handelt).
  • Der Auslöser für das Voranschreiten der Dateninhalte der Puffer mithilfe der vorstehend angegebenen beispielhaften Verfahrensweise liegt darin, dass die Anzahl von Leseanfragen, deren Endversätze einen Schwellenversatz überschreiten, einen Schwellenwert der Anzahl solcher Leseanfragen überschreitet. Der Versatzschwellenwert wird neu berechnet, wann immer sich die Dateninhalte der logischen Puffer ändern (d. h. der erste und der zweite logische Puffer gewechselt werden), und sein Wert ist mit einem prozentualen Anteil des durch den zweiten logischen Puffers abgedeckten Datenbereichs korreliert. Bei unserem Verfahren beträgt dieser prozentuale Anteil 50%, was impliziert, dass die Dateninhalte des ersten logischen Puffers eine geringe Wahrscheinlichkeit für weiteren Zugriff aufweisen, wenn Leseanfragen beginnen, sich auf die zweite Hälfte des logischen Puffers zu beziehen, und daher der erste logische Puffer vorwärts rückt und zum zweiten logischen Puffer wird. In einer Ausführungsform beträgt der Schwellenwert für die Anzahl solcher Leseanfragen zwei. Diese Schwellenwerte 166 und die Bedingung (z. B. mehr als zwei Leseanfragen 162, deren Endversätze den Versatzschwellenwert 164 überschreiten) für das Auslösen eines Voranschreitens der Dateninhalte der Puffer 168, 170 sind für ein beispielhaftes Datensegment 172 in 8 folgende wie gezeigt veranschaulicht.
  • Beim Prozess des Voranschreitens der Dateninhalte der Puffer erfolgt das Laden von Daten in den neu definierten zweiten Puffer in einem relativ zur Verarbeitung der Leseanfragen asynchronen (Hintergrund-)Prozess. Falls eine Leseanfrage auf die Daten zugreifen muss, die sich gerade im Prozess des Geladenwerdens in den zweiten logischen Puffer befinden, wird diese Leseanfrage (mittels eines Synchronisierungsmechanismus) gesperrt, bis die Daten in den zweiten logischen Puffer geladen und dort verfügbar sind.
  • Beim Verarbeiten einer eingehenden Leseanfrage werden die Dateninhalte in beiden logischen Puffern als ein kohärentes Datensegment in einem einzigen Cachespeicherpuffer behandelt. Eine eingehende Leseanfrage kann einer Ausführungsform mithilfe des folgenden Verfahrens 180 verarbeitet werden, das in 9 folgende gezeigt ist. Das Verfahren 180 beginnt (Schritt 182) mit dem Empfang einer Leseanfrage (Schritt 184). Wenn der Cachespeicherpuffer leer ist (Schritt 186), werden Daten mithilfe der zuvor beschriebenen Verfahrensweise in beide logische Puffer geladen (Schritt 188), und die Daten für die Leseanfrage werden aus dem Cachespeicherpuffer bereitgestellt (Schritt 196).
  • Wenn der Cachespeicherpuffer nicht leer ist (erneut Schritt 186) und wenn der Start- und der Endversatz der Leseanfrage innerhalb der Versätze des Cachespeicherpuffers liegen (Schritt 190), werden die Daten für die Leseanfrage aus dem Cachespeicherpuffer bereitgestellt (erneut Schritt 196). Wenn die Sequenz-ID der Leseanfrage größer als die aktuelle Sequenz-ID ist (Schritt 192), wird ein Flag gesetzt, das angibt, dass der Cachespeicherpuffer bei der ersten nachfolgenden Leseanfrage, die den Bereich des Cachespeicherpuffers überschreitet, zurückgesetzt wird (wie im Folgenden angegeben). Die aktuelle Sequenz-ID wird auf die Sequenz-ID dieser Leseanfrage festgelegt (Schritt 194). Wenn die Sequenz-ID der Leseanfrage kleiner als die aktuelle Sequenz-ID ist (erneut Schritt 192), wurde diese Leseanfrage bereits durch das zuvor beschriebene Abtasten der Sequenz-ID verworfen.
  • Wenn der Cachespeicherpuffer nicht leer ist (erneut Schritt 186) und wenn die Versätze der Leseanfrage die Versätze des Cachespeicherpuffers überschreiten (erneut Schritt 190) und wenn die Sequenz-ID der Leseanfrage der aktuellen Sequenz-ID entspricht und das Flag, das ein Zurücksetzen des Cachespeicherpuffers anzeigt, nicht gesetzt ist (was anzeigt, dass es sich nach wie vor um denselben sequenziellen Lesestrom handelt) (Schritt 198), werden die Daten, auf die sich die Leseanfrage bezieht, mit folgenden Ausnahmen allgemein aus der Speichereinheit abgerufen. (1) Wenn ein Teil der Daten, auf die sich die Leseanfrage bezieht, im Cachespeicherpuffer vorhanden ist, kann dieser Teil aus dem Cachespeicherpuffer bereitgestellt werden, und (2) wenn die aktuelle Leseanfrage eine Modifikation in den Dateninhalten des Cachespeicherpuffers ausgelöst hat oder wenn eine derartige Modifikation bereits unterwegs ist und wenn ihre referenzierten Daten in den modifizierten Dateninhalten des Cachespeicherpuffers vorhanden sein werden, kann diese Leseanfrage gesperrt werden, bis die aktualisierten Dateninhalte des Cachespeicherpuffers geladen sind (Schritt 200). Das Vorstehende impliziert, dass Leseanfragen, die hinter den Dateninhalt des Cachespeicherpuffers fallen, aus der Speichereinheit abgerufen werden (insbesondere wird deren Teil abgerufen, der nicht im Cachespeicherpuffer vorhanden ist), und niemals auf eine Modifizierung in den Inhalten des Cachespeicherpuffers warten (der immer weiterrückt).
  • Wenn die Sequenz-ID der Leseanfrage größer als die aktuelle Sequenz-ID ist oder das ein Zurücksetzen des Cachespeicherpuffers anzeigende Flag gesetzt ist (was anzeigt, dass es sich hierbei um einen neuen Lesestrom handelt) (Schritt 198), werden die Dateninhalte des Cachespeicherpuffers mithilfe der folgenden Verfahrensweise aktualisiert. Der Startversatz eines logischen Puffers wird als der Startversatz der Leseanfrage festgelegt; der Startversatz des anderen logischen Puffers wird als der Endversatz des ersten logischen Puffers plus ein Byte festgelegt; der Umfang für das Lesen in die Puffer entspricht deren Gesamtgröße; und dann werden Daten (unter Verwendung einer einzigen Leseanfrage an die Speichereinheit) in den Cachespeicherpuffer geladen (Schritt 202). Das ein Zurücksetzen des Cachespeicherpuffers anzeigende Flag wird zurückgenommen (erneut Schritt 202). Die Leseanfrage wird aus dem Cachespeicherpuffer bedient (Schritt 196). Wenn schließlich die Sequenz-ID der Leseanfrage kleiner als die aktuelle Sequenz-ID ist, wird die Nachricht bei Empfang durch die Vorverarbeitung herausgefiltert (zuvor beschrieben). Dann endet das Verfahren 180 (Schritt 204).
  • Beim Prozess des Sendens der durch eine Leseoperation angeforderten Daten an den Client-Agenten teilt das Speichersystem die zurückgegebenen Daten in mehrere sich nicht überlappende Segmente und sendet jedes Segment in einer separaten Netzwerknachricht. Das Speichersystem sendet diese Antwortnachrichten gleichzeitig durch mehrere Ausführungsstränge und unter Verwendung mehrerer Netzwerkverbindungen (d. h. jede Antwortnachricht wird unter Umständen mittels einer anderen Netzwerkverbindung gesendet), wodurch die Antwortnachrichten gleichmäßig über Netzwerkverbindungen verteilt werden. Als Ergebnis wird die Nutzung der Netzwerkbandbreite zwischen dem Speichersystem und dem Client-Agenten deutlich verbessert. Der Client-Agent sammelt die durch das Speichersystem gesendeten Antwortnachrichten und bildet die Daten der Lese- und Vorausleseanfragen aus den in den Antwortnachrichten übermittelten Datensegmenten. Da unter Verwendung der vorstehenden Mechanismen die Netzwerkbandbreite besser genutzt wird, wird die Gesamtleseleistung erhöht.
  • 10 veranschaulicht beispielhafte Hardware 250, die so eingerichtet ist, dass sie Aspekte des nachfolgenden beanspruchten Gegenstandes realisiert. In der abgebildeten Ausführungsform ist ein beispielhafter Teil 252 der Architektur 10 (1) veranschaulicht. Der Teil 252 der Architektur 10 ist als Teil einer Computerumgebung betreibbar, in der Mechanismen der vorhergehenden veranschaulichten Ausführungsformen realisiert werden können. Es ist jedoch zu beachten, dass 10 nur beispielhaft ist und nicht beabsichtigt ist, Aussagen zu machen oder Einschränkungen betreffend bestimmte Architekturen mit sich zu bringen, in denen die beispielhaften Aspekte der verschiedenen Ausführungsformen realisiert werden können. Viele Modifikationen können an der in 10 abgebildeten Architektur vorgenommen werden, ohne vom Umfang der folgenden Beschreibung und des beanspruchten Gegenstands abzuweichen.
  • Der Teil 252 beinhaltet einen Prozessor 254 und einen Arbeitsspeicher 256, wie beispielsweise einen Speicher mit wahlfreiem Zugriff (RAM). Der Teil 252 kann funktionell mit mehreren zum Zwecke der Bequemlichkeit nicht abgebildeten Komponenten verbunden sein, wozu eine Anzeige, die Abbildungen wie beispielsweise Fenster für einen Benutzer auf einer grafischen Benutzeroberfläche darstellt, eine Tastatur, eine Maus, ein Drucker und Ähnliches zählen. Natürlich erkennt der Fachmann, dass jede Kombination der vorgenannten Komponenten oder jede Anzahl anderer Komponenten, Peripheriegeräte und anderer Einheiten bei dem Teil 252 verwendet werden können.
  • In der veranschaulichten Ausführungsform arbeitet der Teil 252 unter der Kontrolle eines im Arbeitsspeicher 256 gespeicherten Betriebssystems (operating system OS) 258 (z. B. z/OS, OS/2, LINUX, UNIX, WINDOWS, MAC OS) und bildet eine Schnittstelle zum Benutzer, um Eingaben und Befehle anzunehmen und Ergebnisse darzustellen. In einer Ausführungsform der vorliegenden Erfindung erleichtert das OS 258 die Vorauslesefunktionalität gemäß der vorliegenden Erfindung. Hierzu enthält das OS 258 ein Vorauslesemodul 264, das so eingerichtet sein kann, dass in den beispielhaften Verfahren vielfältige in den vorhergehenden veranschaulichten Ausführungsformen beschriebene Prozesse und Mechanismen ausgeführt werden können.
  • Der Teil 252 kann einen Kompilierer 262 realisieren, mit dem ein in einer Programmiersprache wie beispielsweise COBOL, PL/1, C, C++, JAVA, ADA, BASIC, VISUAL BASIC oder jeder anderen Programmiersprache geschriebenes Anwendungsprogramm 260 in Code übersetzt werden kann, der durch den Prozessor 254 lesbar ist. Nach der Durchführung greift das Anwendungsprogramm 260 auf im Arbeitsspeicher 256 des Teils 252 gespeicherte Daten zu und manipuliert sie unter Verwendung der Beziehungen und Logik, die mithilfe des Kompilierers 262 erzeugt wurde.
  • In einer Ausführungsform sind das Betriebssystem 258, das Anwendungsprogramm 260 und den Kompilierer 262 realisierende Anweisungen gegenständlich in einem computerlesbaren Medium ausgebildet, zu dem ein oder mehrere fest eingebaute oder Wechseldatenspeichereinheiten wie beispielsweise ein Zip-Laufwerk, eine Diskette, ein Festplattenlaufwerk, eine DVD/CD-ROM, Digitalband, Halbleiterlaufwerke (solid state drives, SSDs) usw. zählen können. Weiterhin können das Betriebssystem 258 und das Anwendungsprogramm 260 Anweisungen aufweisen, die bei Lesen und Ausführen durch den Teil 252 den Teil 252 veranlassen, die zum Realisieren und/oder Verwenden der vorliegenden Erfindung notwendigen Schritte durchzuführen. Anweisungen des Anwendungsprogramms 260 und/oder des Betriebssystems 258 können zudem gegenständlich im Hauptspeicher 256 ausgebildet sein. Insofern sollen die Begriffe „Herstellungsartikel”, „Programmspeichereinheit” und „Computerprogrammprodukt”, wie sie hierin verwendet sein können, ein von jeder computerlesbaren Einheit oder jedem computerlesbarem Medium aus zugängliches und/oder betreibbares Computerprogramm einschließen.
  • Ausführungsformen der vorliegenden Erfindung können ein oder mehrere zugehörige Softwareanwendungsprogramme 260 beinhalten, die zum Beispiel Funktionen zum Verwalten eines verteilten Computersystems enthalten, das ein Netzwerk von Computereinheiten, wie beispielsweise ein Speicherbereichsnetzwerk (storage area network (SAN)) aufweist. Dementsprechend kann ein Prozessor 254 einen oder mehrere Speicherverwaltungsprozessoren (storage management processors (SMPs)) aufweisen. Das Anwendungsprogramm 260 kann innerhalb eines einzelnen Computers oder als Teil eines verteilten Computersystems arbeiten, das ein Netzwerk von Computereinheiten aufweist. Das Netzwerk kann einen oder mehrere Computer einschließen, die über ein lokales Netz und/oder eine Internetverbindung (die öffentlich oder sicher sein kann, z. B. über eine Verbindung eines virtuellen privaten Netzwerks (virtual private network (VPN)) oder über ein Fibre-Channel-SAN oder andere bekannte Netzwerktypen verbunden sind, wie für den Fachmann verständlich ist.
  • Wie für den Fachmann ersichtlich ist, können Aspekte der vorliegenden Erfindung als System, Verfahren, oder Computerprogrammprodukt ausgebildet werden. Dementsprechend können Aspekte der vorliegenden Erfindung in Form einer vollständigen Hardwareausführungsform, einer vollständigen Softwareausführungsform (darunter Firmware, residente Software, Mikrocode usw.) oder in einer Ausführungsform ausgebildet werden, die Software- und Hardwareaspekte kombiniert, was hierin sämtlich allgemein als „Schaltung”, „Modul” oder „System” bezeichnet sein kann. Weiterhin können Aspekte der vorliegenden Erfindung in Form eines Computerprogrammprodukts ausgebildet werden, das in einem oder mehreren computerlesbaren Medien mit darauf befindlichem computerlesbarem Programmcode enthalten sein kann.
  • Jede beliebige Kombination aus einem oder mehreren computerlesbaren Medien kann verwendet werden. Bei dem computerlesbaren Medium kann es sich um ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium handeln. Bei einem computerlesbaren Speichermedium kann es sich zum Beispiel, ohne darauf beschränkt zu sein, um ein System, eine Vorrichtung oder eine Einheit elektronischer, magnetischer, optischer, elektromagnetischer, Infrarot oder Halbleiter verwendender Art sowie jede beliebige geeignete Kombination des Vorgenannten handeln. Zu spezielleren Beispielen für das computerlesbare Speichermedium kann Folgendes gehören (nicht erschöpfende Liste): eine elektrische Verbindung mit einer oder mehreren Leitungen, eine transportable Computerdiskette, eine Festplatte, ein Speicher mit wahlfreiem Zugriff (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein transportabler Compact-Disk-Nur-Lese-Speicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder eine beliebige geeignete Kombination des Vorgenannten. Im Kontext dieses Dokuments kann es sich bei einem computerlesbaren Speichermedium um jedes gegenständliche Medium handeln, das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Ausführung von Anweisungen beinhalten oder speichern kann.
  • Der in einem computerlesbaren Medium ausgebildete Programmcode kann mittels jedes beliebigen geeigneten Mediums übertragen werden, darunter, jedoch nicht beschränkt auf, kabellose, kabelgebundene, Lichtwellenleiterkabel, Hochfrequenz (HF) usw. oder eine beliebige geeignete Kombination des Vorgenannten. Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in jeder Kombination einer oder mehrerer Programmiersprachen, darunter eine objektorientierte Programmiersprache wie Java, Smalltalk, C++ oder Ähnliches und herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C” oder ähnliche Programmiersprachen, geschrieben sein. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In letzterem Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jede beliebige Art von Netzwerk, darunter ein lokales Netz (local area network (LAN)) oder ein Weitverkehrsnetz (wide area network (WAN)) verbunden sein, oder es kann eine Verbindung zu einem externen Computer (zum Beispiel mittels eines Internetdienstanbieters über das Internet) hergestellt werden.
  • Aspekte der vorliegenden Erfindung wurden vorstehend unter Bezugnahme auf Abbildungen von Ablaufplänen und/oder Blockschaubildern von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Abbildungen von Ablaufplänen und/oder der Blockschaubilder sowie Kombinationen von Blöcken in den Abbildungen von Ablaufplänen und/oder den Blockschaubildern durch Computerprogrammanweisungen realisiert werden kann. Diese Computerprogrammanweisungen können einem Prozessor eines universellen Computers, eines zweckbestimmten Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine so zu erzeugen, dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, Mittel zum Realisieren der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubildes angegebenen Funktionen/Handlungen erzeugen.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert sein, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten anweisen kann, auf eine bestimmte Weise zu funktionieren, so dass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Herstellungsartikel einschließlich Anweisungen erzeugen, welche die im Block oder in den Blöcken des Ablaufplans und/oder des Blockschaubildes angegebene Funktion/Handlung ausführen. Die Computerprogrammanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten geladen werden, um eine Reihe von auf dem Computer, der anderen programmierbaren Vorrichtung oder den anderen Einheiten auszuführenden Operationsschritten hervorzurufen, um einen auf dem Computer realisierten Prozess so zu erzeugen, dass die auf dem Computer oder der anderen programmierbaren Vorrichtung ausgeführten Anweisungen Prozesse zum Realisieren der im Block oder in den Blöcken des Ablaufplans und/oder Blockschaubildes angegebenen Funktionen/Handlungen bereitstellen.
  • Der Ablaufplan und die Blockschaubilder in den vorstehenden Figuren veranschaulichen die Architektur, Funktionalität und die Arbeitsweise möglicher Realisierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß vielfältigen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block im Ablaufplan oder den Blockschaubildern für ein Modul, ein Segment oder einen Codeabschnitt stehen, der eine oder mehrere ausführbare Anweisungen zum Realisieren der angegebenen logischen Funktion(en) aufweist. Es soll zudem angemerkt werden, dass bei einigen alternativen Realisierungen die im Block angegebenen Funktionen in anderer Reihenfolge als der in den Figuren angegebenen auftreten können. Zum Beispiel können zwei aufeinander folgend abgebildete Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal abhängig von der betreffenden Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es wird ebenfalls angemerkt, dass jeder Block der Blockschaubilder und/oder Abbildung von Ablaufplänen und Kombinationen von Blöcken in den Blockschaubildern und/oder der Abbildung von Ablaufplänen durch zweckbestimmte hardwaregestützte Systeme oder Kombinationen von zweckbestimmter Hardware und Computeranweisungen realisiert werden kann, welche die angegebenen Funktionen oder Handlungen durchführen.
  • Obwohl eine oder mehrere Ausführungsformen der vorliegenden Erfindung detailliert dargestellt wurden, ist für den fähigen Handwerker offensichtlich, dass Änderungen und Anpassungen an diesen Ausführungsformen vorgenommen werden können, ohne vom Umfang der vorliegenden Erfindung abzuweichen, wie sie in den folgenden Ansprüchen dargelegt ist.

Claims (10)

  1. Verfahren für die Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur durch eine Prozessoreinheit, aufweisend: Gruppieren von Lesenachrichten durch eine Vielzahl eindeutiger Sequenzkennungen (IDs), wobei jede der Sequenz-IDs einer Lesesequenz entspricht, die Lese- und Vorausleseanfragen beinhaltet, die ein Speichersegment betreffen, das sequenziell durch einen Ausführungsstrang in einer Client-Anwendung gelesen wird; Verwenden der Sequenz-ID, um obsolete Lesenachrichten zu filtern, indem eine der obsoleten Lesenachrichten mit einer Sequenz-ID verworfen wird, von der ermittelt wurde, dass sie älter als eine unterhaltene Sequenz-ID ist; und Verwenden der Sequenz-IDs, um entsprechende in einen Vorauslese-Cachespeicher zu ladende Vorauslesedaten zu ermitteln.
  2. Verfahren nach Anspruch 1, wobei der Vorauslese-Cachespeicher logisch in vorausgehende und nachfolgende logisch sequenzielle Puffer für die Datenverarbeitung unterteilt ist, und weiterhin ein Laden der Vorauslesedaten in den nachfolgenden Puffer beginnend bei einem Versatz, der näherungsweise einer Kapazität des vorausgehenden Puffers entspricht, einschließt.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, weiterhin einschließend ein Initialisieren einer Client-Anwendungs-Lesesitzung zum Verarbeiten neuer Leseanfragen.
  4. Verfahren nach Anspruch 3, weiterhin einschließend im Falle, dass für die Lesesitzung keine vorherige Sequenz-ID vorhanden ist, ein Festlegen der unterhaltenen Sequenz-ID auf die empfangene Sequenz-ID.
  5. Verfahren nach Anspruch 3, weiterhin einschließend im Falle, dass ermittelt wird, dass die empfangene Sequenz-ID jünger als die unterhaltene Sequenz-ID ist, ein Festlegen eines unterhaltenen weitesten Versatzwertes als den Endversatz der neuen Leseanfrage.
  6. Verfahren nach Anspruch 3, weiterhin einschließend im Falle, dass ermittelt wird, dass die empfangene Sequenz-ID gleich der unterhaltenen Sequenz-ID ist, ein Verwerfen der neuen Leseanfrage, wenn ein Endversatz der neuen Leseanfrage entweder kleiner als oder gleich einem weitesten Versatz der neuen Leseanfrage ist.
  7. Verfahren nach Anspruch 6, weiterhin einschließend im Falle, dass ermittelt wird, dass die empfangene Sequenz-ID gleich der unterhaltenen Sequenz-ID ist, ein Festlegen eines zu lesenden Datenbereichs und Senden an einen Client-Agenten als einen Bereich, der mit einem vorherigen Wert des weitesten Versatzes plus ein Byte beginnt und bei einem neuen Wert des weitesten Versatzes endet.
  8. Verfahren nach Anspruch 3, wobei im Falle, dass ermittelt wird, dass der Vorauslese-Cachespeicher nicht leer ist, wenn die Vorauslesedaten geladen werden: wenn ein Start- und Endversatz der neuen Leseanfrage innerhalb von Versätzen des Vorauslese-Cachespeichers liegt und die empfangene Sequenz-ID der neuen Leseanfrage größer als die unterhaltene Sequenz-ID ist, ein Flag gesetzt wird, das ein Auftreten eines Zurücksetzen des Vorauslese-Cachespeichers bei einer ersten nachfolgenden Leseanfrage anzeigt, und wenn der Start- und Endversatz der neuen Leseanfrage die Versätze des Vorauslese-Cachespeichers überschreitet und die empfangene Sequenz-ID der neuen Leseanfrage gleich der unterhaltenen Sequenz-ID ist und das Flag nicht gesetzt ist, die Vorauslesedaten in den Vorauslese-Cachespeicher geladen werden, und wenn der Start- und Endversatz der neuen Leseanfrage die Versätze des Vorauslese-Cachespeichers überschreitet und eine der empfangenen Sequenz-IDs der neuen Leseanfrage die unterhaltene Sequenz-ID überschreitet und das Flag gesetzt ist, ein Startversatz entweder des nachfolgenden oder des vorausgehenden Puffers als der Startversatz der neuen Leseanfrage festgelegt wird, und der Startversatz des anderen der nachfolgenden oder vorausgehenden Puffer näherungsweise als der Endversatz des anderen der nachfolgenden oder vorausgehenden Puffer festgelegt wird.
  9. System für die Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur, aufweisend: mindestens eine Prozessoreinheit, die in der Client-Server-Architektur betreibbar ist, wobei die mindestens eine Prozessoreinheit so eingerichtet ist, dass das Verfahren von Schritten jedes vorhergehenden Anspruchs durchführbar ist.
  10. Computerprogrammprodukt für die Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur durch eine Prozessoreinheit, wobei das Computerprogrammprodukt ein computerlesbares Speichermedium mit darauf gespeicherten computerlesbaren Programmcodeabschnitten aufweist, wobei die computerlesbaren Programmcodeabschnitte bei Ausführen durch einen Computer die Verfahrensschritte eines der Ansprüche 1 bis 8 durchführen.
DE112011103276T 2010-12-01 2011-11-16 Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur Ceased DE112011103276T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/958,196 2010-12-01
US12/958,196 US20120144123A1 (en) 2010-12-01 2010-12-01 Read-ahead processing in networked client-server architecture
PCT/EP2011/070285 WO2012072418A1 (en) 2010-12-01 2011-11-16 Read-ahead processing in networked client-server architecture

Publications (1)

Publication Number Publication Date
DE112011103276T5 true DE112011103276T5 (de) 2013-07-18

Family

ID=44971039

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011103276T Ceased DE112011103276T5 (de) 2010-12-01 2011-11-16 Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur

Country Status (5)

Country Link
US (7) US20120144123A1 (de)
CN (1) CN103250141B (de)
DE (1) DE112011103276T5 (de)
GB (1) GB2499946B (de)
WO (1) WO2012072418A1 (de)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8539163B1 (en) * 2010-12-17 2013-09-17 Amazon Technologies, Inc. Speculative reads
US8886880B2 (en) 2012-05-29 2014-11-11 Dot Hill Systems Corporation Write cache management method and apparatus
US9684455B2 (en) 2013-03-04 2017-06-20 Seagate Technology Llc Method and apparatus for sequential stream I/O processing
US9053038B2 (en) 2013-03-05 2015-06-09 Dot Hill Systems Corporation Method and apparatus for efficient read cache operation
US8930619B2 (en) 2012-05-29 2015-01-06 Dot Hill Systems Corporation Method and apparatus for efficiently destaging sequential I/O streams
US9552297B2 (en) 2013-03-04 2017-01-24 Dot Hill Systems Corporation Method and apparatus for efficient cache read ahead
US10210480B2 (en) * 2012-05-31 2019-02-19 Apple Inc. Avoiding a redundant display of a notification on multiple user devices
US9158687B2 (en) 2013-03-04 2015-10-13 Dot Hill Systems Corporation Method and apparatus for processing fast asynchronous streams
US9152563B2 (en) 2013-03-04 2015-10-06 Dot Hill Systems Corporation Method and apparatus for processing slow infrequent streams
US9465555B2 (en) 2013-08-12 2016-10-11 Seagate Technology Llc Method and apparatus for efficient processing of disparate data storage commands
US9134910B2 (en) * 2013-04-30 2015-09-15 Hewlett-Packard Development Company, L.P. Set head flag of request
US9213498B2 (en) 2013-09-03 2015-12-15 Kabushiki Kaisha Toshiba Memory system and controller
KR101694988B1 (ko) 2014-02-26 2017-01-11 한국전자통신연구원 분산 파일시스템에서의 읽기 동작 수행 방법 및 장치
CN105094701B (zh) * 2015-07-20 2018-02-27 浪潮(北京)电子信息产业有限公司 一种自适应预读方法及装置
US10255190B2 (en) * 2015-12-17 2019-04-09 Advanced Micro Devices, Inc. Hybrid cache
CN105653684B (zh) * 2015-12-29 2020-03-03 曙光云计算集团有限公司 分布式文件系统的预读方法和装置
CN107783911B (zh) * 2016-08-31 2021-06-08 华为技术有限公司 一种数据过滤方法及终端设备
CN116644004A (zh) * 2018-05-23 2023-08-25 北京忆芯科技有限公司 预读方法及其存储控制器
CN110808956B (zh) * 2019-09-30 2021-09-17 林德(中国)叉车有限公司 一种数据交互方法及系统
CN114327299B (zh) * 2022-03-01 2022-06-03 苏州浪潮智能科技有限公司 一种顺序读预读的方法、装置、设备及介质

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6161162A (en) 1993-12-08 2000-12-12 Nec Corporation Multiprocessor system for enabling shared access to a memory
US5752063A (en) 1993-12-08 1998-05-12 Packard Bell Nec Write inhibited registers
US6745194B2 (en) * 2000-08-07 2004-06-01 Alta Vista Company Technique for deleting duplicate records referenced in an index of a database
TW359800B (en) * 1996-08-19 1999-06-01 Ibm Device independent and transfer optimised interactive client-server dialog system and method for performing interactive applications therein
US7269663B2 (en) 2001-09-28 2007-09-11 Intel Corporation Tagging packets with a lookup key to facilitate usage of a unified packet forwarding cache
US7325051B2 (en) 2001-11-06 2008-01-29 International Business Machines Corporation Integrated storage appliance
US7423781B2 (en) 2002-03-20 2008-09-09 Ricoh Company, Ltd. Image processor and image processing method for image enhancement using edge detection
US7542986B2 (en) 2002-03-26 2009-06-02 Hewlett-Packard Development Company, L.P. System and method for maintaining order for a replicated multi-unit I/O stream
US7418494B2 (en) * 2002-07-25 2008-08-26 Intellectual Ventures Holding 40 Llc Method and system for background replication of data objects
US7287068B1 (en) * 2002-12-13 2007-10-23 Bmc Software, Inc. System and method for updating devices that execute an operating system or application program directly from nonvolatile storage
US7334088B2 (en) * 2002-12-20 2008-02-19 International Business Machines Corporation Page descriptors for prefetching and memory management
US7020743B2 (en) * 2003-02-24 2006-03-28 Sun Microsystems, Inc. Atomic remote memory operations in cache mirroring storage systems
US7039747B1 (en) 2003-12-18 2006-05-02 Cisco Technology, Inc. Selective smart discards with prefetchable and controlled-prefetchable address space
US7441087B2 (en) 2004-08-17 2008-10-21 Nvidia Corporation System, apparatus and method for issuing predictions from an inventory to access a memory
JP4088899B2 (ja) 2004-11-17 2008-05-21 ソニー株式会社 記録再生装置および記録再生方法、並びにプログラム
US20060165040A1 (en) 2004-11-30 2006-07-27 Rathod Yogesh C System, method, computer program products, standards, SOA infrastructure, search algorithm and a business method thereof for AI enabled information communication and computation (ICC) framework (NetAlter) operated by NetAlter Operating System (NOS) in terms of NetAlter Service Browser (NSB) to device alternative to internet and enterprise & social communication framework engrossing universally distributed grid supercomputing and peer to peer framework
US20060184718A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US7404042B2 (en) 2005-05-18 2008-07-22 Qualcomm Incorporated Handling cache miss in an instruction crossing a cache line boundary
JP2007011523A (ja) 2005-06-29 2007-01-18 Hitachi Ltd データの先読み方法及び計算機システム
US8295475B2 (en) 2006-01-13 2012-10-23 Microsoft Corporation Selective glitch detection, clock drift compensation, and anti-clipping in audio echo cancellation
EP2005674B1 (de) * 2006-04-12 2016-09-28 TQ Delta, LLC Paketwiederübertragung und gemeinsame speichernutzung
US8161353B2 (en) 2007-12-06 2012-04-17 Fusion-Io, Inc. Apparatus, system, and method for validating that a correct data segment is read from a data storage device
US7827331B2 (en) 2006-12-06 2010-11-02 Hitachi, Ltd. IO adapter and data transferring method using the same
US20090063400A1 (en) * 2007-09-05 2009-03-05 International Business Machines Corporation Apparatus, system, and method for improving update performance for indexing using delta key updates
JP4498409B2 (ja) * 2007-12-28 2010-07-07 株式会社エスグランツ データベースのインデックスキー更新方法及びプログラム
US9110796B2 (en) 2009-01-27 2015-08-18 Avago Technologies General Ip (Singapore) Pte Ltd Apparatus and circuitry for memory-based collection and verification of data integrity information

Also Published As

Publication number Publication date
US8832385B2 (en) 2014-09-09
WO2012072418A1 (en) 2012-06-07
US20120144123A1 (en) 2012-06-07
US20120239749A1 (en) 2012-09-20
US20130205095A1 (en) 2013-08-08
US20130191448A1 (en) 2013-07-25
US8595444B2 (en) 2013-11-26
GB201310506D0 (en) 2013-07-24
CN103250141A (zh) 2013-08-14
US8578101B2 (en) 2013-11-05
US20130191490A1 (en) 2013-07-25
US20130191602A1 (en) 2013-07-25
US8949543B2 (en) 2015-02-03
CN103250141B (zh) 2015-12-16
US8578102B2 (en) 2013-11-05
US9251082B2 (en) 2016-02-02
GB2499946B (en) 2019-01-16
US20130185518A1 (en) 2013-07-18
GB2499946A (en) 2013-09-04

Similar Documents

Publication Publication Date Title
DE112011103276T5 (de) Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur
DE102016103359B4 (de) Singleton-cachespeicher-verwaltungsprotokoll für hierarchische virtualisierte speichersysteme
DE102012216022B4 (de) Verwaltung einer Zeitpunktkopie-Beziehung für platzsparende Datenträger
DE202012013432U1 (de) Speichern von Daten auf Speicherknoten
DE112011100819B4 (de) Speicherplatzreservierung in einem Deduplizierungssystem
DE602004005050T2 (de) Verfahren, vorrichtung und computerprogramm zum verarbeiten einer warteschlange von nachrichten
DE112012002241T5 (de) Migration eines transparenten Dateisystems zu einem neuen physischen Speicherort
DE112013001905T5 (de) Erhöhte Inline-Deduplizierungseffizienz
DE112011101633T5 (de) Virtualisierung und dynamische Ressourcenzuweisung berücksichtigendes Neuordnen von Speicherebenen
DE112016000726T5 (de) Transparente hardwareunterstützte speicherdekompression
DE112010004931T5 (de) Mehrphasige Wiederherstellung von Dateisystemen mit SelektiverBedarfsweiser Verfügbarkeit von Daten(
DE102013006396A1 (de) Eine grafikverarbeitungseinheit, in der eine standardverarbeitungseinheit verwendet ist, und ein verfahren zum aufbau einer grafikverarbeitungseinheit
DE112012002452T5 (de) Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten
DE202014010885U1 (de) Beschleunigung basierend auf zwischengespeicherte Flüsse
DE112013003873T5 (de) Verfahren und Vorrichtung zum Patchen
DE112013000465T5 (de) Verwaltung einer fernen Datenreplikation
DE112011103367T5 (de) Replizieren von Daten
DE112020006010T5 (de) Schulung eines neuronalen netzwerks durch verwenden eines datenflussgraphen und dynamische verwaltung von arbeitsspeicher
DE112018003585T5 (de) Deduplizierung eines bandlaufwerkspeichers
DE112018000900T5 (de) Verarbeiten eines Befehls zum Freigeben von Speicherplatz in einem Computersystem
DE102012221814A1 (de) Neuanordnung von Software-Abbildern auf der Grundlage von deren vorhergesagter Verwendung
DE202023101653U1 (de) Organisations- und cloudübergreifende automatisierte Datenpipelines
DE102021123290A1 (de) Schnelles verfolgen von cache zum unterstützen von aggressivem vorablesen
DE112010004809T5 (de) Mehrfachgranulare Datenstromverarbeitung
DE102008012979A1 (de) Verfahren und Programm zum Bereitstellen von Datenkohärenz in Netzwerken

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: RICHARDT PATENTANWAELTE GBR, DE

Representative=s name: RICHARDT PATENTANWAELTE PART GMBB, DE

Representative=s name: RICHARDT PATENTANWAELTE PARTG MBB, DE

R083 Amendment of/additions to inventor(s)
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final