Linux: Duża tablica int: mmap vs plik wyszukiwania?

Załóżmy, że mam zestaw danych, który jest tablicą 1e12 32-bitowych int (4 TB) przechowywanych w pliku na systemie plików 4 TB HDD ext4.

Uważaj, że dane są najprawdopodobniej losowe (lub przynajmniej wydają się losowe).

// pseudo-code
for (long long i = 0; i < (1LL << 40); i++)
   SetFileIntAt(i) = GetRandInt();

Ponadto, rozważ, że chcę odczytywać poszczególne elementy int w nieprzewidywalnej kolejności i że algorytm działa w nieskończoność (jest w toku).

// pseudo-code
while (true)
   UseInt(GetFileInt(GetRand(1<<40)));

Jesteśmy na Linuksie x86_64, gcc. Możesz założyć, że system ma 4 GB pamięci RAM (tj. 1000x mniej niż zestaw danych)

Poniżej przedstawiono dwa sposoby dostępu architekta:

(A) mmap plik do 4 TB bloku pamięci i uzyskaj do niego dostęp jako tablicę int

(B) otwórz (2) plik i użyj metody seek (2) i przeczytaj (2), aby odczytać wartości int.

Z A i B, które będą miały lepszą wydajność? I dlaczego?

Czy istnieje inny projekt, który zapewni lepszą wydajność niż A lub B?

questionAnswers(4)

yourAnswerToTheQuestion