Даніла (Dayfing)
Назад да публікацый
2572 слоў12 хв

Памяць DDR5 для распрацоўшчыка: аб’ём, частата, таймінгі і ECC

Для большасці задач распрацоўкі ў 2026 годзе 32 ГБ DDR5 з’яўляюцца практычным мінімумам, 64 ГБ становяцца камфортнай нормай, як толькі ў працы з’яўляюцца кантэйнеры, лакальны кластар Kubernetes або віртуальная машына, а 96–128 ГБ і больш патрэбныя для некалькіх VM, вялікіх набораў даных або лакальных LLM з выгрузкай слаёў на CPU. Купляйце гэты аб’ём двума аднолькавымі модулямі, а не чатырма, і запускайце памяць на афіцыйнай частаце працэсара або на профілі, які вы сапраўды праверылі. Параўноўвайце камплекты па затрымцы ў нанасекундах, а не па ліку CAS, і выбірайце сапраўдную ECC толькі на платформе, якая падтрымлівае яе і паведамляе пра памылкі ад пачатку да канца.

Лічыце аб’ём па нагрузцы

Ціск на памяць ствараюць праграмы, якія працуюць адначасова, таму складайце пікі, што перасякаюцца, а не сярэднія значэнні.

Рэдактары, браўзеры і моўныя серверы

Сама IDE рэдка становіцца праблемай. Памяць забіраюць моўныя серверы і індэксатары для кожнага адкрытага праекта, а таксама браўзер з дакументацыяй і праграмамі, якія вы распрацоўваеце. Для такой нагрузкі 32 ГБ пакідаюць месца для зборак і файлавага кэша, які паскарае паўторныя зборкі.

Кантэйнеры і Kubernetes у Docker

У macOS і Windows кантэйнеры працуюць унутры Linux-VM з жорсткай столлю. Docker Desktop у macOS па змаўчанні абмяжоўвае памяць 50% памяці хаста, а ў Windows бэкенд WSL 2 успадкоўвае параметр memory з WSL, які таксама па змаўчанні роўны 50% памяці Windows (налады WSL). На ноўтбуку з 32 ГБ гэта пакідае каля 16 ГБ на ўсе кантэйнеры, вузлы kind і зборкі. Паралельныя агенты для кода памнажаюць нагрузку, бо ў кожным worktree можа запусціцца свой dev-сервер, тэставая база і зборка, як апісана ў дапаможніку па агентнай распрацоўцы.

Базы даных і віртуальныя машыны

Дакументацыя PostgreSQL раіць пачынаць з 25% RAM для shared_buffers на выдзеленым серверы, але працоўная станцыя такім серверам не з’яўляецца. Памер буфераў базы падбірайце пад рабочы набор даных, да якога вы сапраўды звяртаецеся. З віртуальнымі машынамі прасцей: калі гіпервізар не выкарыстоўвае ballooning або дынамічную памяць, запушчаная гасцявая сістэма ўтрымлівае большую частку вылучанай ёй RAM. Мінімум Microsoft для Windows 11 складае 4 ГБ, а госцю з IDE ўнутры трэба значна больш. Дзве або тры адначасова запушчаныя VM часта становяцца прычынай, па якой 64 ГБ перастае хапаць.

Лакальныя LLM з выгрузкай на CPU

Вагі займаюць прыкладна parameters × bits per weight / 8 байт, таму мадэлі на 70B параметраў пры квантаванні каля 4,5 біта на вагу трэба прыкладна 39 ГБ яшчэ да KV-кэша і накладных выдаткаў асяроддзя выканання. Слаі, якія не змяшчаюцца ў GPU, ляжаць у сістэмнай памяці і чытаюцца для кожнага згенераванага токена. Аб’ём вызначае, ці загрузіцца мадэль наогул, а прапускная здольнасць абмяжоўвае хуткасць генерацыі. Выбар GPU і квантавання разабраны ў дапаможніку па жалезе для лакальных LLM.

