glaube, ich habe eine Datenmenge, die ein Array von 1E12 32-Bit-Ganzzahlen (4 TB) in einer Datei auf einem Dateisystem 4 TB HDD ext4 ..Linux: Large Int-Array: mmap vs Datei suchen?
berücksichtigen, dass die Daten am wahrscheinlichsten zufällig (oder zumindest gespeichert ist, scheint zufällig).
// pseudo-code
for (long long i = 0; i < (1LL << 40); i++)
SetFileIntAt(i) = GetRandInt();
Des Weiteren der Ansicht, dass ich einzelne int Elemente in einer unvorhersehbaren Reihenfolge und dass der Algorithmus läuft auf unbestimmte Zeit (on-going es ist) lesen möchten.
// pseudo-code
while (true)
UseInt(GetFileInt(GetRand(1<<40)));
Wir sind auf Linux x86_64, gcc. Sie können System übernehmen hat 4 GB RAM (dh 1000x weniger als Datensatz)
Im folgenden werden zwei Möglichkeiten, um Architekt Zugang:
(A) mmap die Datei in einem 4 TB Speicherblock und den Zugang als ein int array
(B) öffne (2) die Datei und benutze seek (2) und read (2) um die Ints zu lesen.
Von A und B, die die bessere Leistung haben werden? Und warum?
Gibt es ein anderes Design, das eine bessere Leistung als A oder B bietet?
Die Geschwindigkeit, mit der auf ein RAM zugegriffen wird, ist größer als die Geschwindigkeit, um auf HD zuzugreifen (in einigen Größenordnungen, da keine mechanischen Teile vorhanden sind). Wenn Sie keine Speicherprobleme haben, ist die Zuordnung aller Dateien im RAM die beste Lösung, die Sie haben können. Sie können auch Solid-State-Laufwerke in Betracht ziehen (die dem RAM sehr ähnlich sind). Wenn ein Direktzugriff tatsächlich einen Direktzugriff bedeutet, können Sie den Cache außerdem deaktivieren, um einige Leistungen zu verbessern (d. H. Wenn die Wahrscheinlichkeit, auf dasselbe Element zuzugreifen, sehr gering ist, ist es nicht sinnvoll, im Cache zu suchen). –
@D. Cannone Den Cache für einen anderen Zweck zu behalten, wenn man wahlfrei zugreift, ist nur billiant, danke! – Benoit
#C würde es aus dem Netzwerk mit einer Art Kernel-Bypass-Technologie laden (sagen wir RDMA auf infiniband). Es wird irgendwo zwischen A und B sein. – bobah