Данила (Dayfing)
Жарияланымдарға оралу
2 399 сөз11 мин

NVMe SSD таңдау: PCIe 5.0 немесе 4.0, DRAM, TLC немесе QLC, TBW

Жұмыс станцияларының және ойын ПК-лерінің көбінде 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 өткізу қабілетін екі есе арттыру ештеңені өзгертпейді. Сондықтан тізбекті жылдамдығы мүлде әртүрлі жинақтағыштар жұмыс үстелінде бірдей сезілуі мүмкін.

QD1 кезіндегі 4K кездейсоқ оқу мен жазу нәтижелерін, сондай-ақ аралас жүктеме кезіндегі p99 немесе p99.9 кідірістерін іздеңіз. Өндірушілер жарияламайтын көрсеткіштерді төмендегі fio тапсырмаларымен өлшеңіз. Серверге терең кезектегі IOPS та қажет, өйткені көптеген клиенттер нақты параллелизм жасайды. pgvector гибридті іздеу нұсқаулығындағыдай жадқа сыймайтын HNSW индексі әр сұрауды бір-біріне тәуелді кездейсоқ оқулар тізбегіне айналдырады, мұнда 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 жабдығы нұсқаулығында сипатталғандай үлкен модель файлдарын жүктеуге тұрарлық. Ойындар мен күнделікті әзірлеу үшін QD1 кідірісі төмен жақсы PCIe 4.0 жинақтағышы әдетте тиімдірек таңдау болады.

Келісілген арнаны тексеріңіз

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

Контроллер логикалық адрестерді флеш-жадты трансляциялау қабаты (FTL) арқылы NAND беттерімен сәйкестендіреді. Әр 4 KiB бетке 4 байттық жазба беретін жазық кестеге сыйымдылықтың 1/1024 бөлігі керек. Жиі айтылатын 1 TB NAND-қа шамамен 1 GB DRAM қатынасы осыдан шығады. DRAM бар жинақтағыш кестенің үлкен бөлігін контроллердің жанында ұстайды, сондықтан үлкен адрес ауқымындағы кездейсоқ оқулар жылдам қалады.

DRAM жоқ жинақтағыштар Host Memory Buffer (HMB) пайдаланып, кестенің бір бөлігі үшін жүйелік жадтан орын алады. Жинақтағыш Identify Controller құрылымының hmpre өрісінде 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

DRAM жоқ жинақтағыштағы нөлден өзге hmpre мәні 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

Рейтингі 1200 TBW және кепілдігі бес жыл болатын шартты 2 TB жинақтағыш 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 Base Specification 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_cache ішіндегі write back мәні Linux жинақтағышқа flush командаларын жіберетінін білдіреді. PLP бар-жоғы туралы түпкілікті жауапты жинақтағыштың техникалық сипаттамасы береді. Бенчмарк сандары үшін клиенттік жинақтағышта flush немесе файлдық жүйе бөгеттерін ешқашан өшірмеңіз.

Жаңа жинақтағышты fio арқылы тексеру

Жинақтағышта деректер пайда болмай тұрып тексеріңіз және оның файлдық жүйесіндегі файлдарды пайдаланыңыз, өйткені /dev/nvme0n1 сияқты шикі құрылғыға жазу оның мазмұнын жояды. Тапсырмалар тікелей енгізу-шығару мен io_uring пайдаланады. Ескі ядроларда --ioengine=libaio көрсетіңіз. fio сынақ файлын алдын ала жасайды, сондықтан оқулар жазылған деректерге түседі.

cd /mnt/newdrive

# Кезек тереңдігі 1 кезіндегі 4K кездейсоқ оқу: үстел ПК сезетін көрсеткіш
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 тапсырмасында тек IOPS-қа емес, орташа кідіріс пен p99-ға қараңыз. Аралас тапсырмада әртүрлі жинақтағыштардың 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