Вымерайце свой пік да пакупкі

Мае значэнне пікавая нагрузка самага цяжкага звычайнага працоўнага дня. У Linux запісвайце даступную памяць і ціск на яе кожныя 30 секунд, пакуль працуеце:

#!/usr/bin/env bash
# Log memory headroom and pressure every 30 seconds (stop with Ctrl+C)
while true; do
  {
    printf '%s ' "$(date -Is)"
    awk '/^(MemTotal|MemAvailable|SwapTotal|SwapFree):/ {printf "%s %d ", $1, $2/1024}' /proc/meminfo
    awk '/^some/ {print "psi_some_" $2}' /proc/pressure/memory
  } >> "$HOME/mem-headroom.log"
  sleep 30
done

Потым вылічыце пік як агульны аб’ём мінус мінімальнае значэнне MemAvailable. Паколькі MemAvailable лічыць кэш, які можна вызваліць, вольнай памяццю, вынік паказвае, колькі сапраўды спатрэбілася праграмам:

awk '{t=$3; a=$5; if (min == "" || a < min) min = a}
     END {printf "peak used: %d MiB of %d MiB\n", t - min, t}' "$HOME/mem-headroom.log"

Ціск важны не менш за пік. some avg10 паказвае асераднёную за 10 секунд долю часу, на працягу якой хоць адна задача чакала памяць. Устойліва ненулявыя значэнні, swap, які расце, або спрацоўванні OOM killer у journalctl -k азначаюць, што памяці ўжо не хапае. Swap на хуткім назапашвальніку змякчае праблему, але не замяняе RAM, а пра выбар назапашвальніка расказвае дапаможнік па куплі NVMe SSD.

Адну цяжкую каманду, напрыклад поўную зборку, запусціце ў асобнай cgroup і прачытайце memory.peak, гэта значыць максімальнае спажыванне, запісанае для cgroup і яе нашчадкаў, разам з page cache:

cat > peak-mem.sh <<'EOF'
#!/usr/bin/env bash
# Run a command and report the peak memory of its cgroup
"$@"
status=$?
cg="/sys/fs/cgroup$(cut -d: -f3 /proc/self/cgroup)"
echo "memory.peak: $(( $(cat "$cg/memory.peak") / 1048576 )) MiB" >&2
exit "$status"
EOF
chmod +x peak-mem.sh
systemd-run --user --scope --quiet ./peak-mem.sh make -j"$(nproc)"

Для кантэйнераў і вузлоў kind выкарыстоўвайце docker stats --no-stream, у macOS глядзіце графік нагрузкі на памяць у Activity Monitor, а ў Windows сачыце за вылучанай памяццю ў Дыспетчары задач. Дадайце запас і акругліце ўверх да аб’ёму, які даюць два модулі.

Каналы і чаму два модулі звычайна лепшыя за чатыры

Масавыя настольныя платформы, напрыклад AMD Ryzen 9000 на AM5 і Intel Core Ultra 200S, маюць два каналы DDR5. Кожны модуль DDR5 складаецца з двух цалкам незалежных падканалаў па 32 біты даных, таму двухканальны камп’ютар перадае 128 бітаў даных за адну перадачу. Адсюль пікавая тэарэтычная прапускная здольнасць:

bandwidth (GB/s) = channels × 8 bytes × data rate (MT/s) / 1000

2 × 8 × 5600 / 1000 = 89.6 GB/s    dual-channel DDR5-5600
2 × 8 × 6400 / 1000 = 102.4 GB/s   dual-channel DDR5-6400

Чатыры модулі на тых самых двух каналах дадаюць аб’ём, але не прапускную здольнасць.

Адзін модуль на канал супраць двух

