io_uring is faster than mmap
TL;DR
Чтение напрямую с диска быстрее, чем из кеша в памяти: пропускная способность SSD растёт, а латентность памяти стоит на месте. Нужны новые инструменты.
Эксперимент
- Задача: подсчитать количество десяток в 50 ГБ псевдослучайных
int
. - Железо: AMD EPYC 7551P, 96 ГБ DDR4-2133, два Samsung PM983a PCIe 3.0 SSD (3,1 ГБ/с каждый) в RAID-0.
- Ограничения:
- Память: 13 ГБ/с на поток (3 канала × 2133 МТ/с × 8 Б / 4 NUMA-домена).
- Диски: 6,2 ГБ/с суммарно.
Код
int* data = mmap(..., size, PROT_READ, MAP_SHARED, fd, 0);
for (...) if (data[i] == 10) count++;
Результаты
- Первый запуск (с диска): 0,61 ГБ/с — ограничение диск.
- Второй запуск (из кеша): 3,71 ГБ/с — всё ещё ниже пропускной способности памяти.
- Бутылочное горлышко: не векторизованный цикл, ~3–4,5 млрд инструкций/с.