Hallo zusammen,
ich stehe vor folgendem Problem. Ein Datenquelle gibt kontinuierlich einen Datenstrom mit einer Rate von ca. 24MB/s aus. Diesen Datenstrom gilt es auf eine Festplatte zu bannen. Das ganze muss auch andersherum funktionieren - also lesen und ausgeben. Die Anforderungen an den Datenstrom sind hart, dass heißt es muss garantiert werden, dass der Datenstrom ununterbrochen gespeichert werden kann bzw. beim Lesen nicht abreißt. Aufzeichnungs-/Wiedergabedauer liegen im Bereich von ca. 15-60min. Puffer habe ich ca. 128 MB sicher. Die Festplatte, die ich jetzt verwende, schafft im ungünstigsten Fall ca. 30MB/s lesen oder schreiben (wenn nur ein Prozess linear liess/schreibt). So jetzt zum Problem: Wie würdet ihr die Daten auf der Platte organisieren? Dateisystem oder direkt auf die Platte? Es sollte möglich sein, mehrere (so maximal 4-8 "Files") unterschiedliche Datenströme nacheinander zu sichern, zu lesen, mal einen zu löschen und einen neuen zu schreiben etc.
Ohne den kreativen von vornherein Prozess zu zerstören: z.Z. schreibe/lese ich direkt in/aus einer Partition und lege das Mapping an anderer Stelle ab. Um Problemen wie z.B. Fragmentierung zu entgehen, möchte ich aber eigentlich ein Dateisystem drunter legen, das mir die Arbeit abnimmt. Dies soll aber nicht ständig auf der Platte "rumhüpfen" und mir die Datenrate versauen - wenn die Puffer überlaufen ist das sehr schlecht. Welches würde da eurer Meinung nach am Besten geeignet sein?
Danke schonmal und noch einen schönen Freitag,
Sebastian
Hallo Sebastian!
Sebastian Zwietz sebastian@darkcity.de:
ich stehe vor folgendem Problem. Ein Datenquelle gibt kontinuierlich einen Datenstrom mit einer Rate von ca. 24MB/s aus.
Wau.
Die Festplatte, die ich jetzt verwende, schafft im ungünstigsten Fall ca. 30MB/s lesen oder schreiben (wenn nur ein Prozess linear liess/schreibt).
Womit ermittelt?
So jetzt zum Problem: Wie würdet ihr die Daten auf der Platte organisieren? Dateisystem oder direkt auf die Platte? Es sollte möglich sein, mehrere (so maximal 4-8 "Files") unterschiedliche Datenströme nacheinander zu sichern, zu lesen, mal einen zu löschen und einen neuen zu schreiben etc.
Ich würde zuerst ein Hardware-RAID 0 auf zwei SCSI-Platten einrichten. Wenn die Daten wichtig sind besser RAID 0/1 mit 4 Platten.
Und dann tar(1) direkt auf das Devive probieren.
Freundlich grüßend, Erik
Hallo Erik,
Die Festplatte, die ich jetzt verwende, schafft im ungünstigsten Fall ca. 30MB/s lesen oder schreiben (wenn nur ein Prozess linear liess/schreibt).
Womit ermittelt?
dd_rescue /dev/hda4 /dev/null -b 1M mit init=/bin/bash (und umgekehrt mit dd_rescue /dev/zero /dev/hda4) und dann ganz gespannt auf die Zahlen geschaut. Dabei hat sich auch bestätigt, dass die Platten im inneren Bereich langsamer sind - muss ja auch. Das Streaming funktioniert auch problemlos mit den angesprochenen 24MB/s.
Ich würde zuerst ein Hardware-RAID 0 auf zwei SCSI-Platten einrichten. Wenn die Daten wichtig sind besser RAID 0/1 mit 4 Platten.
Ok, das wäre eine Lösung - aber leider nicht durchführbar. Ich wollte nach Möglichkeit mit einer Platte für die Daten hinkommen - RAID nur wenn es nicht anderes geht. Da die ganze Sache in einem Gerät verbaut ist, bin bin ich Einschränkungen bei der Leistungsaufnahme/Wärmeabgabe und Größe unterworfen.
Und dann tar(1) direkt auf das Devive probieren.
Ich verstehe allerdings nicht ganz, welchen Vorteil mir das tar bringt. Wenn ich beispielsweise nur ein (großes) File löschen will, hilft das IMO auch nicht. Nochmal zum Verständnis: Es geht darum, 4-8 große Files beliebig zu speichern, zu löschen oder zu lesen. Ich brauche nur reguläre Files, keine Verzeichnisse, Links, Devices etc. und einen garantierten Durchsatz. Der Plattendurchsatz reicht theoretisch. Jetzt brauch ich nur noch ein Dateisystem, dass mir den Durchsatz nicht kaputt macht, wenn es ein wenig fragmentiert ist.
Gibt es noch weitere Vorschläge?
Sebastian
Wenn ich beispielsweise nur ein (großes) File löschen will, hilft das IMO auch nicht. Nochmal zum Verständnis: Es geht darum, 4-8 große Files beliebig zu speichern, zu löschen oder zu lesen. Ich brauche nur reguläre Files, keine Verzeichnisse, Links, Devices etc. und einen garantierten Durchsatz. Der Plattendurchsatz reicht theoretisch. Jetzt brauch ich nur noch ein Dateisystem, dass mir den Durchsatz nicht kaputt macht, wenn es ein wenig fragmentiert ist.
Einen garantierten Datendurchsatz für Dateien bietet afaik nur XFS an - allerdings momentan nur auf Irix.
Falls du experimentierfreudig bist kannst du Reiser4 probieren (bei mir bisher keine Probleme oder gar ohne Datenverlust). Reiser4 versucht u.a., Schreib-Lese-Kopf-Bewegungen zu optimieren und erreicht den physikalischen Datendurchsatz einer Platte fast. Weniger gefällt einem an Reiser4 der CPU-Hunger (sowie dass es noch nicht stabil ist).
mfg, Fabian
Hallo Am Freitag, 29. April 2005 10:29 schrieb Sebastian Zwietz:
Hallo zusammen,
ich stehe vor folgendem Problem. Ein Datenquelle gibt kontinuierlich einen Datenstrom mit einer Rate von ca. 24MB/s aus.
Hört sich irgendwie nach Videodaten an?
Aufzeichnungs-/Wiedergabedauer liegen im Bereich von ca. 15-60min. Puffer habe ich ca. 128 MB sicher. Die Festplatte, die ich jetzt verwende, schafft im ungünstigsten Fall ca. 30MB/s lesen oder schreiben (wenn nur ein Prozess linear liess/schreibt).
Also erstmal würde ich ein Raid0 empfehlen.
So jetzt zum Problem: Wie würdet ihr die Daten auf der Platte organisieren? Dateisystem oder direkt auf die Platte? Es sollte möglich sein, mehrere (so maximal 4-8 "Files") unterschiedliche Datenströme nacheinander zu sichern, zu lesen, mal einen zu löschen und einen neuen zu schreiben etc.
Also ein Dateisystem darunter wäre nicht schlecht, for allem weil es noch etwas mehr Sicherheit gewährleistet.
Ohne den kreativen von vornherein Prozess zu zerstören: z.Z. schreibe/lese ich direkt in/aus einer Partition und lege das Mapping an anderer Stelle ab. Um Problemen wie z.B. Fragmentierung zu entgehen, möchte ich aber eigentlich ein Dateisystem drunter legen, das mir die Arbeit abnimmt. Dies soll aber nicht ständig auf der Platte "rumhüpfen" und mir die Datenrate versauen - wenn die Puffer überlaufen ist das sehr schlecht. Welches würde da eurer Meinung nach am Besten geeignet sein?
Für große Dateien und schnelle Datenströme bietet sich eigentlich ideal XFS an. Das wurde genau für solche Fälle entwickelt. Es ist auch für extremes Caching ausgelegt, so dass du immer ne USV an dem System haben solltest.
Danke schonmal und noch einen schönen Freitag,
Sebastian
Alex
Am Freitag, den 29.04.2005, 10:29 +0200 schrieb Sebastian Zwietz:
ich stehe vor folgendem Problem. Ein Datenquelle gibt kontinuierlich einen Datenstrom mit einer Rate von ca. 24MB/s aus. Diesen Datenstrom gilt es auf eine Festplatte zu bannen. Das ganze muss auch andersherum funktionieren - also lesen und ausgeben. Die Anforderungen an den Datenstrom sind hart, dass heißt es muss garantiert werden, dass der Datenstrom ununterbrochen gespeichert werden kann bzw. beim Lesen nicht abreißt. Aufzeichnungs-/Wiedergabedauer liegen im Bereich von ca. 15-60min. Puffer habe ich ca. 128 MB sicher.
Die kanonische Antwort lautet: Echtzeit-OS + Echtzeit-FS. ;-)
Die Festplatte, die ich jetzt verwende, schafft im ungünstigsten Fall ca. 30MB/s lesen oder schreiben (wenn nur ein Prozess linear liess/schreibt). So jetzt zum Problem: Wie würdet ihr die Daten auf der Platte organisieren? Dateisystem oder direkt auf die Platte? Es sollte möglich sein, mehrere (so maximal 4-8 "Files") unterschiedliche Datenströme nacheinander zu sichern, zu lesen, mal einen zu löschen und einen neuen zu schreiben etc.
Falls Du vorher weißt, wie lang der Strom ist, könntest Du ein File vorher anlegen und mit der entsprechenden Datenmenge füllen. Dann muß das FS beim Schreiben keine Blöcke hinzufügen, da die ja schon da sind. Außerdem kannst Du den Datendurchsatz schon vorher testen, da ja die zu benutzenden Blöcke dem FS bekannt sind. Außerdem würde ich dafür eine separate Platte nehmen, damit der "Datensammler" der einzige Prozess ist, der darauf zugreift.
Ohne den kreativen von vornherein Prozess zu zerstören: z.Z. schreibe/lese ich direkt in/aus einer Partition und lege das Mapping an anderer Stelle ab. Um Problemen wie z.B. Fragmentierung zu entgehen, möchte ich aber eigentlich ein Dateisystem drunter legen, das mir die Arbeit abnimmt. Dies soll aber nicht ständig auf der Platte "rumhüpfen" und mir die Datenrate versauen - wenn die Puffer überlaufen ist das sehr schlecht. Welches würde da eurer Meinung nach am Besten geeignet sein?
Naja, 128 MB bei 24 MB/s ergeben 5 Sekunden Reserve. Da muß der Stepper aber ganz schön weit steppen...
Eric
Hallo,
Die kanonische Antwort lautet: Echtzeit-OS + Echtzeit-FS. ;-)
Du hast recht.
Falls Du vorher weißt, wie lang der Strom ist, könntest Du ein File vorher anlegen und mit der entsprechenden Datenmenge füllen. Dann muß das FS beim Schreiben keine Blöcke hinzufügen, da die ja schon da sind. Außerdem kannst Du den Datendurchsatz schon vorher testen, da ja die zu benutzenden Blöcke dem FS bekannt sind. Außerdem würde ich dafür eine separate Platte nehmen, damit der "Datensammler" der einzige Prozess ist, der darauf zugreift.
Ok, den Ansatz mit der vorherigen Belegen des Datenfiles habe ich auch schon verfolgt. Allerdings habe ich generell ein wenig Bauchschmerzen, wenn ich von vornherein nicht 99,999%ig weiß, dass mir beim Schreiben niemand dazwischenfunkt und eventuell ein paar tausend Samples (ja, es geht um das Speichern von Daten aus einer AD-Karte) verloren gehen. Theoretisch wären ein anderer Ansatz (RT-OS) sinnvoller. Wenn man jedoch Nutzen und Aufwand abwägt ist Linux für mich die sinnvollere Wahl.
Eine Frage noch dazu in die Runde. Ich möchte mmaped IO auf das besagte File betreiben und weiss von vornherein, dass ich nur schreiben will. Jedoch wird natürlich der bereits existierende Dateiinhalt in den gemappted Speicher kopiert, obwohl ich den gar nicht brauche. Kann ich das unterbinden? Der Aufruf von mmap(2) will immer ein Filehandle auf dem auch gelesen werden kann. Den Speicherbereich als nur schreibbar markieren hilft auch nicht. (PS: alles auf 2.4er Kernel und 386)
Naja, 128 MB bei 24 MB/s ergeben 5 Sekunden Reserve. Da muß der Stepper aber ganz schön weit steppen...
Dass ist richtig - aber ich will auch eine groooße Platte verwenden ;-)
Mittlerweile habe ich auch ein paar Test gemacht und es nicht geschafft, einen Pufferüberlauf zu provozieren. Auch nicht auf einem Dateisystem, auf dem schon Daten wie Löcher im Käse auf der Platte verteilt sind. Ext2 hat bisher am Besten abgeschnitten (gegenüber Ext3 und ReiserFs - also welche mit Journaling). An XFS bastel ich noch.
Danke an alle, die bisher geantwortet haben,
Sebastian
On Fri, Apr 29, 2005 at 10:29:07AM +0200, Sebastian Zwietz wrote:
anderer Stelle ab. Um Problemen wie z.B. Fragmentierung zu entgehen, möchte ich aber eigentlich ein Dateisystem drunter legen, das mir die Arbeit abnimmt. Dies soll aber nicht ständig auf der Platte "rumhüpfen" und mir die Datenrate versauen - wenn die Puffer überlaufen ist das sehr schlecht. Welches würde da eurer Meinung nach am Besten geeignet sein?
ext2 Grund: wenn du nur ganz wenige ganz große Dateien draufschreiben willst, wird es nicht fragmentieren (warum auch?) und es für solche Anwendungen aufgrund seiner relativen Einfachheit typischerweise die schnellste und zuverlässigste Lösung.
lug-dd@mailman.schlittermann.de