Цалкам запоўненая плата з чатырма слотамі працуе ў рэжыме двух модуляў на канал, і кожны дадатковы модуль нагружае тыя самыя сігнальныя лініі. У спецыфікацыі AMD для Ryzen 9 9950X пазначана DDR5-5600 для двух модуляў і DDR5-3600 для чатырох, як аднаранговых, так і двухранговых (характарыстыкі AMD Ryzen 9 9950X). У брашуры Intel сказана, што максімальныя частоты датычацца аднаго модуля на канал, а дадатковая нагрузка можа іх знізіць (апісанне Intel Core Ultra desktop Series 2).

Спачатку выберыце агульны аб’ём, потым купіце яго двума модулямі: 2 × 32 ГБ для 64 ГБ, 2 × 48 ГБ для 96 ГБ, 2 × 64 ГБ для 128 ГБ. Займайце чатыры слоты, толькі калі двум модулям не змясціць патрэбны аб’ём, і змірыцеся з ніжэйшай частатой і даўжэйшай трэніроўкай памяці. Дакупка другога камплекта пазней часта прыводзіць да нестабільнасці, бо гэтыя камплекты ніхто не правяраў разам.

Частата, CAS-латэнтнасць і рэальная затрымка

У абазначэнні DDR5-6000 CL30 хуткасць перадачы пазначана ў мегатрансферах у секунду, а CAS-латэнтнасць лічаць у тактах. DDR перадае даныя двойчы за такт, таму затрымка першага слова ў нанасекундах роўная:

true latency (ns) = CL × 2000 / data rate (MT/s)

DDR5-4800 CL40: 40 × 2000 / 4800 = 16.7 ns
DDR5-5600 CL46: 46 × 2000 / 5600 = 16.4 ns
DDR5-6000 CL30: 30 × 2000 / 6000 = 10.0 ns
DDR5-6400 CL32: 32 × 2000 / 6400 = 10.0 ns

Вышэйшы CL у больш хуткага камплекта не робіць яго аўтаматычна горшым. CAS з’яўляецца толькі адным з таймінгаў, таму выкарыстоўвайце формулу для параўнання камплектаў, а не для прагнозу таго, што ўбачыць праграма.

Для распрацоўкі парадак прыярытэтаў такі: аб’ём, потым стабільнасць, потым прапускная здольнасць, потым затрымка, бо машына, якая пайшла ў swap, губляе больш, чым можа вярнуць любы таймінг. Выключэнне складае інферэнс на CPU: для выгружаных слаёў колькасць токенаў у секунду не можа перавысіць прапускную здольнасць, падзеленую на аб’ём вагаў, якія чытаюцца на адзін токен. Пры 30 ГБ шчыльных вагаў у RAM і 89,6 ГБ/с столь складае каля 3 токенаў у секунду. Мадэлі mixture-of-experts чытаюць толькі актыўных экспертаў, што зніжае гэты кошт, але не патрэбны аб’ём.

XMP і EXPO: заяўленая частата з’яўляецца разгонам

Рознічны камплект захоўвае стандартныя таймінгі JEDEC, якія плата выкарыстоўвае па змаўчанні, і профілі вытворцы. Intel XMP 3.0 падтрымлівае да пяці профіляў: тры ад вытворцы і два перазапісвальныя, а AMD EXPO дае профілі, настроеныя пад Ryzen на AM5. Абодва вендары называюць гэта разгонам. Intel папярэджвае, што выкарыстанне XMP па-за спецыфікацыямі можа пазбавіць працэсар гарантыі (Intel XMP), а AMD паказвае, што праца памяці па-за апублікаванымі AMD спецыфікацыямі ануляе гарантыю AMD (AMD EXPO).

