
Ich entwickle derzeit eine Software, die eine schnelle Interprozess- und temporäre I/O-Kommunikation (Bilder sowie große HDF5-Arrays) erfordert. Die „Lebensdauer“ der Daten ist unterschiedlich und von mehreren Faktoren abhängig, liegt aber in den meisten Fällen zwischen Sekunden und Minuten. Nur wenige Dateien müssen länger gespeichert werden. Keine der Daten muss dauerhaft gespeichert werden.
Daher dachte ich, /dev/shm
das wäre der richtige Weg. Ich habe jedoch Probleme mit dem Benchmarking /dev/shm
.
Mein erster Versuch war:
sudo dd if=/proc/kcore of=/dev/shm/mem count=1000000
...was folgendes Ergebnis zeigt:
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB, 488 MiB) copied, 0,661147 s, 774 MB/s
Wenn ich jedoch dd
mit dem bs
Flag ausführe, um anzugeben, wie viele Bytes gleichzeitig gelesen/geschrieben werden müssen, ändert sich das Ergebnis erheblich:
sudo dd if=/proc/kcore of=/dev/shm/mem bs=$((1024*1024)) count=512
...führt zu:
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0,166003 s, 3,2 GB/s
Warum ist das Lesen/Schreiben sehr großer Datenmengen (viele Bytes, 512-mal) so viel schneller als das Lesen/Schreiben kleiner Datenmengen, die viele Male (1.000.000-mal, wie beim ersten Versuch) gelesen/geschrieben werden?
Ist es „legitim“, Benchmarks /dev/shm
mit als Quelle dd
durchzuführen ? Oder wird der Benchmark irgendwie eingeschränkt?/proc/kcore
/proc/kcore
Ich kann nicht genau sagen, wie viel Leistung ichWirklichbrauche ich, hätte aber gerne eine Lese- und Schreibgeschwindigkeit von mehr als 1 GB/s (weil die größte Datenmenge, die ich lese oder schreibe, 1 GB beträgt und ich dies in weniger als einer Sekunde tun möchte).
Ich speichere große Arrays (50 MB bis 1 GB) meist überHDF5.