Для більшості робочих станцій та ігрових ПК відчуття від NVMe SSD визначають затримка випадкового читання блоками 4K за малої глибини черги, швидкість запису після заповнення SLC-кешу, наявність DRAM або добре реалізованого HMB і охолодження, а не пікова послідовна швидкість на коробці. PCIe 5.0 окупається лише тоді, коли навантаження постійно передає великі файли, а накопичувач стоїть у слоті x4, підключеному до процесора. Серверу потрібні ще дві властивості: ресурс, виражений у DWPD, і захист від втрати живлення. Нижче показано, як перевірити кожен пункт за допомогою fio, smartctl і nvme-cli.
Послідовна швидкість і випадкові 4K за малої глибини черги
Послідовну швидкість вимірюють великими блоками за глибокої черги. Вона описує копіювання відео, відновлення образу диска або завантаження ваг моделі. Компіляція коду, запуск застосунків і запити до бази даних, яка не вміщується в RAM, натомість створюють дрібні читання, і кожен потік зазвичай чекає завершення одного читання, перш ніж надіслати наступне. Накопичувач тоді бачить чергу з однієї або кількох команд.
За глибини черги 1 IOPS дорівнюють одній секунді, поділеній на середню затримку. Якщо читання 4 KiB триває 80 мікросекунд, потік отримує 12 500 IOPS, тобто близько 51 MB/s. Якщо затримка зменшиться вдвічі, ця цифра подвоїться, а подвоєння пропускної здатності PCIe не змінить нічого. Тому накопичувачі з дуже різною послідовною швидкістю на настільному комп'ютері можуть відчуватися однаково.
Шукайте результати випадкового читання й запису 4K за QD1, а також затримки p99 або p99.9 під змішаним навантаженням. Те, чого виробники не публікують, виміряйте завданнями fio, наведеними нижче. Серверу потрібні й IOPS за великої глибини черги, бо багато клієнтів створюють реальний паралелізм. Індекс HNSW, який не вміщується в пам'ять, як у посібнику з гібридного пошуку на pgvector, перетворює кожен запит на ланцюжок залежних випадкових читань, де хвостова затримка важить більше, ніж GB/s.
Покоління PCIe, кількість ліній і підключення слотів M.2
PCIe 3.0, 4.0 і 5.0 працюють на швидкостях 8, 16 і 32 GT/s на лінію з кодуванням 128b/130b. Межа в одному напрямку дорівнює GT/s × 128/130 ÷ 8 GB/s на лінію, тому канал x4 дає близько 3,9, 7,9 і 15,8 GB/s до врахування накладних витрат протоколу. Накопичувач і слот узгоджують найвище покоління та ширину, які підтримують обидва: накопичувач PCIe 5.0 у слоті PCIe 4.0 працює на швидкості 4.0, а накопичувач x4 у слоті x2 отримує половину ліній.
На настільних платах частина слотів M.2 використовує лінії процесора, а частина підключена до чипсета. Чипсет має один канал до процесора, і його ділять USB, SATA, мережа та всі інші слоти чипсета. Плати також розділяють лінії: встановлення накопичувача в певний слот M.2 може вимкнути порти SATA або перевести графічний слот у режим x8. Схема підключення або таблиця слотів у посібнику до материнської плати показує, що куди підключено. Прочитайте її до купівлі.
Системний диск і найактивніший проєкт чи базу даних ставте в слот, підключений до процесора, а слоти чипсета використовуйте для ігор і архівів. PCIe 5.0 виправданий для відео з високим бітрейтом, копіювання наборів даних і завантаження великих файлів моделей, про яке розповідає посібник із заліза для локальних LLM. Для ігор і звичайної розробки добрий накопичувач PCIe 4.0 з низькою затримкою за QD1 зазвичай є кращим вибором.
Перевірте узгоджений канал
Порівняйте поточні параметри каналу з максимальними в sysfs:
cd /sys/class/nvme/nvme0/device
cat current_link_speed current_link_width max_link_speed max_link_width
Накопичувач PCIe 4.0 x4 у відповідному слоті повідомляє 16.0 GT/s PCIe і ширину 4. Нижче значення вказує на розведення слота, примусово вибране покоління в налаштуваннях прошивки, райзер або розділення ліній.
Контролер, кеш DRAM і HMB
Контролер зіставляє логічні адреси зі сторінками NAND через шар трансляції флешпам'яті (FTL). Пласкій таблиці з 4-байтовим записом на кожну сторінку 4 KiB потрібна 1/1024 ємності. Звідси й відоме співвідношення приблизно 1 GB DRAM на 1 TB NAND. Накопичувач із DRAM тримає більшу частину таблиці поруч із контролером, тому випадкові читання у великому діапазоні адрес залишаються швидкими.
Накопичувачі без DRAM використовують Host Memory Buffer (HMB) і позичають частину системної пам'яті під фрагмент таблиці. Накопичувач запитує обсяг у полі hmpre структури Identify Controller в одиницях по 4 KiB, а Linux обмежує його параметром nvme.max_host_mem_size_mb, типово 128 MiB на контролер. HMB підходить для настільних сценаріїв, що зачіпають обмежену частину накопичувача. Він допомагає менше, коли випадковий ввід-вивід охоплює сотні гігабайтів, як у баз даних і образів віртуальних машин.
nvme id-ctrl /dev/nvme0 | grep -E '^(mn|fr|hmpre|hmmin|vwc|wctemp|cctemp) '
cat /sys/module/nvme/parameters/max_host_mem_size_mb
Ненульове значення hmpre у накопичувача без DRAM підтверджує підтримку HMB. Буфер невеликий, але якщо пам'яті в системі вже бракує, підібрати обсяг допоможе посібник із пам'яті DDR5.
TLC, QLC і SLC-кеш
TLC зберігає три біти в комірці, QLC чотири. Більше бітів на комірку дають більше ємності на кристал, але запис відбувається повільніше, а циклів програмування й стирання менше. Споживчі накопичувачі приховують повільний запис SLC-кешем: вхідні дані записуються по одному біту на комірку і пізніше переносяться в TLC або QLC.
Кеш скінченний і часто динамічний, тобто зменшується в міру заповнення накопичувача. Коли довгий запис вичерпує кеш, швидкість падає до рівня після кешу, і в QLC він, як правило, нижчий. Рекомендації Ceph щодо обладнання називають це ефектом обриву (cliffing) і попереджають, що стала продуктивність після заповнення обмеженого кешу може помітно знизитися.
Шукайте в оглядах або специфікаціях розмір кешу за певної заповненості та швидкість запису після кешу. Якщо ви часто записуєте десятки гігабайтів за раз, наприклад під час імпорту відео, копіювання образів ВМ або резервного копіювання, вибирайте TLC і залишайте вільне місце. QLC підходить для бібліотек, які здебільшого читаються: ігор, медіафайлів і файлів моделей.
Ресурс: TBW, DWPD і гарантія
TBW — це рейтинг ресурсу з JEDEC JESD218: кількість десяткових терабайтів, яку хост може записати за навантаження, визначеного для класу накопичувача, поки накопичувач зберігає ємність і відповідає вимогам до частоти помилок, частоти відмов і зберігання даних без живлення. DWPD виражає той самий бюджет у перезаписах за день гарантійного строку:
DWPD = TBW / (capacity_TB × 365 × warranty_years)
TBW = DWPD × capacity_TB × 365 × warranty_years
Умовний накопичувач на 2 TB з рейтингом 1200 TBW і гарантією п'ять років дає 1200 / (2 × 365 × 5), приблизно 0,33 DWPD. Настільний комп'ютер, що записує 50 GB на день, за п'ять років витратить близько 91 TB. Базі даних, яка щодня перезаписує весь накопичувач, потрібно більше, і Ceph радить для навантажених пулів накопичувачі з рейтингом від 1 DWPD.
Запис хоста не дорівнює запису в NAND. Дрібні випадкові записи, заповнений накопичувач і відсутність TRIM підвищують коефіцієнт посилення запису (WAF). Розібраний у матеріалах JEDEC приклад оцінює ресурс як TBW < (capacity × NAND P/E cycles) / (2 × WAF). Залишайте вільне місце, вмикайте TRIM і для навантаження з інтенсивним записом беріть більшу ємність.
Багато споживчих гарантій закінчуються після спливу строку або після досягнення заявленого TBW, залежно від того, що настане раніше. JESD218 також задає строк зберігання даних без живлення для накопичувача, що вичерпав заявлений ресурс: один рік за 30 °C для клієнтського класу і три місяці за 40 °C для корпоративного. Знеструмлений SSD не є архівом, тому дотримуйтеся посібника з резервного копіювання 3-2-1.
Нагрівання, тротлінг і радіатори
Кожен контролер публікує в Identify Controller два пороги. На WCTEMP він продовжує роботу, але потребує кращого охолодження або меншого навантаження. На CCTEMP він може різко знизити продуктивність, вимкнутися або втратити дані. Базова специфікація NVM Express 2.4 задає ці температури в кельвінах і рекомендує поріг попередження 343 K, приблизно 70 °C.
Накопичувачам PCIe 5.0 і швидким PCIe 4.0 під тривалим навантаженням зазвичай потрібен радіатор. Використовуйте один радіатор, або кришку M.2 на платі з термопрокладкою, або власний радіатор накопичувача, і переконайтеся, що крізь нього проходить потік повітря. У ноутбуках і компактних корпусах накопичувач із меншим енергоспоживанням може виконати більше сталої роботи, ніж швидший, який тротлить. Журнал SMART рахує хвилини, проведені на кожному порозі або вище. Якщо лічильник попереджень зростає за звичайної роботи, покращте охолодження.
Захист від втрати живлення і корпоративні накопичувачі
Клієнтські накопичувачі підтверджують запис, щойно дані потрапляють в енергозалежний буфер, і розраховують, що хост скине його командою flush до вимкнення живлення. Журнал SMART враховує раптові вимкнення в полі Unexpected Power Losses, яке в попередніх редакціях специфікації називалося Unsafe Shutdowns, а сама специфікація попереджає, що на накопичувачах без захисту від втрати живлення можливе пошкодження даних.
Корпоративні накопичувачі із захистом від втрати живлення (PLP) використовують конденсатори, щоб після зникнення живлення записати буферизовані дані й метадані в NAND. Підтверджені записи зберігаються, а flush завершується без очікування NAND. Тому програми, які постійно викликають fsync, наприклад бази даних, журнали попереджувального запису, пристрої ZFS intent log і Ceph, працюють швидше й передбачуваніше, і Ceph рекомендує корпоративні накопичувачі з PLP.
nvme id-ctrl /dev/nvme0 | grep -E '^vwc '
cat /sys/block/nvme0n1/queue/write_cache
Поле vwc показує, чи повідомляє контролер про енергозалежний кеш запису, а значення write back у write_cache означає, що Linux надсилає накопичувачу команди flush. Остаточну відповідь щодо PLP дає специфікація накопичувача. Ніколи не вимикайте flush або бар'єри файлової системи на клієнтському накопичувачі заради цифр у бенчмарку.
Тестування нового накопичувача з fio
Тестуйте до того, як на накопичувачі з'являться дані, і використовуйте файли на його файловій системі, бо запис на сирий пристрій на кшталт /dev/nvme0n1 знищує вміст. Завдання використовують прямий ввід-вивід і io_uring. На старих ядрах вкажіть --ioengine=libaio. fio заздалегідь створює тестовий файл, тому читання потрапляють на записані дані.
cd /mnt/newdrive
# Випадкове читання 4K за глибини черги 1: те, що відчуває настільний ПК
fio --name=qd1-randread --filename=fio.test --size=32G \
--ioengine=io_uring --direct=1 --rw=randread --bs=4k \
--iodepth=1 --time_based --runtime=60 --ramp_time=5 \
--lat_percentiles=1 --percentile_list=50:99:99.9
# Змішаний випадковий 4K з паралелізмом: ближче до навантаженого сервера
fio --name=qd32-randrw --filename=fio.test --size=32G \
--ioengine=io_uring --direct=1 --rw=randrw --rwmixread=70 --bs=4k \
--iodepth=32 --numjobs=4 --group_reporting --time_based --runtime=120
# Послідовний запис за межі SLC-кешу, пропускна здатність щосекунди
fio --name=seqwrite-cliff --filename=fio-big.test --size=300G \
--ioengine=io_uring --direct=1 --rw=write --bs=1M --iodepth=8 \
--write_bw_log=cliff --log_avg_msec=1000
У завданні QD1 дивіться на середню затримку і p99, а не лише на IOPS. У змішаному завданні порівнюйте затримку p99.9 різних накопичувачів. Обсяг для завдання з обривом задайте більшим за очікуваний кеш, але меншим за вільне місце. Завдання пише cliff_bw.1.log, по рядку щосекунди з часом у мілісекундах і пропускною здатністю в KiB/s, а графік покаже швидкість у кеші, обрив і можливий тротлінг. Після тесту видаліть файли. Усі використані параметри описано в документації fio.
Стан накопичувача в smartctl і nvme-cli
smartmontools і nvme-cli читають той самий журнал SMART / Health Information:
smartctl -x /dev/nvme0
nvme smart-log /dev/nvme0
У nvme-cli 3.0, що вийшов у вересні 2026 року, команди перейменовано на форми на кшталт nvme log smart і nvme id ctrl. Використані тут назви через дефіс залишаються застарілими псевдонімами й працюють також у nvme-cli 2.x.
- Critical Warning: будь-який ненульовий біт вимагає дій. Біти описують запас резервних блоків, температуру, надійність і переведення носія в режим лише для читання.
- Available Spare: залишок резерву у відсотках. Зниження до Available Spare Threshold означає, що накопичувач виводить блоки з роботи.
- Percentage Used: оцінка витраченого ресурсу від виробника. Значення може перевищувати 100, і саме по собі це не означає відмову.
- Data Units Written: тисячі одиниць по 512 байтів. Помножте на 512 000, щоб отримати байти: 10 000 000 одиниць дорівнюють 5,12 TB. Записуйте значення щомісяця, щоб дізнатися свій реальний DWPD.
- Media and Data Integrity Errors: невідновлені помилки. Будь-яке зростання означає, що резервні копії треба перевірити негайно.
Самотестування і прошивка
smartctl -t short /dev/nvme0
smartctl -l selftest /dev/nvme0
nvme fw-log /dev/nvme0
fwupdmgr get-updates
fwupdmgr update
Самотестування пристрою в специфікації NVMe необов'язкове, тому деякі накопичувачі його відхиляють. Налаштуйте smartd або систему моніторингу на сповіщення за переліченими полями. Прошивка впливає на продуктивність, керування живленням і обробку помилок, тому перед оновленням читайте примітки до випуску й робіть резервну копію. Плагін NVMe у fwupd встановлює оновлення від виробників, які публікують їх у LVFS, і активує їх під час наступного перезавантаження. Для інших виробників потрібна їхня власна утиліта або nvme fw-download і nvme fw-commit з їхнім образом. У дзеркалі спершу оновлюйте один накопичувач. Якщо накопичувач зникає з шини в Linux, спершу пошукайте виправлення в прошивці; параметр ядра nvme_core.default_ps_max_latency_us=0 вимикає автономні переходи між станами живлення як діагностичний крок.
Вирівнювання розділів і TRIM у Linux
fdisk і parted вирівнюють розділи за топологією вводу-виводу, яку повідомляє пристрій, тому залишайте їхні типові значення й перевіряйте результат:
lsblk -t /dev/nvme0n1
parted /dev/nvme0n1 align-check optimal 1
nvme id-ns -H /dev/nvme0n1 | grep 'LBA Format'
Команда parted align-check повідомляє, чи вирівняно розділ 1 оптимально. Остання команда перелічує підтримувані формати LBA й позначає активний. Багато накопичувачів постачаються із секторами 512 байтів і підтримують також 4096 байтів. nvme format --lbaf=<n> змінює формат, але стирає простір імен, тому вирішуйте до запису даних і після перевірки, що завантажувач, шар RAID і гіпервізор працюють із пристроями 4Kn.
TRIM повідомляє накопичувачу, які блоки вільні, тож збирання сміття не копіює застарілі сторінки, посилення запису знижується, а швидкість після кешу тримається. Надавайте перевагу періодичному TRIM:
sudo systemctl enable --now fstrim.timer
sudo fstrim -av
lsblk --discard
Довідка fstrim вважає щотижневий TRIM достатнім для більшості настільних систем і серверів і попереджає, що частий TRIM або опція монтування discard можуть скоротити строк служби неякісних SSD. Btrfs починаючи з ядра 6.2 автоматично вмикає discard=async на пристроях, які це підтримують. Ненульові значення DISC-GRAN і DISC-MAX у виводі lsblk --discard означають, що запити discard доходять до пристрою. dm-crypt типово ігнорує discard, оскільки такі запити можуть розкрити, які блоки зайняті. Вмикайте їх опцією discard у crypttab або прапорцем --allow-discards лише тоді, коли такий витік прийнятний. Залишайте й вільне місце, бо SLC-кешу і збиранню сміття потрібні вільні блоки.
Вибір накопичувача під задачу
| Вимога | Ігровий ПК | Робоча станція розробника або автора контенту | Сервер БД або віртуалізації | Сховище для читання |
|---|---|---|---|---|
| Інтерфейс | PCIe 4.0, 5.0 за бажанням | PCIe 4.0 або 5.0 у слоті процесора | U.2, E1.S, E3.S або M.2 22110 | PCIe 4.0 або 3.0, слот чипсета |
| Випадкові 4K за QD1 | Високий пріоритет | Високий пріоритет | Високий, плюс IOPS за великої черги і p99.9 | Низький пріоритет |
| DRAM чи HMB | HMB прийнятний | Краще DRAM | DRAM | HMB прийнятний |
| NAND | TLC, QLC для бібліотеки ігор | TLC | Корпоративний TLC | QLC прийнятний |
| Запис після кешу | Низький пріоритет | Високий пріоритет | Стала швидкість за специфікацією | Низький, якщо імпорт невеликий |
| Ресурс | 0,3 DWPD досить | Розрахуйте за своїм записом | Від 1 DWPD | Низький пріоритет |
| Захист від втрати живлення | Не потрібен | Корисний для локальних БД | Обов'язковий | Не потрібен |
| Охолодження | Радіатор плати | Радіатор і потік повітря | Обдув корпусу сервера | Радіатор плати |
Чек-лист до і після купівлі
- Опишіть навантаження: обсяг запису на день, найбільший разовий запис, характер доступу і програми, що активно викликають fsync.
- Перевірте в посібнику до плати, які слоти M.2 підключені до процесора і що вони вимикають.
- Для інтенсивного випадкового навантаження і запису беріть TLC з DRAM, а HMB чи QLC залиште для ролей, де дані здебільшого читаються.
- Розрахуйте DWPD за TBW і прочитайте умови гарантії.
- Для серверів вимагайте PLP, рейтинг DWPD і спосіб оновлення прошивки.
- Встановіть один радіатор з обдувом і через тиждень перевірте температурні лічильники.
- Після встановлення перевірте швидкість і ширину каналу та запишіть версію прошивки.
- Запустіть три завдання fio і збережіть результати як базову лінію.
- Увімкніть
fstrim.timer, перевірте вирівнювання і визначтеся з форматом LBA до запису даних. - Стежте за Critical Warning, помилками носія, Available Spare і Percentage Used та зберігайте резервні копії на інших носіях.