Вытворца камплекта праверыў профіль на пэўных платах, а кантролер памяці вашага працэсара з’яўляецца асобным экзэмплярам. Для працоўнай машыны парадак такі:

  1. Спачатку абнавіце прашыўку платы, бо код трэніроўкі памяці мяняецца ад версіі да версіі.
  2. Уключыце профіль і дачакайцеся заканчэння першай загрузкі. Трэніроўка DDR5 пасля змены памяці можа ісці значна даўжэй за звычайны старт.
  3. Выканайце апісаныя ніжэй тэсты стабільнасці, перш чым давяраць машыне рэальную працу.
  4. Пры памылках зніжайце частату на прыступку або вяртайцеся да налад JEDEC па змаўчанні, а не падымайце напружанні наўздагад.

Праца на афіцыйнай частаце працэсара з’яўляецца нармальным выбарам для машыны, якая павінна быць хутчэй правільнай, чым хуткай.

CUDIMM і драйвер тактавага сігналу

CUDIMM з’яўляецца небуферызаваным модулем з драйверам тактавага сігналу (CKD) на плаце модуля. Стандарт JEDEC DDR5CKD01 апісвае драйвер, які нанова фарміруе тактавы сігнал для модуляў CUDIMM, CSODIMM і CAMM (драйвер тактавага сігналу JEDEC DDR5), што паляпшае якасць сігналу на высокіх частотах.

Ці будзе ад гэтага карысць, вырашае падтрымка платформы. У брашуры Intel для Core Ultra 200S пазначана DDR5-6400 для аднаго CUDIMM на канал, а сакавіцкі анонс Core Ultra 200S Plus 2026 года падымае гэта значэнне да DDR5-7200 і дадае раннюю падтрымку чатырохранговых CUDIMM аб’ёмам да 128 ГБ на асобных платах з чыпсэтамі Intel 800-й серыі. На іншых платформах спачатку праверце спецыфікацыю працэсара і спіс сумяшчальнай памяці платы. CUDIMM не з’яўляецца рэгістравым модулем і не мае знешняй (side-band) ECC, калі ў апісанні прама не сказана іначай.

On-die ECC не робіць памяць ECC

Кожная мікрасхема DDR5 мае on-die ECC, і JEDEC пералічвае яе сярод функцый, якія дазваляюць выпускаць памяць па сучасных тэхпрацэсах (стандарт JEDEC DDR5). Яна выпраўляе памылкі толькі ўнутры масіву DRAM. Яна не абараняе модуль, раз’ём і шыну, а яе выпраўленні не паведамляюцца аперацыйнай сістэме. Надпіс on-die ECC у звычайнага UDIMM апісвае сам стандарт DDR5, а не ECC-модуль.

Side-band ECC дадае мікрасхемы DRAM, якія захоўваюць кантрольныя біты для кожнага падканала. Кантролер памяці правярае кожнае звяртанне, выпраўляе тое, што дазваляе код, выяўляе больш сур’ёзныя памылкі і паведамляе пра тыя і другія аперацыйнай сістэме. Менавіта гэтая справаздачнасць дае галоўную карысць: лічыльнік выпраўленых памылак, які расце на адным модулі, служыць раннім папярэджаннем, а машына без ECC проста час ад часу падае або псуе даныя.

UDIMM, RDIMM і ключ раз’ёму

ECC UDIMM з’яўляюцца небуферызаванымі і падыходзяць для спажывецкіх плат і малодшых працоўных станцый, калі платформа падтрымлівае ECC. RDIMM дадаюць рэгістравы драйвер тактавага сігналу і прызначаныя для сервераў і старэйшых працоўных станцый. У DDR5 UDIMM і RDIMM розныя ключы, таму яны не ўзаемазаменныя і не змешваюцца.

Якія платформы падтрымліваюць сапраўдную ECC

