Linux: gran matriz int: mmap vs buscar archivo?

Supongamos que tengo un conjunto de datos que es una matriz de 1e12 32 bits ints (4 TB) almacenados en un archivo en un sistema de archivos ext4 HDD de 4 TB.

Considere que los datos son probablemente aleatorios (o al menos parecen aleatorios).

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

Además, tenga en cuenta que deseo leer los elementos int individuales en un orden impredecible y que el algoritmo se ejecuta indefinidamente (está en curso).

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

Estamos en Linux x86_64, gcc. Puede asumir que el sistema tiene 4 GB de RAM (es decir, 1000 veces menos que el conjunto de datos)

Las siguientes son dos formas de acceso al arquitecto:

(A) Mueva el archivo a un bloque de memoria de 4TB y acceda a él como una matriz int.

(B) abra (2) el archivo y use buscar (2) y lea (2) para leer los ints.

¿Fuera de A y B cuál tendrá el mejor desempeño ?, y ¿por qué?

¿Hay otro diseño que ofrezca un mejor rendimiento que A o B?

Respuestas a la pregunta(4)

Su respuesta a la pregunta