-
Die
vorliegende Erfindung bezieht sich auf ein System zum Abrufen von
Blöcken
mit Daten, wie Audio- und/oder Videodaten, von einem Speichermedium
und zum Liefern der Blöcke
in Form einer Anzahl von maximal Nmax Datenströmen zu Benutzern,
wobei jeder Datenstrom eine identische maximale Verbrauchsrate von Rmax Datenelementen in der Sekunde hat und
wobei das Speichermedium eine Bandbreite von wenigstens Nmax·Rmax Datenelementen in der Sekunde hat; wobei
das Speichermedium eine Anzahl Speichereinheiten aufweist.
-
Ein
System dieser Art wird in einem Multimedia-Server und insbesondere
in einem "Video-on-Demand"- oder einem "Near-Video-on-Demand"-System angewandt.
Eine allgemeine Anforderung in derartigen Systemen ist, dass jedem
aktiven Benutzer ein kontinuierlicher, ununterbrochener Datenstrom
geliefert wird. Typischerweise werden Daten aus einem herkömmlichen
Speichermedium, wie Festplatten, die in einer Platteneinrichtung
vorgesehen sind, wie einem RAID-System, ausgelesen. Im Allgemeinen
kann zwischen einem System mit einer festen Verbrauchsrate und einem
System mit einer variablen Verbrauchsrate ein Unterschied gemacht
werden. In einem System mit einer festen Verbrauchsrate werden Daten
typischerweise einem Benutzer als ein Datenstrom mit einer festen
rate zugeführt.
Meistens ist die Rate für
jeden Strom in dem System identisch. Ein Beispiel eines derartigen
Systems ist ein "Near-Video-on-Demand"-System, wobei eine
Anzahl Filme parallel zueinander abgespielt werden können und
derselbe Film mehrere Male parallel abgespielt werden kann, wobei
meistens beispielsweise alle fünf
oder fünfzehn
Minuten eine neue Kopie desselben Films gestartet wird. In einem
System mit einer variablen Verbrauchsrate, wobei ein Benutzer Daten
verbraucht, die in der Zeit variieren. Typischerweise kann eine
maximale Verbrauchsrate für
jeden Datenstrom definiert werden. In der Praxis wird meistens eine
identische maximale Verbrauchsrate für alle Ströme verwendet, obschon es möglich sein
kann, auf effiziente Weise Ströme
mit verschiedenen maximalen Verbrauchsraten zu unterstützen (beispielsweise
eine maximale Rate für
einen Audio-Strom und eine andere maximale Rate für einen kombinierten
Video- und Audio-Strom).
Systeme mit einer variablen Verbrauchsrate werden beispielsweise
für Systeme
angewandt, die VCR-ähnliche
Funktionen, wie Pause oder Zeitlupe, unterstützen, oder Systeme, die Kompressionsschemen
mit variabler Bitrate anwenden, wie MPEG-2.
-
Um
einem Benutzer Daten als ständigen
Datenstrom zu liefern, sind spezielle Zeitablaufsteuerungen zum
Auslesen von Daten von den Platten erforderlich mit einem geeigneten
Schema zur vorübergehenden Pufferung
der ausgelesenen Daten bevor die Daten dem Benutzer zugeführt werden.
Für ein
System mit einer festen Verbrauchsrate wird typischerweise zu festen
regelmäßigen Intervallen
für jeden
Strom ein fester Betrag an Daten (ausreichend für wenigstens eine Periode)
ausgelesen und in dem Puffer gespeichert. Innerhalb eines Systems
mit einer variablen Verbrauchsrate können verschiedene Ströme einen
vorbestimmten Block des Puffers zu verschiedenen Zeitpunkten leeren.
Typischerweise werden während
eines Intervalls nur Daten für Ströme ausgelesen,
deren Puffer Raum haben für
einen Block von Daten. Andere Ströme werden übersprungen. Dadurch ist die
Dauer des Intervalls zum Auslesen von Daten variable, begrenzt durch
die Situation, in der alle aktiven Ströme einen neuen Datenblock erfordern.
-
Um
eine große
Plattenbandbreite zu gewährleisten,
die erforderlich ist, wenn alle Datenströme mit der maximalen Datenrate
verbrauchen, werden die Daten üblicherweise über alle
Platten in der Einrichtung gestreift. Insbesondere für Systeme
mit variabler Datenrate wird dies dadurch erreicht, dass jeder Datenblock über alle
Platten aufgeteilt werden, so dass ein Antrag zum Auslesen dieses
einen Plattenzugriff auf jede der Platten bedeutet. Dadurch wird
die Belastung der Platten optimal ausgewuchtet.
-
Im
Allgemeinen wird die Anzahl Platten in der Platteneinrichtung durch
die erforderliche Bandbreite bestimmt, und zwar im Hinblick auf
die Anzahl Datenströme,
die parallel unterstützt
werden. An sich wächst
die Anzahl Platten mit der maximalen Anzahl Datenströme. Um zu
gewährleisten,
dass die Effektivität
des Zugriffs auf eine Platte mehr oder weniger konstant bleibt,
soll die Größe eines
Blocks, ausgelesen aus einer einzelnen Platte für einen Datenstrom nach wie
vor die gleiche sein (Das Auslesen zu kleiner Blöcke einer Platte steigert die
Gesamtkosten, insbesondere wenn die Größe unter die Größe einer
Spur sinkt). Dadurch wächst
die Größe des akkumulierten
Blocks, der über
alle Platten gestreift ist, wächst
linear mit der Anzahl Platten und folglich mit der maximalen Anzahl
Datenströme.
Dies führt
dazu, dass die Größe des Puffers
ebenfalls mit der maximalen Anzahl Datenströme linear wächst. Da für jeden Datenstrom ein Puffer
erforderlich ist, ist der kombinierte Effekt, dass die Gesamtgröße des Puffers
im Wesentlichen quadratisch von der maximalen Anzahl Datenströme abhängig ist,
was die Kosten des Pufferns zu einem herrschenden Faktor macht,
insbesondere für
Systeme, die eine Vielzahl Datenströme unter stützen. Ein weiterer negativer
Effekt ist, dass die Reaktionszeit des Systems zum Ermöglichen,
dass ein neuer Datenstrom aktiv wird, im Wesentlichen linear wächst, da
das Zeitintervall, das zum neuen Füllen der Puffer erforderlich
ist, linear wächst
und während
eines derartigen Intervalls können
keine neuen Benutzer in das System eintreten.
-
Es
ist nun u. a. eine Aufgabe der vorliegenden Erfindung, ein System
der oben beschriebenen Art zu schaffen, wobei die Pufferkosten im
Wesentlichen linear mit der maximalen Anzahl unterstützter Datenströme wachsen.
Es ist eine weitere Aufgabe, ein derartiges System zu schaffen,
in dem die Reaktionszeit im Wesentlichen die gleiche bleibt, ungeachtet
der maximalen Anzahl unterstützter
Datenströme.
-
Zum
Erfüllen
dieser Aufgabe weist das System nach der vorliegenden Erfindung
das Kennzeichen auf, dass eine vorbestimmte Selektion von Blöcken einige
Male in dem Speichermedium gespeichert ist, wobei einzelne Blöcke der
Selektion als Ganzes in wenigstens zwei verschiedenen und im Wesentlichen
beliebig selektierten Speichereinheiten gespeichert werden; und
dass das System Folgendes umfasst:
- – einen
Scheduler zur Steuerung der Auslese der Blöcke für die Datenströme von dem
Speichermedium, wobei für
jeden Block aus einem entsprechenden Satz aller Speichereinheiten,
in denen der Block gespeichert ist, eine einzige Speichereinheit
selektiert wird, woraus der Block ausgelesen werden soll und dass der
selektierten Speichereinheit ein entsprechender Ausleseantrag zugeordnet
wird; wobei der Scheduler derart wirksam ist, dass er die Speichereinheit
aus dem Satz derart selektiert, dass die Belastung der vielen Speichereinheiten
ausgewuchtet wird; und
- – einen
Leser um in Reaktion auf einen Blockausleseantrag, den entsprechenden
Block aus der zugeordneten Speichereinheit auszulesen um diesen
Block in dem entsprechenden Datenstrom einem Benutzer zu liefern.
-
Dadurch,
dass gewährleistet
wird, dass ein Block in wenigstens zwei verschiedene Speichereinheiten gespeichert
wird, hat der Scheduler eine Wahl bei der Selektion, aus welcher
Speichereinheit der Block während
der Wiedergabe ausgelesen wird. Dies ermöglicht es, dass der Scheduler
die Speichereinheiten derart wählt,
dass die Belastung der Speichereinheiten ausgewuchtet ist. Dadurch,
dass die Blöcke
in beliebig selektierten Speichereinheiten selektiert werden, kann
eine relativ gleichmäßige Belastung
während
der Wiedergabe erreicht werden, sogar für Systeme mit variabler Rate,
für die
es sonst schwer ist oder sogar unmöglich, vorherzusagen, wie die
Belastung an einzelnen Speichereinheiten sich in der Zeit für die aktiven
Ströme
entwickeln wird. In einem einfachen System werden alle Blöcke aller
Titel zweimal in dem System gespeichert, d.h. in zwei verschiedenen
Speichereinheiten des Systems. Die Selektion der Blöcke kann
auf alternative Art und Weise ein teil aller Blöcke sein, wobei die restlichen
Blöcke
nur einmal gespeichert werden.
-
Der
von dem System nach der vorliegenden Erfindung gebotenen Lösung liegt
die Erkenntnis zugrunde, dass anders als bei der Bandbreite, die
Kapazität
des Speichermediums nicht der bestimmende Faktor ist und zunehmend
ein weniger wichtige Faktor wird, da die Kapazität der Festplatten im Schnitt
mit einer höheren Rate
(typischerweise 60% jährlich)
als die Bandbreite (typischerweise ein Wachstum von 40% jährlich)
wächst. Wenn
nur vorausgesetzt wird, das in zwei Jahren eine typische Platte
eine Speicherkapazität
von 25 Gbyte haben wird und eine gewährleistete Datenrate von 85
Mbit/s, können
die nachfolgenden zwei Szenarios vergegenwärtigt werden. In einem ersten
Szenario wird eine Video-on-Demand-Version
des Systems nach der vorliegenden Erfindung benutzt zum Bieten eines
Bereichs von bis zu 20 Filmen, wie in einem Kino, für maximal
1000 Benutzer. Die Filme sind unter Anwendung von MPEG2 mit einer
mittleren rate von 4 Mbit/s codiert. Wenn nun vorausgesetzt wird,
dass ein Film im Schnitt eine Länge
von 90 Minuten hat, so ist eine gesamte Speicherkapazität von 90·60·4.106 = 21.6·109 Bits
= 2,5 Gbyte je Film erforderlich, was zu einer gesamten erforderlichen
Speicherkapazität
von etwa 50 Gbyte führt.
Wenn alle Blöcke
zweimal gespeichert werden, muss die Kapazität etwa 100 Gbyte betragen,
entsprechend 4 oder 5 Platten. Um gleichzeitig 1000 Benutzer unterstützen zu
können,
ist eine insgesamt gewährleistete
Bandbreite von 4000 Mbit/s erforderlich, was 47 Platten entspricht.
Nur dann, wenn es in einem derartigen System erforderlich ist, mehr
als 235 Filme zu speichern, wird die Speicherkapazität der Platten
relevant. In einem mehr gemäßigten Szenario,
in dem das System nach der vorliegenden Erfindung benutzt wird bis
zu hundert Benutzern eine Wahl von Filmen zu bieten, wie dies für ein Hotel
typisch ist, sind in Bezug auf die Bandbreite fünf Platten erforderlich. Bei
voller Duplikation aller Blöcke
können
die fünf
Platten 23 Filme speichern, was mehr ist als in einem derartigen
System meistens geboten wird.
-
Der
vorliegenden Erfindung liegt weiterhin die Erkenntnis zugrunde,
dass obschon Datenblöcke
mehrere Male gespeichert sind, im Wesentlichen in einem Typischen
System weniger Speichereinheiten in dem System nach der vorliegenden
Erfindung erforderlich sind als in einem herkömmlichen System. Wie bereits
für oben
stehende Szenarien dargelegt, ist Bandbreite der begrenzende Faktor
für die
meisten praktischen Systeme und dies wird sogar noch zunehmen. Dadurch,
dass Datenblöcke
nicht länger über einzelne
Speichereinheiten gestreift werden, sondern dass stattdessen der
ganze Block von einer Platte ausgelesen wird, wird die Effizienz
im Auslesen von Daten aus der Speichereinheit verbessert. In dem
ersten Szenario führt
eine Effizienzverbesserung von etwas mehr als 2% bereits zu Platteneinsparung.
-
Ein
weiterer Vorteil des Systems nach der vorliegenden Erfindung liegt
in der verbesserten Robustheit des Systems. Wenn beispielsweise
eine von zwanzig Platten fehlt und alle Blöcke dupliziert werden, wird
der Scheduler im Schnitt für
einen von zwanzig Blöcken
nicht imstande sein, zu wählen,
von welcher Einheit der Block ausgelesen werden soll. Es dürfte einleuchten,
dass dadurch die mittlere Belastung einer Speichereinheit um 5,3%
zunehmen wird und die maximale Belastung an einer der restlichen
Speichereinheiten wird auch um im Wesentlichen den gleichen Prozentsatz
zunehmen. In dem meisten Fällen,
wo das System nicht durch die maximale Anzahl Benutzer angewandt
wird, wird dies reichlich Gelegenheit geben, die fehlerhafte Platte zu
ersetzen. Es sind keine weiteren Maßnahmen, wie Paritätsplatten
erforderlich.
-
Weiterhin
nimmt die Ausdehnungsfähigkeit
des Systems zu. Wenn eine zusätzliche
Bandbreite (oder Speicherkapazität)
erforderlich ist, kann eine zusätzliche
Platte zu dem System hinzugefügt
werden. Danach müssen
Blöcke
von den bereits vorhandenen Platten zu den neuen Platten verlagert
werden. Die zu verlagernden Blöcke
können
beliebig selektiert werden. Typischerweise werden die zu verlagernden
Blöcke
im Wesentlichen die mittlere Anzahl Blöcke sein, die auf einer Platte
gespeichert sind. In dem System nach der vorliegenden Erfindung
ist der Eingriff auf die Wirkung des Systems sehr gering. In einem
System mit 50 Platten braucht nur 2% der Blöcke verlagert zu werden. Alle
anderen Blöcke
werden überhaupt
nicht beeinflusst. Auch der Verlagerungsvorgang kann durchgeführt werden,
wenn die Kapazität
verfügbar
ist zum Verlagern eines Blocks (d.h. der Vorgang kann im Hintergrund
durchgeführt
werden, während
das System operationell ist). Wenn Blöcke zu der neuen Platte verlagert
werden, nimmt die Kapazität
des Systems langsam zu bis zum Schluss die gewünschte Anzahl Blöcke zu der
neuen Platte verlagert worden sind. Im Gegensatz dazu braucht für ein typisches
System, in dem Blöcke über alle
Platten verteilt sind, auf alle Platten zugegriffen werden und es
kann sogar erforderlich sein, dass Blö cke neu gebaut werden müssen, um
Daten auf der neuen Platte zu speichern. Ein derartiger riesiger
Vorgang muss meistens durchgeführt
werden, wenn das System abgetrennt ist.
-
Ein
auf Disks basierter Speicherserver für 3D interaktive Applikationen,
wie einen architektonischen Spaziergang durch eine Stadt wie Los
Angeles, ist beschrieben in: "Randimized
data Allocation for Real-Time Disk I/O", Compcon '96 ("41
st IEEE Computer Society International Conference", Santa Clara, den
25.–28. Februar
1996). In diesem System, wobei es sich um sehr große 3D Modelle
handelt, wenigstens in der Größenordnung
eines Terabytes, ist die Art des I/O-Stromes gegenüber obere
Grenzen der Verzögerung
und Mittelbenutzung viel anders als bei Video-on-Demand-Systemen,
wo diese Aspekte (weitgehend) vorhersagbar sind. Für dieses
System bestimmt ein unvorhersagbarer Vorgang des Benutzers, ob ein
völlig
neuer teil des Modells sichtbar wird und dem Benutzer präsentiert
werden soll. Damit eine hohe Spitzenbandbreite geschaffen werden
kann, die zum Präsentieren
eines neuen Teils des Modells erforderlich ist, wird ein Datenblock
typischerweise über
sieben Platten verteilt, die eine Gruppe von sieben Blöcken bilden,
die je eine volle Spur auf der Platte belegen. Die Gruppe von sieben
Platten werden aus dem Satz verfügbarer
Platten beliebig selektiert. Einer der sieben Blöcke ist ein Paritätsblock.
Die beliebige Verteilung der Gruppen führt zu einer statistischen
Variation in den Längen
der Schlangen. Die Variation kann dadurch verringert werden, dass
nur g–1
Blöcke
einer Gruppe von g Blöcken
ausgelesen werden. Wenn der nicht gelesene Block ein Datenblock
ist, wird der Paritätsblock
zum Rekonstruieren des nicht gelesenen Blocks benutzt.
-
Die
in dem Unteranspruch 2 definierte Maßnahme beschreibt einen einfachen
Scheduler, in dem Anträge
zum Abholen von Datenblöcken
von dem Speichermedium durch den Scheduler einzeln verarbeitet werden
und typischerweise in der Folge, in der sie bei dem Scheduler eintreffen.
Für jeden
Antrag bestimmt der Scheduler auf Basis der dann aktuellen Belastung,
herrührend
von den bereits zugeordneten Blockausleseanträgen, welcher Speichereinheit
der Antrag zugeordnet werden soll, die dann die Speichereinheit
ist, welche die geringste Belastung von allen Speichereinheiten
hat, die den auszulesenden Block speichern.
-
Die
Maßnahme,
wie diese in dem Unteranspruch 3 definiert ist, wuchtet die Belastung
aus durch Verteilung der Anträge
für eine
Gruppe von auszulesenden Blöcken.
Dies ermöglicht
eine gleichmäßigere Belastung
im Vergleich zu der Zuordnung der Anträge auf einer individuellen
Basis, wobei bereits zugeordnete Anträge nicht länger beeinflusst werden können. So
kann beispielsweise das Zuordnen von Anträgen zu der nachfolgenden Situation
führen.
-
Es
kann der Speichereinheit A ein Antrag zugeordnet werden, wobei diese
Einheit aus zwei möglichen Speichereinheiten
A und B gewählt
ist, die eine gleiche Belastung haben. Die Belastung an der Speichereinheit C
ist um eine Einheit höher
als die Anfangsbelastung an A und B. Für einen nächsten Antrag muss zwischen den
Speichereinheiten A und C gewählt
werden. Da die beiden A und C nun eine gleiche Belastung haben, wird,
wie die Wahl auch sein wird, diese Wahl immer zu der Zunahme der
Belastung einer der Speichereinheiten führen. Durch Erledigung der
beiden Anträge
in einer Gruppe, kann der erste Antrag B zugeordnet werden und der
zweite Antrag kann A zugeordnet werden, was zu einer niedrigeren
maximalen Belastung an der drei Einheiten führt. In den meisten Systemen
werden die Speichereinheiten auf eine synchronisierte Weise ausgelesen
(d.h. der Lesevorgang wird für
alle Platten gleichzeitig gestartet, wobei das Auslesen selber in
einer Schwingbewegung des Kopfes der Platte durchgeführt wird),
dabei implizierend, dass eine Zunahme der Belastung der Speichereinheit
mit der höchsten
Belastung zu einem längeren
Intervall führt
zum Auslesen von den Speichereinheiten. Dies führt zu einer längeren Reaktionszeit
zum Akzeptieren neuer Benutzer.
-
Die
Maßnahme,
wie in dem Unteranspruch 4 definiert, beschreibt einen einfachen
Scheduler zum Auswuchten der Belastung für eine Gruppe von Anträgen, in
denen Anträge
zum Abholen von Datenblöcken
von dem Speichermedium einzeln durch den Scheduler erledigt werden
und typischerweise in der Folge in der sie bei dem Scheduler eintreffen.
Für jeden
Antrag bestimmt der Scheduler auf Basis der dann aktuellen Belastung,
herrührend
von den bereits zugeordneten Blockausleseanträgen, welcher Speichereinheit
der Antrag zugeordnet werden soll, und zwar derjenigen Speichereinheit,
welche die niedrigste Belastung von allen Speichereinheiten hat,
die den auszulesenden Block speichern. Weiterhin brauchen Anträge, die
zur Zeit erledigt werden oder die bereits endgültig Speichereinheiten zugeordnet
worden sind (beispielsweise bereits ausgegeben zu einem Hardware-Ausleseantragspuffer,
der Anträge
für in
einem nachfolgenden Schwingvorgang der Platte auszulesende Blöcke speichert)
nicht betrachtet zu werden. Dadurch, dass gewährleistet wird, dass die Belastung
gleichmäßig innerhalb
jeder nachfolgenden Gruppe ausgewuchtet wird, wird eine relativ
gleichmäßige Belastung
der Speichereinheiten beibehalten, als Ergebnis der aufeinander
folgenden Gruppen.
-
Die
Maßnahme,
wie in dem Unteranspruch 5 definiert, ermöglicht das Erhalten einer sehr
gleichmäßigen Belastung
an den Speichereinheiten. Simulationen haben gezeigt, dass durch
Verwendung der anfangs sequentiellen Zuordnung, wie in Anspruch
4 beschrieben, wonach nur eine Runde einer sequentiellen Neuzuordnung
folgt, wie in Anspruch 5 beschrieben, ist die Verteilung sehr nahe
bei einem Optimum. Es dürfte
einleuchten, dass die Bedingung zum Durchführen einer nächsten Wiederholung
einfach ein Zähler
sein kann (wie eine Durchführung
nur eines Neuzuordnungsschrittes), aber sie kann auch beispielsweise
von der Qualität
der Verteilung abhängig
sein, die bisher erhalten worden ist im Hinblick auf die maximale
Belastung und die mittlere Belastung. Die Maßnahme, wie in dem Unteranspruch
6 definiert, gibt ein einfaches Kriterium, ob der vorhergehende
Wiederholungsschritt ggf. zu einer Verbesserung geführt hat.
-
Die
Maßnahme,
wie diese in dem Unteranspruch 7 definiert ist, beschreibt, wie
auf Basis einer Analogie mit einem maximalen Flussproblem eine optimale
Verteilung der Last erreicht werden kann.
-
Die
Maßnahme,
wie diese in dem Unteranspruch 8 definiert ist, schafft eine effektive
und einfache Art und Weise eine optimale Belastung zu erreichen.
-
Die
Maßnahme,
wie diese in dem Unteranspruch 9 definiert ist, beschreibt, dass
Titel mit einem Multiplikationsfaktor assoziiert sind, der einen
Pegel der Multiplikation des Titels angibt. Auf vorteilhafte Weise kann
mehr als nur ein anderer Multiplikationsfaktor in dem System verwendet
werden. So wird beispielsweise einer Gruppe der beliebtesten Titel
ein hoher Multiplikationsfaktor zugeordnet (beispielsweise höher als
2, wodurch angegeben wird, dass für die Titel mehr als die doppelte
Anzahl Blöcke
gespeichert werden als für
einen Teil des Titels), während
für nicht
regelmäßig beantragte
Filme, wie alte Favoriten, ein niedriger Multiplikationsfaktor verwendet
wird (beispielsweise zwischen der Verwendung von kaum Blöcken zur
Speicherung des Titels bis Verwendung von 1,5fach der Anzahl Blöcke). Simulationen
haben gezeigt, dass für
Filme mit einer gleichen Beliebtheit bereits gute Ergebnisse erreicht
werden können
mit einem Multiplikationsfaktor von etwa 1,75 (d.h. 75% der Blöcke bei
Wiedergabe sind zweimal verfügbar).
Es dürfte
einleuchten, dass durch Multiplikation der beliebtesten Titel ein
gesamter Multiplikationsfaktor von 75% bei Wiedergabe bereits durch
Verdopplung von im Wesentlichen weniger als 75% der Titel erreicht
wird.
-
Es
dürfte
einleuchten, dass die Titel-spezifische Multiplikation auch auf
andere Systeme mit einer Form von mehrfacher Speicherung von Blöcken angewandt
werden kann. Ein derartiges System könnte als ein System zum Abrufen
von Datenblöcken,
wie Audio- und/oder Video-Daten, beschrieben werden, von einem Speichermedium
und zum Liefern der Blöcke
in Form einer Anzahl Datenströme
zu Benutzern; wobei das Speichermedium eine Anzahl Speichereinheiten
aufweist; wobei eine vorbestimmte Selektion von Blöcken mehrfach
in dem Speichermedium gespeichert wird, indem einzelne Blöcke der
Selektion in wenigstens zwei verschiedenen und nicht überlappenden
Gruppen von wenigstens einer Speichereinheit gespeichert werden; wobei
die Blöcke
zu einer Anzahl Titel gehören,
wobei jeder Titel eine Folge von Datenblöcken aufweist und mit einem
vorbestimmten Multiplikationsfaktor assoziiert ist; wobei der Multiplikationsfaktor
eines Titels zu einem Verhältnis
der Anzahl Blöcke
gehört,
die in dem Speichermedium für
den Titel und die Anzahl Blöcke
des Titels gespeichert sind;
wobei das System Folgendes umfasst:
Einen
Scheduler zur Steuerung der Auslese der Blöcke für die Datenströme von dem
Speichermedium, wobei für
jeden Block aus einem entsprechenden Satz aller Speichereinheiten,
in denen der Block gespeichert ist, eine einzige Speichereinheit
selektiert wird, woraus der Block ausgelesen werden soll und dass
der selektierten Speichereinheit ein entsprechender Ausleseantrag
zugeordnet wird; und
einen Leser um in Reaktion auf einen Blockausleseantrag,
den entsprechenden Block aus der zugeordneten Speichereinheit auszulesen
um diesen Block in dem entsprechenden Datenstrom einem Benutzer
zu liefern.
-
Es
dürfte
einleuchten, dass ein Block in einer einzigen Speichereinheit gespeichert
sein kann oder in einer Gruppe von mehr als nur einer Speichereinheit
gespeichert sein kann (beispielsweise verteilt über einige Speichereinheiten
oder das Speichermedium um die Bandbreite zu steigern). Wenn der
Block mehrfach gespeichert wird, dann wird jeder Datenelement des
Blocks in wenigstens zwei verschiedenen Speichereinheiten gespeichert
(keine vollständige Überlappung).
Auf diese Weise wird Redundanz erreicht, was die Robustheit steigert,
aber auch Auswuchtung bei der Wiedergabe ermöglicht. Wenn beispielsweise
ein Block über
eine Gruppe von zwei Platten verteilt ist (d.h. als zwei Subblöcke SB1
und SB2 gespeichert) und dreimal gespeichert wird, dann wird vorzugsweise
jeder der zwei verschiedenen Subblöcke in drei verschiedenen Speichereinheiten
gespeichert. In dem Fall ist, wenn nur eine Speichereinheit ausfällt, jeder
Subblock dennoch von wenigstens zwei Speichereinheiten aus verfügbar. Vorzugsweise
wird die Gruppe von Speichereinheiten "beliebig" selektiert, wobei die Lastauswuchtung
bei der Wiedergabe ansteigt. Das System kann aber auch für weitgehend
nicht beliebige Speicherstrategien Vorteile Bieten. Eine oft angewandte
nicht beliebig Speicherstrategie ist das sog. "round-robin"-Verfahren.
In einem derartigen System werden Blöcke eines einzigen Titels auf aufeinander
folgenden Platten in der Sequenz der Wiedergabe gespeichert. So
kann beispielsweise für
ein System mit sieben Hauptplatten der erste Block eines Titels
auf Platte 1 gespeichert werden; Block 2 auf Platte 2, ... Block
7 auf Platte 7, Block 8 auf Platte 1, Block 9 auf Platte 2 usw.
Zum Erhalten von Redundanz in einem derartigen System wird typischerweise
eine Paritätsplatte
hinzugefügt
(in dem Beispiel Platte 8), wobei die Paritätsplatte für jeden Zyklus (Block 1 bis
Block 7; Block 8 bis Block 15) einen Paritätsblock speichert, berechnet über die
Blöcke
des Zyklus. Wenn alle Hauptplatte funktionieren, erfordert ein Zyklus 7 aufeinander
folgende Plattenzugriffe (einen Zugriff aus jede der Platten). Wenn
aber eine der Hauptplatten ausfällt,
sind noch sechs normale Zugriffe erforderlich, mit sieben zusätzlichen
Zugriffen für
den Block, der nicht unmittelbar ausgelesen werden kann (ein Zugriff
auf die Paritätsplatte
und sechs Zugriffe auf die immer noch operationellen Hauptplatten).
Folglich halbiert sich meistens die Leistung des Systems in einer
derartigen Situation. Auf alternative Weise können alle sechs normal zugreifharen
Blöcke
eines Zyklus in dem Speicher bleiben und zum rekonstruieren des
Blocks aus der nicht verfügbaren
Platte verwendet werden, und zwar in Kombination mit dem Paritätsblock.
Dies aber erfordert eine wesentliche Zunahme der Speicheranforderungen,
was typischerweise dazu führt,
dass das System imstande ist, wesentlich weniger Benutzer zu bedienen.
Dadurch, dass Blöcke
mehrfach gespeichert werden, wird die Robustheit des Systems gesteigert.
Vorzugsweise wird derselbe Block optimal "phasenverschoben" gespeichert, damit die Schlimmstfall-Zugriffsverzögerung reduziert
wird. So kann beispielsweise in dem oben beschriebenen System, wenn
die Blöcke
je zweimal gespeichert werden, vorzugsweise der Block 1 auch auf
Platte 3 (oder 4) gespeichert werden, wodurch die Schlimmstfall-Verzögerung für einen
neuen Benutzer auf nahezu die halbe Zyklusdauer statt auf die Dauer
eines ganzen Zyklus reduziert wird. Wenn eine der Hauptplatte ausfällt, sind
alle Blöcke
dennoch verfügbar.
Zwei der sieben Blöcke
eines Zyklus werden auf einer Platte verfügbar sein. Das normale "roundrobin"-Ausleseschema kann
nicht länger verwendet
werden. Vorzugsweise wird für
jeden Block entschieden, und zwar auf Basis einer aktuellen Belastung,
aus welcher Speichereinheit der Block ausgelesen werden soll. Wie
oben bereits für
ein System mit beliebiger Speicherung von Blöcken angegeben, wird die Auswuchtung
nicht allzu sehr beeinflusst, wenn nicht alle Blöcke mehrfach vorhanden sind.
Als solches wird die Leistungsdegradation einigermaßen mit
dem herkömmlichen "round-robin"-Schema verglichen.
Das mehrfache Speichern eines Blocks kann die Speicherkosten steigern.
Eine derartige Steigerung kann (teilweise) dadurch verschoben werden,
dass keine einzelne Paritätsplatten
verwendet werden. So können
beispielsweise in einem System in dem "round-robin"-Stil die 20% beliebtesten Titel (meistens
wenigstens 80% des Gebrauchs deckend) zweimal gespeichert werden,
während alle
anderen Titel nur einmal gespeichert werden. Es wird keine Paritätsplatte
mehr verwendet. Wenn eine Platte ausfällt, werden 80% der Benutzer
nicht betroffen. Die 80% am wenigsten beliebte Titel brauchen nicht von
dem Sicherheitsspeicher, wie von einem Band, abgeholt zu werden,
wodurch möglicherweise
20% der Benutzer betroffen werden. In einem derartigen Fall kann
es sein dass es nicht möglich
ist, einige oder all diese Titel zu bedienen, bis die ausgefallene
Platte ersetzt worden oder neu gebaut ist. Es dürfte einleuchten, dass das
Konzept der Multiplikation sich auf ein einziges kohärentes Speichermedium
bezieht, wobei die Speichereinheiten direkt zugreifbar sind und
Redundanz und Belastungsauswuchtung ausschließlich für diese Gruppe von Speichereinheiten
auftritt. Ein Beispiel eines derartigen Speichermediums ist eine
Plattenanordnung mit einer Gruppe von Platten, verbunden über einen
gemeinsamen Bus mit einem Controller. Es dürfte einleuchten, dass nicht
eingeschlossen ist eine Kombination einer derartigen Platteanordnung
und eines Sicherheitsspeichers, wie eines Bandes, der ebenfalls
Blöcke
der Titel speichert. In einer hierarchischen Plattenanordnung, wobei
kleiner Plattenanordnungen gruppiert werden zum Bilden einer großen Plattenanordnung,
bezieht sich das Speichermedium entweder auf die kleinere Plattenanordnung
oder auf die größere, welche
auch immer zur Speicherung aller Blöcke eines einzigen Titels verwendet
wird.
-
Die
Maßnahme,
wie diese in dem Unteranspruch 10 definiert ist, illustriert, dass
ein Titel mehrfach als Ganzes gespeichert sein kann (beispielsweise
zwei- oder dreifach) und dass auf alternative Art und Weise oder
zusätzlich
ein Prozentsatz einzelner Blöcke
des Titels mehrfach gespeichert sein kann. So kann beispielsweise
ein Multiplikationsfaktor von 1,75 darstellen, dass der Titel als
eine Folge nicht überlappender
aufeinander folgender Gruppen von vier Blöcken gesehen werden kann, wobei
drei Blöcke
jeder Grup pe (beispielsweise die ersten drei Blöcke) zweimal gespeichert werden
und ein einziger Block (beispielsweise der letzte Block) nur einmal
gespeichert wird. Auf gleiche Weise kann ein Multiplikationsfaktor
von 2,5 darstellen, dass jeder "ungerade" Block des Titels
zweimal gespeichert wird und dass jeder "gerade" Block dreimal gespeichert wird.
-
Ausführungsbeispiele
der Erfindung sind in der Zeichnung dargestellt und werden im Folgenden
näher beschrieben.
Es zeigen:
-
1 ein
Blockschaltbild des Systems nach der vorliegenden Erfindung,
-
2 ein
Flussdiagramm eines linearen sequentiellen Schemas zum Selektieren
von Speichereinheiten zur Wiedergabe,
-
3 ein
Flussdiagramm eines iterativen linearen sequentiellen Schemas zum
Selektieren von Speichereinheiten zur Wiedergabe,
-
4 ein Schema zum Selektieren von Speichereinheiten
zur Wiedergabe auf Basis der Auflösung eines maximalen Flusses
durch ein Netzwerk von Knotenpunkten,
-
5 eine
Darstellung einer alternativen iterativen Prozedur zum Selektieren
von Speichereinheiten zur Wiedergabe, und
-
6 eine
Darstellung simulierter Ergebnisse für eine Vielfalt von Multiplikationsfaktoren
von keine Multiplikation von Blöcken
zu Vollduplikation aller Blöcke.
-
1 zeigt
ein Blockschaltbild eines Systems 100 nach der vorliegenden
Erfindung. Ein Beispiel eines derartigen Systems 100 ist
ein Multimediaserver. Multimedia-Applikationen können gekennzeichnet sein durch einen
ausführlichen
Gebrauch von audio-visuellem Material. Zur Wiedergabe von Audio
oder Video ist eine (nahezu) kontinuierliche Zulieferung von Audio/Video-Daten
erforderlich. Bekannte Beispiele eines Multimediaservers umfassen
einen "near-video-on-demand"-Server und einen "video-on-demand"-Server. In einem "near-video-on-demand"-System bestimmt
der Dienstanbieter, wann ein Titel wiedergegeben wird. Ein Datenstrom
mit den Daten des Titels kann von vielen Benutzern gleichzeitig
empfangen werden. In einem "video-on-demand"-System selektiert
typischerweise der Benutzer einen Titel und steuert mit VCR-ähnlichen Steuerungen
die Wiedergabe des Titels. Der Pegel der Interaktion ist höher und
ein Datenstrom wird typischerweise nur von einem einzigen Benutzer "konsumiert". Ein Multimediaserver
wird meistens unter Verwendung eines Dateiservers implementiert,
der spezifisch zum Liefern kontinuierlicher Datenströme mit einer
gleichen Datenrate entworfen ist (typischerweise begrenzt durch
eine identische maximale Datenrate) für eine größere Anzahl paralaller Benutzer.
Meistens werden ein oder mehrere Multimediatitel auf einem Hintergrundspeichermedium 110 gespeichert.
Zur Zeit werden normalerweise Platten, wie Festplatten, als Hintergrundspeichermedium 110 verwendet,
und zwar auf Basis deren großen
Kapazität
zu geringen Kosten und der Möglichkeit
eines beliebigen Zugriffs. Es dürfte
einleuchten, dass auch andere Speichermedien, wie optische Platten,
oder sogar Halbleiterspeicherkarten verwendet werden können. Das
Speichermedium ist in eine Anzahl Speichereinheiten aufgeteilt,
von denen beispielsweise 102, 104, 106 und 108 dargestellt
sind. Das Speichermedium 110 ist deswegen durch ein Cluster
von Speichereinheiten, wie ein RAID-System, gebildet. Die Speichereinheit,
wie eine Festplatte, kann an sich weiterhin wieder aufgeteilt sein
(was zu einem hierarchischen Cluster führt). Zwecks der vorliegenden
Beschreibung wird eine derartige aufgeteilte Speichereinheit als
eine Speichereinheit betrachtet (mit einer höheren Bandbreite und/oder einer
größeren Speicherkapazität als die
Subeinheiten innerhalb der Speichereinheit). Für ein typisches Video-on-Demand-System,
das Platten-basierte Speichermedien benutzt, wird die Anzahl Speichereinheiten,
die das Speichermedium 110 bilden, durch die erforderliche Bandbreite
bestimmt. Typischerweise werden alle Datenströme durch Datenelemente in der
Sekunde mit einer gleichen maximalen Verbrauchsrate Rmax begrenzt,
wobei ein Datenelement beispielsweise ein Byte sein kann. Für MPEG-2
codiertes Material wird die maximale Verbrauchsrate typischerweise
derart gewählt,
dass diese zwischen etwa 2 oder 15 Mbit/s liegt, je nach der gewünschten
Qualität.
Ein System, entworfen zum gleichzeitigen Unterstützen von bis zu Nmax Datenströme erfordert
im Wesentlichen Nmax·Rmax/B
Speichereinheiten, wobei B die Bandbreite einer einzelnen Speichereinheit
ist. Es dürfte
einleuchten, dass in der Praxis die maximale Verbrauchsrate für einen
bestimmten Datenstrom niedriger sein kann, beispielsweise wenn der
entsprechende Titel von geringerer Qualität oder von einem anderen Typ
ist (beispielsweise Audio, während
die meisten Ströme
eine Kombination von Audio und Video betreffen) als eine Schlimmstfall-Situation,
wofür das
System üblicherweise
entworfen worden ist.
-
Das
System 100 umfasst einen Leser 180 zum Auslesen
von Daten aus dem Speichermedium 110. Der Leser 180 kann
beispielsweise unter Verwendung einer SCSI-Schnittstelle implementiert werden.
Auf vorteilhafte Weise ist das Speichermedium 110 auch
in dem System 100 vorgesehen. Für ein Platte-orientiertes Speichermedium 100 werden
Daten als ein "Disk
Access Block" (DAB)
abgerufen. Je nach dem gewählten Steuerungsalgorithmus
kann ein Vorzug gegeben werden um Daten als DABs mit einer festen Größe auszulesen
oder als DABs mit einer variablen Größe. DABs, die nacheinander
aus derselben Platte ausgelesen werden, werden typischerweise nicht
aneinander grenzend auf der Platte gespeichert. Meistens gehören DABs, die
nacheinander aus derselben Platte ausgelesen werden, zu verschiedenen
Dateien (wobei eine Datei die Sammlung von Blöcken ist, die zu einem Titel
gehören),
da die Platte DABs für
eine Anzahl Datenströme
liefern muss, und zwar auf eine bestimmte verschlüsselte Art
und Weise. Sogar wenn DABs, die nacheinander ausgelesen werden sollen,
zu derselben Datei gehören,
nach der vorliegenden Erfindung werden aufeinander folgende Blöcke einer
Datei nicht aneinander grenzend in einer Speichereinheit gespeichert,
sondern werden beliebig über
die Speichereinheiten des Speichermediums 110 verteilt.
Dadurch, dass DABs nicht aneinander grenzend ausgelesen werden,
braucht der Plattenkopf zwischen dem Auslesen eines DABs verlagert
zu werden und der geeignete Startpunkt eines nächsten DABs soll warten. Eine
derartige Umschaltung nimmt viel Zeit, in der keine Daten gelesen
werden können.
Um das Schalten zu reduzieren wird oft die sog. "Disk Sweeping"-Technik angewandt. In einem derartigen
Schema ist der Leser 180 imstande, eine Anzahl, beispielsweise
acht, DABs aus der Speichereinheit 110 in einem einzigen
Vorgang auszulesen. Die DABs dieses Vorgangs werden auf Basis deren
physikalischer Spurlage geordnet. Für den Lesevorgang wird der
Plattenkopf in nur einer Richtung verlagert (beispielsweise von
Innen nach Außen
und umgekehrt), wobei nur zum Lesen der DABs des Batches angehalten
wird. Auf diese Weise wird das Schalten wesentlich reduziert. Auf vorteilhafte
Weise wird ein Leser 180 verwendet, der ein Batch ausgelesener
Anträge
akzeptiert und intern die erforderliche Planung der beantragten
Lesevorgängen
durchführt,
damit die meist optimale Auslesung für die betreffende Platte durchgeführt wird.
Der Leser 180 kann auch einen Cachspeicher aufweisen zur
vorübergehenden
Speicherung von Daten, ausgelesen aus der Platte vor der Lieferung
der Daten, ggf. in einer anderen Sequenz als ausgelesen aus der
Platte, über
einen Bus 140 zu dem restlichen Teil des Systems 100.
Es dürfte einleuchten,
dass die Rolle des Lesers, wie die Steuerung, das Arrangieren einer
Reinigungssequenz und das in den Cachspeicher bringen ausgelesener
Daten, auch verteilt sein kann, wobei jede der Speichereinheiten einen
eigenen Controller hat, der diese Funktionen durchführt. Sollte
dies der Fall sein, so ist eine Hauptaufgabe der Lesers 180 die
Vorgänge
der jeweiligen "intelligenten" Steuereinheiten
zu koordinieren.
-
Insbesondere
für Video
kann ein Datenstrom sehr aufwendig sein. Um das Volumen zu reduzieren werden
typischerweise Kompressionstechniken durchgeführt. Das Kompressionsschema
kann zu einem Datenstrom mit einer festen Rate führen, beispielsweise unter
Anwendung einer Form von MPEG-1-Codierung mit einer festen Rate,
oder eines Datenstroms mit einer variablen Rate, beispielsweise
unter Anwendung einer Form von MPEG-2-Codierung mit variabler Rate.
Das System nach der vorliegenden Erfindung setzt voraus, dass für Datenströme mit variabler
Rate eine feste identische maximale Verbrauchsrate von Rmax Datenelemente in der Sekunde gegeben
wird, was zum Bemessen des Systems benutzt wird (beispielsweise
Bandbreite des Systems und/oder Größe des Speichers) damit gewährleistet
wird, dass das System in einer Schlimmstfall-Situation noch arbeitet
(beispielsweise wenn alle Datenströme Daten mit der maximalen
Datenrate verbrauchen). Normalerweise werden die Daten von dem System 100 in
komprimierter Form in dem Speichermedium 110 gespeichert
und verarbeitet. Nur bei dem Benutzer 130 wird der Datenstrom
decodiert, und zwar unter Verwendung eines Decoders. Insbesondere
für ein
System mit variabler Rate kann das System 100 auch imstande
sein, VCR-ähnliche
Steuerfunktionen zu unterstützen.
In einem derartigen Fall kann ein Datenstrom in einem sich in einem
Zustand einer Anzahl Zustände
befinden, wie in einem aktiven und einen unterbrochenen Zustand,
wobei ein aktiver Datenstrom einem Benutzer Daten liefern kann und
ein unterbrochener Datenstrom kann zu der betreffenden zeit einem
Benutzer keine Daten liefern. Typischerweise bleiben, wenn ein Benutzer
vorübergehend
aufhört,
Daten zu verbrauchen, die Ströme
aktiv. Wenn der Benutzer Ströme
schaltet (beispielsweise explizit einen neuen Titel selektiert oder
implizit mit einem neuen Strom versehen wird, beispielsweise wenn
das System instruiert wird, in der schnellen Vorlaufmode zu arbeiten,
was dazu führt,
dass ein neuer Strom mit demselben Titel selektiert wird, der schnell
abgespielt wird), wird der Strom vorübergehend angehalten, damit
neue Daten geladen werden können.
Es dürfte
einleuchten, dass eine Zeitlupenfunktion dadurch implementiert werden
kann, dass Daten mit einer niedrigen Rate verbraucht werden (der
Strom ist nach wie vor aktiv) oder dass zu einem neuen Strom geschaltet
wird (der Strom wird vorübergehend
angehalten). Das System 100 behält für den Datenstrom einen Stromzustand,
der den aktuellen Zustand angibt. Der Stromzustand für einen
oder mehrere Datenströme
kann in einem Zustandsspeicher 190 gespeichert werden,
wie in dem Hauptspeicher (RAM) des Servers oder in Spezialregistern.
-
Daten
werden aus dem Speichermedium 100 für nur einen Datenstrom gleichzeitig
ausgelesen, oder, wie oben beschrieben, für ein Batch von Datenströmen, wo bei
die Daten des Batches als ein Zeitmultiplex-Strom über den
Bus 140 geliefert werden. In allen Fällen ist das Speichermedium 100 nicht
imstande, simultan kontinuierlich Datenströme zu allen Benutzern des Systems
zu liefern. Stattdessen werden Daten für einen Subsatz von Datenströmen ausgelesen
und dem restlichen Teil des Systems 100 mit einer höheren Datenrate
als von den entsprechenden Datenströmen verbraucht, zugeführt. Das
System 100 umfasst dazu Puffer 120 um zu erreichen,
dass Daten mit der erforderlichen Rate den Benutzern 130 zugeführt werden.
Meistens werden die Puffer 120 unter Verwendung eines RAMs
implementiert. Das System 100 umfasst weiterhin Kommunikationsmittel 150 zum Übertragen
von Datenströmen
zu Benutzern. Die Kommunikationsmittel 150 können von
allen beliebigen geeigneten Mitteln gebildet werden, wie einem LAN,
zum Liefern der Daten zu den Benutzern, die in der Nähe des Systems 100 sind.
In der Praxis wird ein Telekommunikations- oder Kabelnetzwerk verwendet
zum Liefern der Daten über
einen größeren Abstand.
-
Das
System 100 umfasst auch eine Steuereinheit 160 zur
Steuerung des Systems 100. Ein Hauptteil der Steuereinheit
wird durch den Scheduler 170 gebildet, der bestimmt, welche
DABs von dem Leser 180 aus dem Speichermedium 110 ausgelesen
werden sollen, damit vermieden wird, dass ein Unterfluss oder ein Überfluss
der Puffer 120 auftritt. Die Steuereinheit wird typischerweise
durch einen Prozessor, wie einen RISC-Prozessor oder einen Prozessor von dem
CISC-Typ, der unter Ansteuerung eines in Echtzeit arbeitenden Systems
arbeitet, das von einem Speichermedium, wie einem ROM oder einer
Festplatte, geladen wird. Der Scheduler 170 kann als Software-Modul
integriert in das Operationssystem implementiert werden oder als Applikationsprogramm
geladen werden. Typischerweise empfängt der Scheduler 170 Zustandsinformation, wie
einen Füllgrad
der Puffer, wobei bei diesem Empfang der Scheduler 170 seine
Entscheidung trifft. Für
Systeme, die VCR-ähnliche
Steuerungen bieten, empfängt
der Scheduler ebenfalls Information in Bezug auf den Zustand eines
Stroms. In derartigen Systemen wird Steuerinformation typischerweise
von den Benutzern 130 über
die Kommunikationsmittel 150 empfangen.
-
In
dem System nach der vorliegenden Erfindung wird eine Selektion von
Blöcken
mehrfach in dem Speichermedium 110 dadurch gespeichert,
dass sie in wenigstens zwei verschiedenen und beliebig selektierten
Speichereinheiten gespeichert wird. Der Block wird vollständig multipliziert.
Dadurch ist ein derartiger Block vollständig von allen Speichereinheiten
verfügbar,
in denen der Block gespeichert ist (dies im Gegensatz zu der Verwendung
einer Form eines Fehlerdetektions- oder Korrekturcodes, wobei ein
Teil eines Blocks manchmal aus anderen Teilen neu erzeugt werden
kann, die in anderen Speichereinheiten gespeichert sind). Die Blöcke können Off-Line
in den Speichereinheiten gespeichert werden (d.h. nicht während das
System operationell ist beim Liefern von Daten zu Benutzern). So
kann es beispielsweise möglich
sein, das System (oder einen Teil des Systems) Off-Line umzuschalten,
wodurch es ermöglicht
wird, dass Titel von den Speichereinheiten hinzugefügt (oder
entfernt) werden. Auf alternative Art und Weise können die
Speichereinheiten von einem entfernbaren Typ sein, wobei ein separates
System (beispielsweise bei dem Inhaber der Titel vorhanden oder
bei dem Verteiler der Titel zu einem Video-on-Demand-Serveranbieter) auf die gewünschte Art
und Weise zur Speicherung der Titel auf den Speichereinheiten verwendet
wird. Meistens aber werden die Titel in den Speichereinheiten gespeichert,
während
das System operationell ist. Ein Teil der Bandbreite kann zum Ändern von Titeln
reserviert werden, die in den Speichereinheiten gespeichert sind
oder ein derartiger Vorgang kann zu Zeitpunkten durchgeführt werden,
wenn das System nicht völlig
belastet ist (d.h. wenn das System nicht der maximalen Anzahl Datenströme bedient,
wie dies während
bestimmter Teile der Nacht, insbesondere wochentags üblich ist).
Das System (oder das separate System) umfasst (in der Figur nicht
dargestellte) Mittel zur vielfachen Speicherung einer Selektion
von Blöcken
in dem Speichermedium, durch Gewährleistung,
dass ein derartiger Block in wenigstens zwei Speichereinheiten gespeichert
ist. Vorzugsweise wird ein derartiger Block in genau zwei Speichereinheiten
gespeichert, wobei die Speichereinheiten beliebig aus dem Satz von
Speichereinheiten des Speichermediums 110 selektiert werden.
Die Selektion der Platten wird vorzugsweise für jeden mehrfach zu speichernden
Block separat durchgeführt.
Ein (pseudo)beliebiger Sequenzgenerator kann verwendet werden zum
Erzeugen einer beliebigen Zahl innerhalb des Bereichs verfügbarer Speichereinheiten. Für jeden
nachfolgenden Block der Selektion von Blöcken gibt eine nächste beliebige
Nummer die Speichereinheit an, in der die Mittel den Block speichern.
Wie nachstehend noch detailliert beschrieben wird, ermöglicht die
beliebige Selektion der Speichereinheiten eine gute Auswuchtung
der Belastung, wenn die Blöcke
abgerufen werden. Nebst der Selektion der Speichereinheit(en) auf
eine (pseudo)beliebige Art und Weise, dürfte der Fachmann imstande
sein, einen geeigneten Algorithmus zu entwerfen oder zu selektieren,
der für
ein bestimmtes System den gewünschten "Beliebigkeit"-Effekt erreicht.
Offenbar wird bevorzugt, dass ein Block, der mehrfach gespeichert
wird, jeweils in einer anderen Speichereinheit gespeichert wird,
das sonst die Multiplikation nicht zu einer Verbesserung der Belastungsauswuchtung
führt (und
auch nicht zu einer Verbesserung der Robustheit). Dies kann auf
einfache Art und Weise dadurch erreicht werden, dass, wenn eine
erzeugte beliebige Nummer einer Speichereinheit entspricht, die
bereits den betreffenden Block speichert, eine nächste beliebige Nummer verwendet
wird. Es dürfte
einleuchten, dass statt der Speicherung eines selektierten Blocks
in zwei Speichereinheiten die Blöcke
auch in mehr Speichereinheiten gespeichert werden können. Je
mehr Speichereinheiten verwendet werden, umso weniger "beliebig" die Zuordnung eines
zu Speichereinheiten zu sein braucht. Es sei bemerkt, dass "Balanced Allocations" von Y. Azar u. a. "ACM Symposium on
the Theory of Computing" Seiten
593–602,
1994 beschreibt, dass wenn n Bälle
in n Kästen
gelegt werden, wobei für
jeden Ball beliebig zwei Kästen
selektiert sind und der Ball wird in denjenigen Kasten gelegt, der
zu dem Zeitpunkt der Unterbringung weniger voll ist, mit hoher Wahrscheinlichkeit
der meistgefüllte
Kasten nur 1n 1n n/1n 2 + O(1) Bälle
enthält.
Dies ist exponentiell weniger als wenn der Ball in einen beliebig
gewählten
Kasten gelegt wurde, was dazu führen
würde,
dass der meist gefüllte
Kasten mit hoher Wahrscheinlichkeit 1n n/1n 1n n(1 + o(1)) Bälle enthält. Diese
Ergebnisse zeigen, dass insbesondere für eine Vielzahl von Blöcken Duplikation
aller Blöcke
vollständig
und Speicherung der Blöcke
beliebig auf zwei Platten dazu führt,
dass die Platten im Wesentlichen eine gleiche Anzahl Blöcke enthalten.
Für praktische
Zwecke kann vorausgesetzt werden, dass die Anzahl Blöcke, die
auf einer bestimmten Platte gespeichert sind, nahe bei einer mittleren
Anzahl Blöcke
liegt, die auf allen Platten gespeichert sind.
-
Die
Selektion von Blöcken,
die mehrfach gespeichert werden, kann alle Blöcke aller Titel in dem System
betreffen. Auf alternative Weise entspricht die Selektion allen
Blöcken
eines Subsatzes aller Titel in dem System. Auf vorteilhafte Weise
wird ein derartiger Subsatz durch die beliebtesten Titel gebildet
(beispielsweise die Sammlung von Titeln, die einen vorbestimmten
Prozentsatz decken, wie 90%, aller Zugriffe von Benutzern, oder
einen Prozentsatz, wie 10%, aller Titel, auf die am meisten zugegriffen
wird). Auf alternative Weise oder in Kombination kann die Selektion
von Blöcken
einem Subsatz von Blöcken
eines Titels entsprechen. So wird beispielsweise jeder zweite Blocke
eines Titels mehrfach gespeichert, während die anderen Blöcke eines
Titels nur einmal gespeichert werden. Es dürfte einleuchten, dass viele
Abwandlungen möglich
sein. So kann beispielsweise von einer Gruppe von drei aufeinander
folgenden Blöcken
eines Titels der erste Block einmal gespeichert werden, der zweite
Block zweimal, und der dritte Block dreimal. Auch die Frage, welcher
Block der Blöcke
einer Gruppe mehrfach gespeichert wird, kann anders sein, beispielsweise
beliebig selektiert werden.
-
Im
Allgemeinen beziehet sich die Blöcke,
die in dem Speichermedium 110 gespeichert sind, auf eine Anzahl
Titel, wobei jeder Titel (meistens als Datei gespeichert) eine Folge
von Datenblöcken
aufweist. Vorzugsweise ist jeder Titel (oder eine Gruppe von Titeln)
mit einem vorbestimmten Multiplikationsfaktor assoziiert. Der Multiplikationsfaktor
eines Titels bezieht sich auf ein Verhältnis der Anzahl Blöcke, die
in dem Speichermedium für
den Titel gespeichert sind und der Anzahl Blöcke des Titels. Wenn beispielsweise
der Titel N Blöcke
aufweist und der Titel ist als M Blöcke (M ≥ N) gespeichert, dann ist der
Multiplikationsfaktor durch M/N gegeben. Wenn beispielsweise alle
1000 Blöcke
eines Titels (N = 1000) dupliziert werden, was zu M = 2000 führt, dann
ist der Multiplikationsfaktor 2. Auf gleiche Weise ist, wenn alle
Blöcke
dreimal gespeichert sind, der Multiplikationsfaktor 3. Als Solcher
gibt der Multiplikationsfaktor eines Titels an, wie oft einzelne
Blöcke
des Titels in dem Speichermedium gespeichert sind. Andererseits
ist, wenn die Hälfte
der Blöcke
eines Titels zweimal gespeichert sind und die andere Hälfte ist
nur einmal gespeichert, der Multiplikationsfaktor 1,5. Wenn drei von
vier Blöcken
eines Titels (d.h. 75% des Titels) zweimal gespeichert ist und das
restliche Viertel ist nur einmal gespeichert, dann ist der Multiplikationsfaktor
1,75 (M = 750·2
+ 250·1
= 1750). In diesen Beispielen gibt der Multiplikationsfaktor eines
Titels an, welcher Prozentsatz Blöcke des Titels mehrfach in
dem Speichermedium gespeichert ist. Vorzugsweise gibt der ganze
Teil des Multiplikationsfaktors (weniger eins) an, wie oft einzelne
Blöcke
des Titels in dem Speichermedium gespeichert sind, während der
restliche Teil einen Prozentsatz Blöcke angibt (weniger als alle
Blöcke)
des Titels, die noch einmal in dem Speichermedium 100 gespeichert sind.
Es dürfte
einleuchten, dass andere Kombinationen ebenfalls möglich sind.
Wenn beispielsweise die Hälfte
der Blöcke
einmal und die andere Hälfte
dreimal gespeichert ist, ist der Multiplikationsfaktor auch 2 (M
= 500·1
+ 500·3
= 2000). Ein derartiges spezifisches Multiplikationsschema kann
für bestimmte
Titel verwendet werden, in denen beispielsweise auf einen Teil des
Titels sehr oft zugegriffen wird wobei aber andere Teile meistens übersprungen
werden. Es dürfte
einleuchten, dass statt eines Multiplikationsfaktors von M/N auch andere
Multiplikationsfaktoren verwendet werden können, die den Grad der Multiplikation
der selektierten Blöcke
ausdrücken.
-
Vorzugsweise
ist der Multiplikationsfaktor eines Titels von der Beliebtheit des
Titels abhängig.
Auf vorteilhafte Weise wird für
die beliebtesten Titel ein hoher Multiplikationsfaktor gewählt, während für "alt und beliebt", worauf weniger
oft zugegriffen wird, ein niedrigerer Multiplikationsfaktor verwendet
wird. Die Multiplikationsfaktoren können derart gewählt werden,
dass für
eine Typische Anwendung des Systems (d.h. mit einer mittleren Auswuchtung
zwischen beliebten und weniger beliebten Titels) der mittlere Multiplikationsfaktor
auf einem gewünschten
Pegel liegt. Offenbar kann der Multiplikationsfaktor für Gruppen
von Titeln gewählt
werden, kann aber auch für
einzelne Titel gewählt
werden.
-
Der
Scheduler 170 steuert das Auslesen von Blöcken aus
dem Speichermedium 110. Im Betrieb empfängt der Scheduler 170 einen
Antrag zum Auslesen eines neuen Blocks, beispielsweise wenn einer
der Puffer 125 Raum hat zur Speicherung eines neuen Blocks
oder wenn einer der Benutzer einen neuen Titel selektiert. Es dürfte einleuchten,
dass der Scheduler 170 auch aktiv überprüft, ob die Puffer 125 Raum
haben für
neue Blöcke.
Wenn ein neuer Block erforderlich ist, bestimmt der Scheduler 170 einen
Satz von Speichereinheiten, in denen der Block gespeichert wird.
Wenn der Block in nur einer Speichereinheit gespeichert wird (d.h.
der Block gehört
nicht zu der Selektion von Blöcken,
die mehrfach gespeichert werden), stellt der Scheduler einen Antrag
zum Auslesen des Blocks an die Speichereinheit. Wenn der Block mehrfach
gespeichert ist, wählt
der Scheduler 170 eine dieser Speichereinheiten und stellt
den Antrag zum Auslesen des Blocks an die gewählte Speichereinheit. Der Scheduler
selektiert die Speichereinheit aus dem Satz, und zwar derart, dass
die Belastung an den Speichereinheiten des Speichermediums 100 ausgewuchtet
ist.
-
In
Reaktion auf einen Blockausleseantrag, gestellt durch den Scheduler 170 arrangiert
der Leser 180, dass der entsprechende Block aus der betreffenden
Speichereinheit ausgelesen wird. Der ausgelesen Block wird in einem
der Puffer 125 gespeichert, der dem Datenstrom entspricht,
für den
der Block zur Zuführung
zu einem Benutzer ausgelesen wurde.
-
In
einer einfachen Ausführungsform
des Systems nach der vorliegenden Erfindung erledigt der Scheduler
einen Antrag zum Abholen eines Blocks für einen Datenstrom auf einer
individuellen Basis. Wenn ein Antrag eintrifft (oder der Scheduler 170 detektiert
auf eigener Initiative, dass ein neuer Block angefordert wird), selektiert
der Schedu ler 170 aus dem entsprechenden Satz diejenige
Speichereinheit, die zu dem betreffenden Zeitpunkt die geringste
Belastung hat. Es finden weder Neuzuordnungen von vorhergehenden
Anträgen
statt, noch werden Erwägungen
gegeben zum Abholen eines Blocks, der bereits bei dem Scheduler
eingetroffen sein kann. Der einzige Einfluss vorhergehender Blockanträge ist über die
Belastung der Speichereinheiten, was auf Basis der Blockausleseanträgen bestimmt
wird, die bereits zugeordnet wurden, für die aber bisher noch kein
Block ausgelesen worden ist. Es dürfte einleuchten, dass unter
praktischen Umständen
der Scheduler 170 nur zugeordnete Blockanträge berücksichtigen
kann, von denen der Scheduler 170 imstande ist, den Zustand
zu bestimmen. So kann beispielsweise der Leser 180 (oder
einzelne Controller der Speichereinheiten) imstande sein in Hardware
eine bestimmte Form interner Scheduling durchzuführen um die Reinigungssequenz
zu optimieren. Wenn ein Ausleseantrag einmal gestellt worden ist,
kann es sein, dass der Scheduler 170 nicht länger imstande
ist, zu bestimmen, wann der aktuelle Block ausgelesen werden soll
oder ausgelesen ist. Als solcher kann der Scheduler 170 derartige
Blockausleseanträge
als beendet betrachten und dass sie nicht länger zu der Belastung beitragen.
In einer alternativen Ausführungsform
des Systems nach der vorliegenden Erfindung wuchtet der Scheduler 170 die
Belastung an den Speichereinheiten dadurch aus, dass er mi8t einer
Gruppe von mehr als einem Antrag zum Abrufen eines Block gleichzeitig
fertig wird. Dadurch gibt es nicht nur die Möglichkeit einer besseren Auswuchtung,
sondern es stimmt auch mit einer zyklischen Annäherung überein, die üblicherweise
in Video-Servern verwendet wird, wobei in jedem Zyklus zunächst ermittelt wird,
für welche
Datenströme
ein Block ausgelesen werden soll, dass danach die entsprechenden
Blockausleseanträge
zugeordnet werden und dass zum Schluss die Blocke in einem Reinigungsdurchgang
ausgelesen werden. Der Reinigungsdurchgang kann ggf. für alle Speichereinheiten
synchronisiert werden. Nach der vorliegenden Erfindung bestimmt
der Scheduler 170 zunächst
eine Gruppe von Blöcken,
die innerhalb eines nächsten
Zyklus ausgelesen werden sollen. Danach selektiert der Scheduler 170 für alle Blöcke der
Gruppen, aus welcher Speichereinheit der Block ausgelesen werden
soll, so dass die Belastung an den Speichereinheiten ausgewuchtet
ist und ordnet einen entsprechenden Ausleseantrag zu. Zum Schluss
sorgt der Scheduler 170 dafür, dass der Leser 180 die
entsprechenden Blöcke
aus den zugeordneten Speichereinheiten ausliest. Dadurch, dass nur
die Belastung betrachtet wird, die aus Zuordnungen für die Gruppe
herrührt,
kann die Belastung wenigstens für
die betreffenden Speichereinheiten ausgewuchtet werden (d.h. diejenigen
Speichereinheiten, die ein Kopie eines der auszulesenden Blöcke enthalten).
Da typischerweise die Gruppe wesentlich größer sein wird als die gesamte
Anzahl Speichereinheiten, werden meistens alle Speichereinheiten
betroffen. Auf alternative Weise kann der Scheduler 170 auch
die Belastung berücksichtigen,
die von einer Zuordnung einer vorhergehenden Gruppe herrührt, wenn
diese Gruppen noch nicht alle ausgelesen wurden. Wie oben beschrieben,
werden normalerweise Blockausleseanträge nur von dem Scheduler 170 ausgegeben,
und zwar um die Zeit, wo der Leser 180 alle Blöcke für die vorhergehende
Gruppe gelesen hat. In einer derartigen Annäherung reicht es, dass nur
die Belastung ausgewuchtet wird, die aus Blöcken der Gruppe herrühren, da
es keine Belastung mehr gibt, herrührend aus anderen Gruppen.
-
2 zeigt
ein Flussdiagramm der Wirkungsweise des Schedulers 170 in
einer weiteren Ausführungsform
des Systems nach der vorliegenden Erfindung, wobei der Scheduler
sequentiell mit den Blöcken
der Gruppe fertig wird. Es wird vorausgesetzt, dass es eine bestimmte
Sequenz in den Blöcken
gibt. Die Sequenz an sich ist nicht wichtig. Die Sequenz kann beispielsweise
die Sequenz sein, worin der Scheduler 170 den Antrag empfängt zum
Abrufen des Blocks. Eine alternative Sequenz kann auf der Sequenz
der Puffer basieren, für
die der Block geleint ist. Vorzugsweise wird für ein System, das verschiedene
Multiplikationsfaktoren benutzt, die Sequenz durch den Multiplikationsfaktor
bestimmt, wobei Ausleseanträge
für Blöcke mit
einem niedrigen Multiplikationsfaktor zunächst zugeordnet werden und
Anträge
für Blöcke mit
einem hohen Multiplikationsfaktor als letztere. Auf diese Art und
Weise ist für
alle Blöcke
Wahlfreiheit verfügbar
(für die
ersten Blöcke, da
die Speichereinheiten noch nicht stark belastet sind; für die letzten
Blöcke
durch die Wahl, herrührend
aus dem höheren
Pegel der Multiplikation), was zu einer besseren Belastungsauswuchtung
führt.
In dem Schritt 200 selektiert der Scheduler einen ersten
Block der Sequenz. Ein selektierter Block wird in den Schritten 210, 220 und
ggf. in dem Block 230 verarbeitet. In dem Schritt 240 testet
der Scheduler 170, ob alle Blöcke der Gruppe verarbeitet
worden sind. Sollte dies der Fall sein, so wird der Vorgang beendet.
Sollte dies nicht der Fall sein, so wird in dem Schritt 250 ein
nächsten
Block der Gruppe selektiert und der Prozess wird in dem Schritt 210 fortgesetzt.
Für jeden
Block bestimmt der Scheduler 170 in dem Schritt 210 einen
Satz mit Speichereinheiten, in denen der Block gespeichert wird.
In dem Schritt 215 wird ein etwaiger Test durchgeführt, der Bei
Systemen angewandt werden kann, in denen nicht alle Blöcke mehrfach
gespeichert werden. Wenn der Block in nur einer einzigen Speichereinheit
gespeichert ist (d.h. der Block gehört nicht zu der Selektion von Blöcken, die
mehrfach gespeichert werden), ordnet der Scheduler in dem Schritt 220 einen
Ausleseantrag zum Auslesen des Blocks der Speichereinheit zu. Wenn
der Block mehrfach gespeichert wird, wählt der Scheduler 170 in
dem Schritt 230 eine der Speichereinheiten aus dem Satz
und ordnet in dem Schritt 220 den Ausleseantrag zum Auslesen
des Blocks der gewählten
Speichereinheit zu. Der Scheduler selektier die Speichereinheit,
die zu dem betreffenden Zeitpunkt eine sehr niedrige Belastung hat,
herrührend
von Blockausleseanträgen,
die bereits für
vorhergehend verarbeitete Blöcke
der Gruppe zugeordnet worden sind. Dieser Algorithmus wird weiterhin
als lineare Zuordnungsalgorithmus bezeichnet.
-
3 zeigt
ein Flussdiagramm der Wirkungsweise des Schedulers 170 in
einer weiteren Ausführungsform
des Systems nach der vorliegenden Erfindung. In dem Schritt 310 führt der
Scheduler 170 eine Anfangszuordnung durch. Der Scheduler
selektiert für
jeden der Blöcke
der Gruppe eine vorläufige
Speichereinheit und ordnet den entsprechenden Blockausleseantrag
der vorläufigen
selektierten Speichereinheit zu. Der Selektionsprozess kann einfach
sein, wie immer beim selektieren einer ersten Speichereinheit aus
dem Satz (wobei die Speichereinheiten derart betrachtet werden,
als seien sie sequentielle gegliedert) oder bei beliebigen Selektieren
einer Speichereinheit aus dem Satz von Speichereinheiten. Vorzugsweise
wird die Anfangszuordnung in dem Schritt 310 unter Anwendung
des sequentielle Zuordnungsschemas nach 2 durchgeführt, wobei
die Auswuchtung innerhalb der Gruppe berücksichtigt wird. Nach der Anfangszuordnung
startet der Scheduler 170 eine Wiederholungsprozedur, in
der für
jeden Block der Gruppe eine Speichereinheit neu selektiert wird
und der entsprechende Blockausleseantrag neu zugeordnet wird. Vorzugsweise
wird die Neuzuordnung wie folgt durchgeführt, was dem Schema aus 2 entspricht.
Wenn vorausgesetzt wird, dass es in den Blöcken eine gewisse Sequenz gibt,
selektiert der Scheduler 170 in dem Schritt 320 einen
ersten Block der Sequenz. Ein selektierter Block wird in den Schritten 330, 340 und 350 verarbeitet.
In dem Schritt 360 testet der Scheduler 170, ob
alle Blöcke
der Gruppe verarbeitet worden sind. Sollte dies der Fall sein, dann
ist eine Schleife der Wiederholungsprozedur beendet. Sollte dies
nicht der Fall sein, so wird in dem Schritt 370 ein nächster Block
der Gruppe selektiert und der Prozess wird mit dem Schritt 330 fortgesetzt.
In dem Schritt 380 überprüft der Scheduler 170,
ob eine Bedingung zum Beenden der Schleife erfüllt worden ist. Sollte dies
der Fall sein, so wird die Schleife beendet, sonst wird in dem Schritt 320 eine
nächste
Schleife gestartet. Die Bedingung an sich kann eine einfache Bedingung
sein, wie ob die Schleife eine vorbestimmte Anzahl Male durchgeführt worden
ist, oder ob die maximale Belastung, herrührend von der letzten Schleife,
dieselbe ist wie bevor die Schleife gestartet wurde. Für jeden
Block bestimmt der Scheduler 170 in dem Schritt 330,
in welchem Satz von Speichereinheiten der Block gespeichert wird.
In dem Schritt 335 wird ein etwaiger Test durchgeführt, der in
Systemen angewandt werden kann, in denen nicht alle Blöcke mehrfach
gespeichert werden. Wenn der Block in nur einer einzige Speichereinheit
gespeichert wird (d.h. der Block gehört nicht zu der Selektion von Blöcken, die
mehrfach gespeichert werden), ordnet der Scheduler in dem Schritt 340 einen
Ausleseantrag zum Auslesen des Blocks der Speichereinheit zu. Wenn
der Block mehrfach gespeichert wird, wählt der Scheduler 170 in
dem Schritt 350 eine der Speichereinheiten aus dem Satz
und ordnet in dem Schritt 340 den Ausleseantrag zum Auslesen
des Blocks der gewählten
Speichereinheit zu. Der Scheduler 170 selektiert die Speichereinheit,
die zu dem betreffenden Zeitpunkt eine sehr geringe Belastung hat,
herrührend
aus den Blockausleseanträgen,
die bereits für
vorher verarbeitete Blöcke
der Gruppe zugeordnet worden sind. Dieser Algorithmus wird weiterhin
als der lineare Neuzuordnungsalgorithmus bezeichnet, wobei die Anfangszuordnung
durch den linearen Zuordnungsalgorithmus durchgeführt wird.
-
Bei
einer weiteren Ausführungsform
nach der vorliegenden Erfindung ordnet der Scheduler 170 Blockausleseanträge für die Blöcke der
Gruppe entsprechend einer Zuordnung zu, hergeleitet von der Lösung eines ähnlichen
Maximalflussproblems. Wie in dem Schritt 310 nach 3 führt der
Scheduler 170 zunächst eine
Anfangszuordnung dadurch durch, dass für jeden der Blöcke der
Gruppe eine vorläufige
Speichereinheit selektiert wird und dass der entsprechende Blockausleseantrag
der vorläufigen
selektierten Speichereinheit zugeordnet wird. Ein ähnliches
maximales Flussproblem wird wie folgt definiert. Es wird ein Netzwerk
von Knotenpunkten ni definiert, die für jede Speichereinheit
si einen entsprechenden Knotenpunkt haben
(Vertex) ni. Das Netzwerk umfasst ebenfalls
einen Quellen-Knotenpunkt (s) und einen Senken-Knotenpunkt (d).
Jeder Knotenpunkt ni ist mit nj (ni ≠ nj) verbunden, und zwar über einen entsprechenden Bogen
(gerichteten Rand) mit einer Kapazität entsprechend der Anzahl Blöcke, die
in si sowie in sj gespeichert
sind und für
die der entsprechende Blockausleseantrag si zugeordnet
worden ist. As sich gibt die Kapazität die Anzahl Blöcke an,
die von si bis sj neu
zugeordnet werden können. 4A zeigt
ein Netzwerk für
drei Speichereinheiten si bis sj,
dargestellt durch die betreffenden Knotenpunkte n1 bis
n3. In dem Beispiel wird vorausgesetzt,
dass die betreffenden Anfangsbelastungen der Speichereinheiten si bis s3 15, 12 und
10 sind (wie in der Mitte jedes entsprechenden Knotenpunktes angegeben).
Neben jedem Bogen von dem Einen Knotenpunkt zu dem anderen ist angegeben,
wie viele Blockausleseanträge
neu zugeordnet werden können
zwischen den Speichereinheiten entsprechend den Knotenpunkten (so
können
beispielsweise in dem Beispiel drei Blöcke von s1 bis
s3 neu zugeordnet werden und zwei von s3 bis s1. Das Problem
ist derart definiert, dass bestimmt werden kann, ob die maximale
Belastung lmax an den Speichereinheiten
um k Einheiten verringert werden kann, wobei die Belastung von der
vorläufigen
Zuordnung von Blockausleseanträgen
zu den Speichereinheiten herrührt.
Dazu wird die Quelle s über
einen entsprechenden Bogen mit einer Kapazität von max(k + li – imax, 0) mit jedem Knotenpunkt ni verbunden.
In dieser Formel entspricht li einer Belastung
der Speichereinheit si, herrührend aus
den Blockausleseanträgen,
die bereits vorher si zugeordnet wurden.
Folglich wird die maximale Belastung lmax durch
lmax = max{1i} über alle
Speichereinheiten gegeben. In dem Beispiel nach 4A ist
lmax = 15. Weiterhin ist jeder Knotenpunkt
ni über
einen entsprechenden Bogen mit einer Kapazität von max(lmax – li – k,
0) mit der Senke d verbunden. In dem Beispiel nach 4A ist
k entsprechend 2 gewählt
und die entsprechenden Kapazitäten der
Quelle zu den betreffenden Knotenpunkten und von den Knotenpunkten
zu der Senke sind dargestellt. Daraufhin wird der maximale Fluss
durch das Netzwerk berechnet. 4B zeigt
ein mögliches
Ergebnis des berechneten Flusses. Neben jedem Bogen ist der Fluss
angegeben (anders als in 4A, wobei
die Kapazität angegeben
wurde). Der Fluss in einem Bogen kann die Kapazität nicht übersteigen.
Die Kapazitäten
der Bögen
von der Quelle s zu den betreffenden Knotenpunkten sind derart definiert
worden, dass, wenn und nur dann, wenn der berechnete Fluss von der
Quelle s zu den betreffenden Knotenpunkten mit der Kapazität übereinstimmt
(d.h. die Kapazität
ist völlig
benutzt) die maximale Belastung tatsächlich um k Einheiten verringert werden
kann. Wenn beispielsweise die Belastung an einem Knotenpunkt der
maximalen Belastung lmax entspricht, ist
es erwünscht,
die Belastung an diesem Knotenpunkt um k Einheiten zu verringern,
dies reflektiert durch eine Kapazität von max(k + li – lmax, 0) = max(k + lmax – lmax, 0) = k. Auf gleiche Weise ist es für einen Knotenpunkt
mit einer Belastung von lmax – 1 erwünscht, die
Belastung um k – 1
Einheit zu verringern, dies gegenüber einer Kapazität von max(k
+ lmax – 1 – lmax, 0) = max(k – 1, 0) = k – 1 (unter
Voraussetzung dass k ≥ 0). Die
Formel drückt
auch aus, dass eine Belastung an einem Kno tenpunkt von lmax – k
(oder sogar höher)
nicht verringert zu werden braucht. Auf gleiche Weise drücken die
Kapazitäten
des Bogens von den betreffenden Knotenpunkten zu der Senke d um
wie viele Einheiten die Belastung an den Knotenpunkten erhöht werden kann,
ohne dass die erwünschte
maximale Belastung von lmax – k überschritten
wird. Es dürfte
einleuchten, dass der berechnete Fluss von den Knotenpunkten zu
der Senke niedriger sein kann die betreffenden Kapazitäten, was
besagt, dass das System nicht völlig
ausgelastet ist (in 4B ist der Fluss von n3 zu der Senke gleich 1, während die
Kapazität
3 beträgt,
was angibt, dass die Belastung an n3 gesteigert
werden darf, und zwar bis zu zwei weiteren Blöcken). Wenn der berechnete
maximale Fluss zeigt, dass die maximale Belastung um k Einheiten
verringert werden kann, ordnet der Scheduler 170 eine Anzahl
Blockausleseanträge
von si zu sj (si ≠ sj) zu, die dem resultierenden berechneten
Fluss von ni bis nj entspricht. 4C zeigt
eine Neuzuordnung entsprechend den berechneten Flüssen aus 4B.
Zum Berechnen des maximalen Flusses durch das Netzwerk kann jeder
beliebige Algorithmus, wie der durchaus bekannte Ford&Fulkerson-Algorithmus
verwendet werden. Einzelheiten von Maximalfluss-Grundlagen sind
in "Algorithmic
Graph Theory", Alan
Gibson, Cambridge University Press, 1998, Seiten 96–106 beschrieben.
-
Die
maximale Belastung an Speichereinheiten eines durchaus ausgewuchteten
Systems wird zwischen (einschließlich der Begrenzungen) der
nach oben gerundeten mittleren Belastung lavg an
den Speichereinheiten und der maximalen Belastung lmax,
herrührens
aus der vorläufigen
Zuordnung liegen. Auf diese Weise kann k zwischen 1 und lmax – lavg gewählt
werden (wenn lmax dem Wert lavg entspricht,
kann die Belastung nicht verringert werden). Um den maximalen Wert
für k zu
bestimmen, für
den die maximale Belastung dennoch verringert werden kann, können mehrere
Schemen angewandt werden. So können
beispielsweise ausgehend von einer der Begrenzungen nacheinander
alle Werte von k versucht werden, bis das erwünschte Ergebnis erreicht ist,
beispielsweise ausgehend von k = lmax – lavg, wird der maximale Fluss berechnet; wenn
nicht erfolgreich, so wird k verringert bis es erfolgreich ist oder
bis der letzte Wert von k (k = 1) ohne Erfolg verucht wurde. Auch
eine "binäre Suche" kann durchgeführt werden,
wobei k derart gewählt
wird, dass dieser Wert etwa in der Mitte des Intervalls liegt. Wenn
erfolgreich, so wird der Prozess mit der oberen Hälfte des
Intervalls wiederholt, sonst mit der unteren Hälfte des Intervalls. Der Prozess
wird wiederholt, bis der Wert von k erreicht ist.
-
Bei
einer Ausführungsform
des Systems nach der vorliegenden Erfindung wird ein gleiches Ergebnis erreicht,
wie dies erreicht werden kann durch Lösung des beschriebenen Algorithmus
auf Basis des Maximalflussproblems, und zwar dadurch, dass der Scheduler 170 eine
wiederholte Prozedur durchführt,
die in 5 dargestellt ist. Wie oben ist der erste Schritt 510 das
Durchführen
einer Anfangszuordnung, und zwar dadurch, dass für jeden der Blöcke der
Gruppe eine vorläufige
Speichereinheit selektiert wird und dass der entsprechende Blockausleseantrag
der vorläufigen
selektierten Speichereinheit zugeordnet wird. Nach der Anfangszuordnung
startet der Scheduler 170 eine wiederholte Prozedur, in
der ein versuch gemacht wird, einen Blockausleseantrag aus einer
Speichereinheit mit maximaler Belastung einer Speichereinheit neu
zuzuordnen, deren Belastung geringer ist als lmax – 1. Die
Neuzuordnung kann unmittelbar von der einen Speichereinheit zu der anderen,
aber auch eine Kette von Neuzuordnungen kann auftreten. In dem Schritt 520 selektiert
der Scheduler eine Speichereinheit si mit
einer Belastung an si, die einer maximalen
Belastung lmax an der Anzahl Speichereinheiten
entspricht. Die Belastung rührt
von aktuell zugeordneten Blockausleseanträgen her. Es dürfte einleuchten,
dass mehr als eine Speichereinheit die maximale Belastung haben
kann. Sollte dies der Fall sein, so kann jede derselben selektiert
werden (beispielsweise die erste derselben). In dem Schritt 530 bestimmt
der Scheduler, ob es eine Strecke von si zu
einer anderen Speichereinheit sj gibt mit
einer Belastung weniger als lmax – 1. Es
wird beabsichtigt, einen Ausleseantrag von si zu
sj zu verlagern, und zwar über die
Strecke, wobei die Belastung an si um eins
reduziert und die Belastung an sj um eins
gesteigert wird. Zum Erhalten einer Verbesserung sollte die resultierende
Belastung an sj kleiner sein ans lmax, was bedeutet, dass die Anfangsbelastung
an sj weniger sein soll als lmax – 1. Damit
es möglich
ist, einen Ausleseantrag über
die Strecke zu verlagern, wird die Strecke durch eine Folge von
Speichereinheiten sp1, sp2,
..., spl gebildet, wobei si =
sp1 und sj = sp1 ist und wobei für jedes Paar spk,
sp(k+1) ein Blockausleseantrag von Spk zu Sp(k+1) zugeordnet
werden kann, wobei k von l bis l – 1 reicht. Jeder geeignete
Algorithmus kann verwendet werden um zu ermitteln, ob es eine derartige Strecke
gibt. So kann bs eine Graphik, wie in 4 dargestellt,
für die
Speichereinheiten s1 bis s3 (dargestellt durch
die Knotenpunkte n1 bis n3)
gebildet werden und eine Baumsuche, durchgeführt durch die Graphik. Wenn
es eine Strecke gibt, ordnet der Scheduler 170 in dem Schritt 540 einen
Blockausleseantrag von spk bis sp(k+1) für
k in einem Bereich von 1 bis l – 1
zu. Daraufhin wird die Prozedur mit dem Schritt 520 neu
gestartet. Z dem betreffenden Zeitpunkt ist die Belastung an si um eins verringert. Wenn noch andere Speichereinheiten eine
gleiche maximale Belastung haben wie si vorher
hatte, wird eine dieser Einheiten vorher in dem Schritt 520 selektiert.
Wenn si die einzige Speichereinheit (oder
die letzte Speichereinheit) mit dieser maximalen Belastung war,
wird dies automatisch die maximale Belastung an dem System um eins
verringert haben. Dadurch hat si nun wieder
eine maximale Belastung (was meistens auch einige andere Speichereinheiten
haben), sei es um eins niedriger als vorher. Dieser Prozess wird
wiederholt, bis für
eine Speichereinheit keine Strecke gefunden werden kann um die Belastung
zu verringern.
-
Das
Verhalten von drei Algorithmen nach der vorliegenden Erfindung,
und zwar Lineare Zuordnung (LA), lineare Neuzuordnung und Maximalflusszuordnung
(MFA), ist simuliert worden. Für
m = 5 bis 30 Platten (in Schritten von 5) ist eine Simulation durchgeführt worden,
wobei weiterhin die Anzahl aktiver Ströme mit der Anzahl Ströme geteilt
durch die Anzahl Platten, in dem Bereich von 5 bis 30 (in Schritten
von 5) variiert worden ist. An sich reicht die Anzahl aktiver Ströme von 25
bis 900. Die nachfolgende Tabelle zeigt die Ergebnisse der Simulation
für 1000000
aufeinander folgende Durchgänge.
Alle Blöcke
sind völlig
dupliziert worden und in jedem Durchgang wird ein Datenblock für jeden
aktiven Strom abgerufen, gegenüber
einem Schlimmstfall-Szenario, in dem alle Ströme ständig mit der maximalen rate
verbrauchen. Von jedes Gruppe von drei Ergebnisses, dargestellt
in der Tabelle, bezieht sich das obere Ergebnis auf den LA-Algorithmus,
das mittlere Ergebnis bezieht sich auf den LR-Algorithmus und das
untere Ergebnis bezieht sich auf den MFA-Algorithmus. Jedes Ergebnis
zeigt die maximal beobachtete Belastung, wobei die Anzahl male,
dass die maximale Belastung beobachtet wurde, eingeklammert ist.
-
-
-
Die
dargestellten Simulationen zeigen, dass mit dem relativ einfachen
LR-Algorithmus gute Ergebnisse erzielt werden können mit in nahezu allen Situationen
einer gleichen maximalen Belastung, wie mit dem MFA-Algorithmus
erhalten (was die best erzielbare Belastungsauswuchtung ergibt),
obschon die Anzahl Male, dass die maximale Belastung beobachtet
wurde, höher
ist als für
den MFA-Algorithmus. Die Simulationen zeigen ebenfalls, dass durch
vollständiger
Duplikation von Blöcken
und Speicherung der Blöcke
auf beliebige Art und Weise eine maximale Belastung erreicht werden
kann, was, insbesondere für
den LR- und den
MFA-Algorithmus, für
die meisten simulierten Situationen um nur 3–10% höher ist als die mittlere Belastung,
was die untere Grenze ist. An sich ist die Auswuchtung, wie erreicht
werden kann, sehr gut.
-
Die
nachfolgende Tabelle zeigt die mittlere maximale beobachtete Belastung
für die
gleichen Simulationen, bestätigend,
dass insbesondere für
größere Systeme
die maximale Belastung im Schnitt der mittleren Belastung an allen
Platten annähert.
-
-
-
6 zeigt
simulierte Ergebnisse für
den MFA-Algorithmus für
1000000 aufeinander folgende Durchgänge, mit 15 Platten und 225
aktiven Datenströmen
(was zu einer mittleren Belastung von 15 Strömen je Platte führt), wobei
der Multiplikationsfaktor variiert wird, und zwar von 1 (keine Multiplikation)
bis 2 (volle Multiplikation). Ein Multiplikationsfaktor von 1,25
(25% Duplikation) gibt an, dass 1 zu 4 Blöcken dupliziert wurde. Die Figur
zeigt, wie oft (vertikal) eine maximale Belastung (horizontal) beobachtet
wurde. Für
ein System, in dem jeder Block nur einmal gespeichert wird (0% Duplikation),
zeigt die Figur, dass die beobachteten maximalen Belastungen im
Wesentlichen zwischen 18 und 28 Strömen je Platte liegen, wobei
maximale Belastungen weit über
30 nur selten auftreten. Es dürfte
einleuchten, dass wenn ein derartiges Schema gewählt wird, ein derartiges System
derart bemessen sein sollte, dass es imstande ist, etwa 30 Ströme je Platte
zu erledigen, während
die mittlere Belastung nur 15 Ströme je Platte beträgt, was
eine Überbemessung
von einem Faktor 2 ergibt. Für
ein System mit einem Duplikationsfaktor von 50% liegen die beobachteten
maximalen Belastungen im Wesentlichen zwischen 15 und 18 Strömen je Platte.
Die Bemessung eines derartigen Systems für beispielsweise 20 Ströme je Platte
(eine Überbemessung
von 33%) wird kaum ein Problem geben (d.h. eine maximale Belastung über 20).
An sich zeigt 5, dass für Systeme, bei denen die Speicherkapazität ein be grenzender
Faktor ist, können
gute Ergebnisse erreicht werden mit einem Duplikationsgrad von weniger
als 100%. Simulationen zeigen, dass ein Duplikationsgrad im Bereich
von etwa 60–80%
bereits gute Ergebnisse bringt. In einem derartigen Fall kann die Überbemessung
weniger sein als 25% und für
größere Systeme
sogar weit darunter. Für
eine 100% Duplikation kann für
den LR- und MFA-Algorithmus ein System mit 15 Platten und bemessen
zum Unterstützen
von 16 Strömen
je Platte (eine 6,7% Überbemessung)
ohne dass Probleme in den Simulationen beobachtet werden konnten)
225 Ströme
unterstützen
(im Schnitt 15 Ströme
je Platte). Man soll bedenken, dass in praktischen Umständen die
Ergebnisse noch besser sein werden. Die Simulationen sind durchgeführt worden
unter der Voraussetzung einer Schlimmstfall-Situation, wobei alle
Ströme
Daten mit der maximalen Datenrate verbrauchen und die Plattenleistung
als sehr niedrig spezifiziert ist. In der Praxis wird die Plattenleistung
besser sein und für
Systeme mit einer variablen Verbrauchsrate wird die mittlere Verbrauchsrate
weit unter der maximalen Verbrauchsrate liegen. Folglich kann insbesondere
für größere Systeme
der Pegel der Überbemessung
sogar noch weiter verringert werden.
-
2
-
- Anfang
- 200
- Selektiere
den 1. Block
- 210
- Bestimme
den Satz
- 215
- Satzgröße = 1?
- 230
- Selektiere
S.U.
- 220
- Zuordnen
zu S.U.
- 240
- Mehr
Blöcke
?
- 250
- Selektiere
den nächsten
Block
-
- Ende
-
3
-
- Anfang
- 310
- Anfangszuordnung
- 320
- Selektiere
den 1. Block
- 330
- Bestimme
den Satz
- 335
- Satzgröße = 1 ?
- 350
- Selektiere
zu S.U.
- 340
- Zuordnen
zu S.U.
- 360
- Mehr
Blöcke
?
- 370
- Selektiere
den nächsten
Block
- 380
- Bediunung
erfüllt
-
- Ende
-
5
-
- Anfang
- 510
- Anfangszuordnung
- 520
- Selektiere
S.U.
- 530
- Gibt
es eine Strecke ?
- 540
- Neuzuordnung
von Blöcken
-
- Ende
-
6
-
- Anzahl
Abtastwerte
-
- Duplikation
-
- Maximale
Belastung