Große Datenmengen schnell wegschreiben (~250Mb/s)

Dschoni

Cadet 1st Year
Registriert
Aug. 2014
Beiträge
8
Hallo zusammen, da das hier wohl eher ein etwas spezielleres Anliegen ist, hab ich mal ein extra Thema aufgemacht:

Ich habe das Szenario, dass ich große Datenmengen schnell wegspeichern muss.
Worst Case estimate sind 250 MB/s, Minimum sind 50 MB/s.

Die gesamte entstehende Datenmenge liegt zwischen 1 und 7 TB über einen Zeitraum von 8 Stunden.

Wenn möglich, sollen die Daten schnell gelesen werden (während andere ankommen), verarbeitet und mit deutlich geringerer Menge und Geschwindigkeit weggeschrieben werden (wenige MB/s).

Ich suche also eine Speicherlösung, die mir ermöglicht, große Datenmengen schnell aufzunehmen, sequentiell auszugeben und die verarbeiteten Daten kompakt wegzuschreiben.

Erste Idee ist ein SSD Raid für die eingehenden Daten in Kombination mit großen HDD für das endgültige Speichern. Klingt das sinnvoll?
Worauf muss ich dabei achten?
(Hardware RAID Controller ist möglich!)
 
Wie stellst du dir eine Kombination aus SSD und HD vor?

Ich verstehe gerade nicht, wann Daten endgültig gespeichert werden. Bitte beschreibe das nochmals genauer.

Darf ich fragen, was solche Datenmengen erzeugt?
 
Ich stell mir vor, dass die SSDs das ankommende Datenvolumen abspeichern, von dort gelesen und verarbeitet wird und die verarbeiteten Daten auf der HDD landen. Die "Rohdaten" enthalten relativ wenig Information und bestehen zu großen Teilen aus "0"-Einträgen, die non-zero Einträge werden registriert und als array konvertiert abgespeichert. (Ca. Datenmengen in den Größenordnungen von 10 GB).

Die Erzeugung der Datenmengen sind wissenschaftlicher Natur, gerne privat mehr ;)
 
Einfach eine SSD und gut ist. Und wenn ankommend und schreibend noch gleichzeitig passieren sollte, dann vielleicht 2 SSDs. Aber kein Raid.

Wie kommen die Daten denn an? Das liest sich so, als kämen sie aus der Luft einfach so rein.

Und was bedeutet 10 TB? Das kann eine große Datei sein oder Millionen kleiner. Das hat auch eine immense Auswirkung auf das, was sinnvoll ist.
 
Ich denke die Hauptfage liegt darin, wie schnell du die ankommenden Daten verarbeiten kannst?

Sprich wenn 50-250MB/s die Sekunde ankommen und es möglich ist ca 200MB/s die Sekunde zu verarbeiten (und diese auf sagen wir 20MB/s (lässt sich einfach rechnen)) zu bringen, könntest du die Endablage sogar dirket auf einer USB2-HDD machen. Die Rohdaten können auf einer 4GB Großen RAM-Disk Platz finden ( da würde eine gute Minute drauf passen, wenn 250MB ankommen). Die Frage ist halt wie oft und lange deutlich über 200MB/s anliegen würden.

Anonsten muss man echt über SSDs nachdenken, oder halt ein großes RAID, wobei ich ich da nicht unter 4-6 Platten rechen würde, wenn der RAID Level 1/10 oder 5 ist).

Aber wie wahli schon sagte, brauchen wir mehr Input, über den gesamten Prozess und die Möglichkeiten zur Parallelisieurng.
 
Die Daten kommen über mehrere PCI-X Karten an. Und es geht um viele kleine Dateien (Größenordnung ~ 2000 Dateien pro sekunde).
Schafft eine SSD 250 MB/s?

Die Verarbeitung ist extrem parallelisierbar (da viele kleine Dateien und die Anzahl der Kerne nach oben quasi offen ist), lokaler RAM ist 32 GB möglich.

Ein Teil der Daten kann auch (via Gigabit Ethernet) nicht lokal verarbeitet werden, diese Lösung ist aber wenn möglich zu vermeiden um die Mobilität des Systems zu gewährleisten.
 
