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?