Для большасці працоўных станцый і гульнявых ПК адчуванне ад 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 і захоўвайце рэзервовыя копіі на іншых носьбітах.