Linux: большой массив int: mmap против файла поиска?

Предположим, у меня есть набор данных, представляющий собой массив из 1e12 32-битных целых (4 ТБ), который хранится в файле в файловой системе 4D HDD ext4

Учтите, что данные, скорее всего, случайны (или, по крайней мере, кажутся случайными).

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

Кроме того, учтите, что я хочу прочитать отдельные элементы int в непредсказуемом порядке и что алгоритм работает неопределенно долго (он продолжается).

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

Мы на Linux x86_64, gcc. Можно предположить, что система имеет 4 ГБ ОЗУ (т.е. в 1000 раз меньше, чем набор данных)

Ниже приведены два способа создания доступа:

(A) преобразовать файл в блок памяти объемом 4 ТБ и получить к нему доступ в виде массива int

(B) откройте (2) файл и используйте seek (2) и прочитайте (2), чтобы прочитать целые числа.

Из A и B, которые будут иметь лучшую производительность? И почему?

Есть ли другой дизайн, который даст лучшую производительность, чем A или B?

Ответы на вопрос(4)

Ваш ответ на вопрос