ECC працуе толькі тады, калі яе падтрымліваюць працэсар, чыпсэт, прашыўка і модулі. На верасень 2026 года карціна такая:

  • AMD Ryzen 9000 на AM5: AMD пазначае падтрымку ECC як «Yes (Requires mobo support)» для мадэляў накшталт 9950X. Праверце падтрымку ECC UDIMM у кіраўніцтве платы і дакладную мадэль працэсара, бо настольныя сямействы AMD адрозніваюцца.
  • AMD EPYC 4005 на AM5: серверныя працэсары для таго самага сокета з падтрымкай DDR5 ECC да 192 ГБ.
  • AMD Ryzen Threadripper PRO 9000 WX-Series: да васьмі каналаў DDR5 RDIMM з ECC, уключанай па змаўчанні.
  • Intel Core Ultra 200S: ECC патрабуе падтрымкі і з боку працэсара, і з боку чыпсэта (артыкул Intel пра падтрымку ECC). Intel пазначае падтрымку ECC для W880 і яе адсутнасць для Z890.
  • Працэсары Intel Xeon 600 для працоўных станцый на W890: рэгістравая DDR5 з ECC.

Пасля першай загрузкі з ECC-модулямі праверце, што ECC сапраўды працуе, а не мяркуйце гэта.

Ноўтбукі: распаяная LPDDR5X і CAMM2

Большасць тонкіх ноўтбукаў выкарыстоўваюць LPDDR5X, распаяную на плаце або размешчаную на корпусе працэсара. Яна хуткая і эканамічная, але аб’ём фіксуецца пры куплі, а некаторыя платформы абмяжоўваюць яго невялікім значэннем: для Intel Core Ultra 7 258V максімум складае 32 ГБ. Купляйце адразу той аб’ём, да якога інакш пашыраліся б пазней.

На іншым канцы спектра знаходзяцца шырокія рашэнні. AMD Ryzen AI Max+ PRO 395 выкарыстоўвае 256-бітны інтэрфейс LPDDR5X-8000 і да 128 ГБ памяці, што дае 32 байты × 8000 MT/s = 256 ГБ/с тэарэтычнай прапускной здольнасці, у два з паловай разы больш, чым у двухканальнага настольнага камп’ютара з DDR5-6400. Таму такія машыны цікавыя для лакальных мадэляў, але мадэрнізаваць у іх нічога нельга.

CAMM2 з’яўляецца зменнай альтэрнатывай. Стандарт JEDEC JESD318, апублікаваны ў снежні 2023 года, апісвае модулі Compression Attached Memory Module для DDR5 і LPDDR5/5X з агульнай канструкцыяй раз’ёму. Даступнасць залежыць ад канкрэтнай мадэлі ноўтбука, таму шукайце CAMM2 або LPCAMM2 у спецыфікацыі вытворцы. Ноўтбукі са слотамі SO-DIMM застаюцца самым простым варыянтам для пашырэння.

Праверка стабільнасці ў memtest86+ і чытанне памылак у Linux

Правярайце кожны новы камплект, кожную змену профілю і кожнае абнаўленне прашыўкі, якое мяняе трэніроўку памяці. Memtest86+ з’яўляецца бясплатным аўтаномным тэстарам з адкрытым зыходным кодам. Бягучы выпуск v8.10 выйшаў у траўні 2026 года, і адзін бінарны файл загружаецца як у UEFI, так і ў legacy BIOS (memtest86+). Бінарны файл не падпісаны Microsoft, таму на час тэсту адключыце Secure Boot, а потым уключыце яго зноў. Адзін поўны праход правярае ўсю памяць, а даўжэйшы прагон дадае ўпэўненасці. Калі разагнаная сістэма выдае памылкі, паўтарыце тэст на наладах па змаўчанні, а потым правярайце модулі па адным. Гэта асобны праект, не звязаны з PassMark MemTest86.

Зрабіце адзін праход на наладах JEDEC па змаўчанні, калі машына новая, некалькі праходаў пасля ўключэння профілю, а потым нагрузачны тэст унутры АС:

sudo apt install stressapptest
# Test 75% of RAM for one hour with CPU-intensive copy threads
stressapptest -s 3600 -M "$(awk '/MemTotal/ {printf "%d", $2*0.75/1024}' /proc/meminfo)" -W