2026 жылдың қыркүйегінде шыққан nvme-cli 3.0 командаларды 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 немесе мониторинг жүйесін жоғарыдағы өрістер бойынша ескерту жіберетіндей баптаңыз. Микробағдарлама өнімділікке, қуатты басқаруға және қателерді өңдеуге әсер етеді, сондықтан жаңарту алдында шығарылым жазбаларын оқып, сақтық көшірме жасаңыз. fwupd ішіндегі NVMe плагині жаңартуларды LVFS-те жариялайтын өндірушілерден орнатады және келесі қайта жүктеуде іске қосады. Басқа өндірушілерге олардың өз утилитасы немесе олардың бейнесімен nvme fw-download пен nvme fw-commit керек. Айнада алдымен бір жинақтағышты жаңартыңыз. Егер Linux-та жинақтағыш шинадан жоғалып кетсе, алдымен микробағдарлама түзетуін іздеңіз; nvme_core.default_ps_max_latency_us=0 ядро параметрі диагностикалық қадам ретінде қуат күйлері арасындағы автономды ауысуларды өшіреді.

Linux-та бөлімдерді туралау және TRIM

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 опциясын автоматты түрде қосады. lsblk --discard шығысындағы DISC-GRAN және DISC-MAX мәндерінің нөлден өзге болуы discard сұраулары құрылғыға жететінін білдіреді. dm-crypt әдепкіде discard сұрауларын елемейді, өйткені олар қай блоктардың бос емес екенін аша алады. Оларды crypttab ішіндегі discard опциясымен немесе --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, чипсет слоты
QD1 кезіндегі кездейсоқ 4K Жоғары басымдық Жоғары басымдық Жоғары, қосымша терең кезектегі IOPS және p99.9 Төмен басымдық
DRAM немесе HMB HMB жарайды DRAM жақсырақ DRAM HMB жарайды
NAND TLC, ойын кітапханасына QLC TLC Корпоративтік TLC QLC жарайды
Кэштен кейінгі жазу Төмен басымдық Жоғары басымдық Спецификациядағы тұрақты жылдамдық Импорт аз болса, төмен
Ресурс 0,3 DWPD жеткілікті Өз жазуыңыз бойынша есептеңіз Кемінде 1 DWPD Төмен басымдық
Қуат жоғалуынан қорғау Қажет емес Жергілікті дерекқорларға пайдалы Міндетті Қажет емес
Салқындату Плата радиаторы Радиатор және ауа ағыны Сервер корпусын үрлеу Плата радиаторы

Сатып алуға дейінгі және кейінгі тексеру тізімі

  1. Жүктемені сипаттаңыз: күнделікті жазу көлемі, ең үлкен бір реттік жазу, қолжетімділік сипаты және fsync-ті жиі шақыратын бағдарламалар.
  2. Плата нұсқаулығынан қай M.2 слоттары процессорға қосылғанын және олар нені өшіретінін тексеріңіз.
  3. Кездейсоқ жүктемесі мен жазуы көп жұмысқа DRAM бар TLC алыңыз, ал HMB немесе QLC-ді деректер көбіне оқылатын рөлдерге қалдырыңыз.
  4. DWPD-ні TBW бойынша есептеп, кепілдік шарттарын оқыңыз.
  5. Серверлер үшін PLP, DWPD рейтингін және микробағдарламаны жаңарту жолын талап етіңіз.
  6. Ауа ағыны бар бір радиатор орнатып, бір аптадан кейін температура есептегіштерін тексеріңіз.
  7. Орнатқаннан кейін арна жылдамдығы мен енін тексеріп, микробағдарлама нұсқасын жазып алыңыз.
  8. Үш fio тапсырмасын іске қосып, нәтижелерді бастапқы өлшем ретінде сақтаңыз.
  9. fstrim.timer қосыңыз, туралауды тексеріңіз және деректер жазбас бұрын LBA пішімін анықтаңыз.
  10. Critical Warning, тасымалдағыш қателері, Available Spare және Percentage Used көрсеткіштерін бақылаңыз және сақтық көшірмелерді басқа тасымалдағыштарда ұстаңыз.

Басқа жарияланымдар