Каковы нормальные (референсные) значения производительности дисковой подсистемы в Linux?

«Каковы нормальные (референсные) значения производительности дисковой подсистемы в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

«Нормальные» значения сильно зависят от типа накопителя, интерфейса и рабочей нагрузки. Приведенные цифры — ориентир для типовых конфигураций.

1. Жесткие диски (HDD, магнитные)

  • Скорость последовательного чтения/записи:
    • SATA 7200 RPM: 80 - 160 MB/s
    • SAS 10k/15k RPM: 140 - 250 MB/s
  • Производительность в операциях ввода-вывода (IOPS, Random 4K):
    • SATA 7200 RPM: 75 - 150 IOPS
    • SAS 10k/15k RPM: 120 - 200 IOPS
  • Задержка (Latency): 3 - 10 мс.

2. Твердотельные накопители (SSD)

  • Скорость последовательного чтения/записи:
    • SATA III: 450 - 550 MB/s (чтение), 400 - 520 MB/s (запись)
    • NVMe (PCIe 3.0 x4): 2500 - 3500 MB/s (чтение), 1500 - 3000 MB/s (запись)
    • NVMe (PCIe 4.0/5.0): 5000 - 14000+ MB/s
  • Производительность в операциях ввода-вывода (IOPS, Random 4K):
    • SATA III: 50,000 - 100,000 IOPS
    • NVMe: сотни тысяч до нескольких миллионов IOPS (зависит от модели).
  • Задержка (Latency): 0.05 - 0.2 мс.

Инструменты для проверки в Linux:

  • fio (Flexible I/O Tester): Наиболее точный и гибкий инструмент для синтетических тестов.

    # Тест случайного чтения 4K, 60 секунд, 1 поток, измерение IOPS и latency
    fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=1 
        --size=1G --runtime=60 --time_based --group_reporting
    
    # Тест последовательной записи
    fio --name=seqwrite --ioengine=libaio --rw=write --bs=1M --numjobs=1 
        --size=1G --runtime=60 --time_based --group_reporting
  • dd (осторожно!): Простой тест последовательной скорости, но может кэшироваться. Используйте oflag=direct для обхода кэша.

    # Запись 1 ГБ файла, обход кэша
    dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct status=progress
    # Чтение только что записанного файла
    dd if=./testfile of=/dev/null bs=1G iflag=direct status=progress
    rm ./testfile
  • hdparm: Быстрый тест кэшированного последовательного чтения (не отражает реальную производительность под нагрузкой).

    hdparm -tT /dev/sdX

Важно: На реальные показатели в продакшене влияют RAID-контроллер, файловая система, уровень износа SSD, фоновая нагрузка и параметры монтирования (например, noatime).