Пры наяўнасці ECC Linux паведамляе пра выпраўленыя і невыпраўленыя памылкі праз лічыльнікі EDAC у sysfs (дакументацыя ядра па EDAC):

ls /sys/devices/system/edac/mc/
sudo dmesg | grep -i -E 'edac|ecc'
grep -H . /sys/devices/system/edac/mc/mc*/ce_count /sys/devices/system/edac/mc/mc*/ue_count

sudo apt install rasdaemon
sudo ras-mc-ctl --status
sudo ras-mc-ctl --error-count

Пусты каталог /sys/devices/system/edac/mc/ азначае, што для гэтага кантролера няма драйвера EDAC або ECC выключаная, што б ні было напісана на модулі, а dmidecode -t memory паказвае толькі тое, што заяўляе прашыўка. Любую невыпраўленую памылку лічыце апаратным інцыдэнтам, а лічыльнік выпраўленых памылак, які расце на адным модулі, лічыце падставай яго замяніць. У новых версіях rasdaemon гэтыя опцыі перанесены ў падкаманды, таму звярцеся з ras-mc-ctl --help.

Рэкамендаваныя канфігурацыі па сцэнарыях

Гэта адпраўныя пункты, і вымераны вамі пік важнейшы за іх.

Сцэнарый Аб’ём Канфігурацыя Заўвага
IDE, браўзер, некалькі кантэйнераў 32 ГБ 2 × 16 ГБ Для пашырэння давядзецца замяніць абодва модулі
Кантэйнеры, Kubernetes у Docker, паралельныя агенты 64 ГБ 2 × 32 ГБ Падніміце ліміты Docker Desktop або WSL
Некалькі VM, вялікія базы, зборка монарэпазіторыя 96–128 ГБ 2 × 48 ГБ або 2 × 64 ГБ Заставайцеся на адным модулі на канал
Лакальныя LLM з выгрузкай на CPU 128 ГБ і больш 2 × 64 ГБ або шырэйшая платформа Хуткасць выгружаных слаёў абмежавана прапускной здольнасцю
Ціхае псаванне даных абыходзіцца дорага 64 ГБ і больш, ECC ECC UDIMM на AM5 або W880, RDIMM на Threadripper PRO або Xeon Праверце лічыльнікі EDAC
Ноўтбук 32 ГБ, 64 ГБ для VM LPDDR5X, SO-DIMM або LPCAMM2 Калі памяць распаяная, бярыце выніковы аб’ём адразу

Больш за 128 ГБ на двухканальным настольным камп’ютары азначае чатыры модулі на паніжанай афіцыйнай частаце, чаго Threadripper або Xeon дазваляюць пазбегнуць.

Практычны чэкліст перад заказам

  1. Запісвайце спажыванне памяці і ціск на працягу тыповага тыдня і дадайце запас.
  2. Купляйце ўвесь аб’ём адным камплектам з двух аднолькавых модуляў.
  3. Праверце табліцу памяці працэсара і спіс сумяшчальнай памяці платы для дакладнага тыпу: UDIMM, CUDIMM, ECC UDIMM або RDIMM.
  4. Параўноўвайце камплекты па рэальнай затрымцы ў нанасекундах і па частаце.
  5. Абнавіце прашыўку, уключайце XMP або EXPO, толькі калі будзеце гэта тэставаць, і дачакайцеся заканчэння трэніроўкі.
  6. Запусціце memtest86+ на наладах па змаўчанні і з профілем, потым нагрузачны тэст у АС.
  7. Для ECC спачатку пацвердзіце падтрымку платформы, потым праверце лічыльнікі EDAC у Linux.
  8. У ноўтбуку з распаянай памяццю бярыце той аб’ём, які спатрэбіцца да канца тэрміну службы.
  9. Праз некалькі месяцаў зноў праверце ціск на памяць, асабліва пасля дадання VM, кластараў або лакальных мадэляў.

Іншыя публікацыі