Ansonsten werfe ich jetzt noch die Möglichkeit in den Raum, ein Server MB + passenden Xeon mit 16 (oder mehr) RAM-Slots, dazu passend viel Arbeitsspeicher, z.B. 16x16GB =256GB RAM. Je nach Anwendungsfall natürlich, ohne Input kann das natürlich auch mit Kanonen auf Spatzen schießen sein.

Dann gibt es noch die Möglichkeit sich eine SSHD selbst zusammen zu basteln. Sprich eine SSD dazu nutzen um als Cache für eine große HDD zu dienen. Allerdings ist das auf eine SSD pro System begrenzt und softwarebasiert. Du kannst also meines Wissens nach nicht 5 SSDs nehmen, die 5 HDDs cachen, oder eine SSD dazu nutzen ein HDD Raid zu cachen.
Ergänzung ()

Dschoni schrieb:
Die Daten kommen über mehrere PCI-X Karten an. Und es geht um viele kleine Dateien (Größenordnung ~ 2000 Dateien pro sekunde).
Schafft eine SSD 250 MB/s?


Das dürfte mMn keine "normale" SSD schaffen. KA wie viel Geld dem Projekt zustehen, aber das wäre die richtige SSD dafür:

Intel SSD DC P3700 Series 2TB, PCIe 3.0 x4




gibt es natürlich auch kleiner:

Intel SSD DC P3700 Series 400GB, PCIe 3.0 x4

Intel SSD DC P3700 Series 800GB, PCIe 3.0 x4

Intel SSD DC P3700 Series 1.6TB, PCIe 3.0 x4

aber allesamt sündhaft teuer, aber in wirklich allem die Mutter aller SSDs.


Guckst Du hier:
https://www.youtube.com/watch?v=NL_jzPCrdog
Ergänzung ()

PS: Eine SATA-SSD, selbst die schnellste schafft in dieser Disziplin keine 50MB/s, egal was irgendwelche Benchmarks Dir weismachen wollen. Selbst eine M.2 SSD à la Plextor M6 schafft das nicht.
 
Zuletzt bearbeitet:
RAMdisk klingt hier tatsächlich vernünftig.
Das heißt, nachdem was ich hier bisher so lese, sollte eine vernünftige Kombination aus RAM mit SSD völlig ausreichen.

Ansonsten kann ich an der Eingangsseite tricksen und mit dem Aufzeichnen neuer Daten warten, bis jeweils die alten verarbeitet sind. Das wird zwar mehr Aufwand, aber theoretisch möglich. Danke schonmal an alle. Ich hab ne grobe Idee in welche Richtung ich weiterschau.
(Die 256 GB RAM sind etwas Kanonen-Spatzen Problem, wir haben aber Rechencluster mit 4x500 GB RAM da, da muss ich nur schauen ob die Gigabit Anbindung bis zu meinem Rechner funktioniert)

Update:
Die Intel PCIe SSDs sehen exakt nach dem aus was ich suche! Ich check die mal. Danke dir!
 
Zuletzt bearbeitet:
Es gibt natürlich auch die Möglichkeit die neue Haswell-E Plattform einzusetzen. Da hast Du einerseits einen "günstigen" Octacore mit offenem Multiplikator, dann 8 RAM Steckplätze, aber am wichtigten: 10xSATA-III. An denen könntest Du 10 billige 1TB-SSDs (à la Samsung Evo) zu einem 10TB JBOD zusammenschließen. Für die Datenerfassung könntest Du das MB auf z.Z. 64GB aufrüsten, später sobald 16GB Module verfügbar auf 128GB. Das gibt eine prima Ramdisk.

Die acht Kerne würden deinem Vorhaben die passende Rohleistung liefern und wären ideal, da Du ja von starker Parallelisierung sprichst.
 
Er verwendet PCI-X Karten. Aktuelle Systeme haben diesen alten Slot nicht mehr.
 
Das System ist noch nicht bestellt, von daher alles offen. Und sorry für die Verwirrung:

PCI-Express
 
Gerade dei vielen kleinen Daten machen es extrem Anspruchsvoll. Eine RAM Disk sollte das hinbekommen, wenn du die anfallenden Daten schnell genug weg bekommst. Sollte das einfachste sein, wenn du die Daten "Live" wegbekommst. Vorallem brauchst du dafür nicht wer weiß wieviele Geld ausgeben.

Die Intel PCIe SSDs schaffen nach Datenblatt auch nur 75k IOPS bei 4k --> 300MB/s das könnte reichen, könnte aber auch eng werden, schwer zu beurteilen.

Interessantes Projekt, mich würde auf jeden Fall freuen, wenn du deine Lösung beschreiben würdest und ob sie die Anfordeurngen erfüllt hat, und auch so Dinge wie Auslastung fände ich interessant.
 
Das Dateisystem welches benutzt wird, ist auch von großer Bedeutung. Hast du da schon was im Blick? Bevor du dieses aussuchst, sollte dir Klar sein, welche Operationen am meisten durchgeführt werden (lesen/schreiben/löschen/random/seq etc). ReiserFS ist sehr beliebt beim lesen von viele kleinen Dateien.

Mit bonnie++, iozone oder fileop kannst du die Performance testen (dafür musst du natürlich erstmal das System haben).

Das hier könnte noch interessant für dich sein:
http://unix.stackexchange.com/quest...inux-filesystem-for-storing-a-lot-of-small-fi
http://monolight.cc/2011/02/linux-filesystems-small-file-performance-on-hdds/

Übersicht Dateisysteme:
https://wiki.archlinux.org/index.php/File_systems

Einfach mal googlen nach: "benchmark filesystem small files" oder "best filesystem read write small files"
 
Zum Thema Filesystem:

Die Verarbeitung wird wahrscheinlich direkt mit der vorhandenen Windows SDK passieren, daher eher keine freie Wahl möglich.
Trotzdem danke, werde ich mir mal anlesen falls es doch die Möglichkeit gibt ein echtes Unix zu verwenden.

Wie schauts denn aus, wenn ich Gigabit Lan habe? Macht das Sinn, Dateien über Lan an andere Rechner zu verteilen?
 
Sannyboy111985 schrieb:
Die Intel PCIe SSDs schaffen nach Datenblatt auch nur 75k IOPS bei 4k --> 300MB/s das könnte reichen, könnte aber auch eng werden, schwer zu beurteilen.


Korrektur: 175K IOPS bei 4K schreibend. Aber OK, es gibt auch dickere Kanonen:

Micron P320h SSD 700GB, HHHL, PCIe 2.0 x8





Die armen, armen Spatzen.
 
Sinn macht es, wenn es für euch einen Nutzen hat ;). Gigabit Lan = theoretisch ~125MB/s praktisch wohl eher ~100MB/s. Wenn ihr mehrere Schnittstellen habt, könntet ihr mit den entsprechenden Switchen, Bonding (bei Cisco Etherchannel) betreiben. Dadurch ließe sich der Durchsatz bei 2 Links sicher auf knapp 200MB/s anheben. Mehr als 2 Links machen dann aber eher keinen Sinn mehr, da der Durchsatz nicht 1:1 mitsteigt. Wie man Bonding allerdings auf der Host-Seite unter Windows realisiert hab ich kein Plan. Google wird es dir vermutlich verraten :P.
 
Es könnte Sinn machen, weil die anderen PCs hinter dem Gigabit LAN Linux Rechner mit 64 Kernen und 500 GB Arbeitsspeicher sind und die Verarbeitung deutlich schneller gehen könnte ;)
 
Warum werden dann die Daten nicht gleich dort eingespeist? Wegen der Windows Software oder was? Dann schreibt/portiert euer Progrämmchen halt auf Java dann seit ihr Plattform-unabhängig und gut is. ;)
 
Ich würde eine stinknormale SSD nehmen... du sagst zwar viele kleine Dateien, aber einen Grund warum diese nicht zusammenhängend im Block geschrieben werden können sollen nennst du nicht, also... solange du da nicht ein bescheuertes Closed-Source Programm am Start hast dessen Schreibverhalten du in keiner Weise beeinflussen kannst, gibts keinen Grund, warum eine "billige" SSD nicht damit fertig werden sollte.
 
Zurück
Oben