Основы ЭВМ

Теория: RAM и ROM

Скорость и стабильность системы во многом определяет память. Процессор ждёт данные дольше всего, когда они лежат далеко, и почти не ждёт, когда они рядом. Кэш отвечает за наносекунды, RAM — за десятки или сотни наносекунд, NVMe SSD — за десятки микросекунд, сеть в пределах дата-центра — от десятков до сотен микросекунд, а обращение к свопу при нехватке оперативки занимает уже десятки миллисекунд и может доходить до секунд при трешинге.

Своп (swap) — это участок диска (обычно SSD или HDD), который система использует как резерв оперативной памяти (RAM). Когда оперативка заполняется, система временно выгружает в своп неактивные данные, чтобы освободить место для текущих задач. Например, свёрнутое приложение может частично уехать в своп, пока ты работаешь в другом окне.

Где находится своп:

  • В Linux — отдельный раздел диска (/dev/sdX) или файл (/swapfile).
  • В Windows — файл pagefile.sys на системном диске.
  • В macOS — аналогичный файл, которым система управляет автоматически.

Своп — это не настоящая RAM, а страховка на случай перегрузки памяти. Он работает в разы медленнее, потому что диск (даже SSD) отвечает за миллионы тактов дольше, чем микросхемы оперативки.
Если система начинает обращаться к свопу слишком часто, всё резко тормозит — это явление называют трешингом (thrashing). Своп — это виртуальное продолжение оперативной памяти на диске: полезный запас, но плохо, если он постоянно используется.

Проблема у оперативной памяти в том, что сами ячейки работают медленно. Каждая ячейка хранит один бит в крошечном конденсаторе, и чтобы его прочитать, требуется время. Если бы процессор обращался напрямую к этим ячейкам, система тормозила бы на каждом шаге.

Решением проблемы скорости стала синхронная память — SDRAM (Synchronous DRAM). В отличие от старой асинхронной DRAM, она работает в такт с контроллером памяти. Команды и данные передаются по расписанию, задержки становятся предсказуемыми, и часть их можно скрыть за счёт очередей. Это позволило сильно повысить стабильность и пропускную способность.

Следующим шагом стала DDR — Double Data Rate SDRAM. В ней придумали передавать данные дважды за такт — на подъёме и спаде сигнала. Благодаря этому скорость удвоилась без увеличения частоты контроллера.

Когда появился стандарт DDR, производители начали указывать не реальную частоту контроллера, а эффективную скорость передачи данных. Например, если контроллер работает на 1600 МГц, то реально он делает 1,6 миллиарда тактов в секунду. Но при передаче дважды за такт получается 3200 миллионов передач данных3200 MT/s (MegaTransfers per second). Отсюда привычное обозначение DDR4-3200.

У каждого канала DDR есть фиксированная ширина шины — 64 бита = 8 байт. Значит, DDR4-3200 передаёт 3,2 млрд × 8 байт ≈ 25,6 ГБ/с на один канал. У следующего поколения, DDR5-5600, контроллер работает на 2800 МГц, но эффективная скорость удвоена до 5600 MT/s. При той же 64-битной шине это уже ≈44,8 ГБ/с на канал.

Пропускная способность растёт не только с частотой. Если установить два модуля и включить двухканальный режим, ширина шины удваивается. На серверных платах с четырьмя и более каналами это масштабируется почти линейно — при правильной установке модулей общая скорость растёт в разы.

Важно понимать, что значения вроде «DDR4-3200» или «DDR5-5600» показывают эффективную, а не физическую частоту. Контроллер реально работает в два раза медленнее, и именно от этой частоты считаются тайминги — задержки в наносекундах. Поэтому оценивать память только по цифре на наклейке неправильно: важно учитывать и пропускную способность, и задержки.

Оперативная память устроена как таблица с ячейками — строки и столбцы, где лежат биты данных. Чтобы получить значение, контроллер открывает строку, выбирает нужный столбец, читает данные и закрывает строку. На каждом из этих шагов есть своя задержка, и именно они выражаются в таймингах. Тайминги показывают, сколько тактов требуется на открытие, чтение и закрытие ячеек, и напрямую влияют на реальную скорость отклика памяти.

Главный параметр — CAS Latency (CL). Он показывает, сколько тактов нужно подождать с момента команды «открой столбец» до появления первого бита на шине. Другие важные задержки: tRCD — время между выбором строки и выбором столбца, tRP — время на закрытие строки перед открытием новой, tRAS — минимальное время, сколько строка должна оставаться открытой. Когда на модуле написано «16-18-18-36», это значит: CL=16, tRCD=18, tRP=18, tRAS=36. Все значения даны в тактах, а длительность такта зависит от частоты контроллера, поэтому на разных поколениях одинаковые цифры означают разную задержку в наносекундах.

В практическом смысле тайминги определяют скорость получения первого байта и время переключения между строками. При случайной нагрузке задержки становятся критичными, при последовательных обращениях важнее общая пропускная способность.

В маркировках модулей легко ошибиться. Надпись «DDR4-3200» не означает, что контроллер работает на 3200 мегагерцах. Это маркетинговая «эффективная скорость передачи». Реальный такт в два раза ниже — 1600 МГц. Задержки считают именно от него. Поэтому DDR4-3200 CL16 даёт около 10 нс, а DDR5-5600 CL36 — примерно 13 нс. На бумаге «CL36» выглядит хуже «CL16», но на деле разница невелика, а более высокая пропускная способность DDR5 перекрывает проигрыш в латентности.

Эволюция DDR шла через архитектурные изменения. DDR3 работала на скоростях до 1866–2133 MT/s и имела предвыборку ×8. DDR4 сохранила предвыборку ×8, но подняла планку до 3200 MT/s и снизила напряжение до 1,2 В. DDR5 увеличила предвыборку до ×16 и разделила модуль на два независимых 32-битных субканала, что повысило параллелизм и лучше загрузило шину. Её напряжение ещё ниже — 1,1 В, при этом регулятор перенесён прямо на модуль (PMIC), что уменьшает нагрузку на плату, но удорожает память.

Каждое поколение несёт новые ограничения по совместимости. DDR3 и DDR4 физически несовместимы из-за разного ключа в слоте. DDR5 добавила свои требования: новые профили таймингов, обязательный контроллер нового поколения и более строгие параметры сигналов.

Канал памяти — это как отдельная дорога между процессором и оперативкой. Один канал у DDR — это 64 бита шириной (8 байт). Когда в плате стоит только одна планка, работает один канал. Когда ставят вторую в правильный слот — включается второй канал, и процессор получает в два раза более широкую «дорогу». На серверных процессорах таких дорог может быть четыре, восемь и даже двенадцать. Чем больше каналов занято модулями — тем выше суммарная пропускная способность.

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

Ранг (rank) — это «слой» чипов на модуле памяти. Модуль может быть одноранговым (1R) или двухранговым (2R). Двухранговый — это как будто два модуля памяти, упакованные в одну планку: там два независимых набора чипов, которые делят одну и ту же шину. Контроллер видит каждый ранг отдельно и может переключаться между ними. Это позволяет прятать задержки: пока один ранг обслуживает команду, другой готовится. За счёт этого нагрузка на шину распределяется ровнее, и общая производительность выше. Но есть минус: чем больше рангов и плотнее планка, тем тяжелее электрическая топология, и максимальная стабильная частота работы ниже.

Форм-фактор и буферизация отвечают за совместимость. В настольных ПК используются UDIMM без буферов, в ноутбуках — укороченные SO-DIMM, в серверах — RDIMM с регистром адреса/команд и LRDIMM, где буферизуются ещё и линии данных. Буферизация позволяет ставить больше чипов на модуль и набирать огромные объёмы оперативки без проблем с сигналами. Но смешивать разные типы нельзя: UDIMM не заработает в серверной плате, а RDIMM и LRDIMM не могут стоять вместе. Контроллер на старте читает SPD-чип на модуле и договаривается о таймингах и напряжениях. В десктопах можно включить профили XMP/EXPO для ускорения памяти, но серверные платы такие профили почти всегда игнорируют и работают строго по стандарту JEDEC.

Надёжность в серверах обеспечивает ECC (Error-Correcting Code). Типичная схема SECDED (Single Error Correction, Double Error Detection) добавляет восемь проверочных бит к каждому 64-битному слову данных, формируя стандартную 72-битную шину памяти. Это позволяет автоматически исправлять одиночные ошибки и хотя бы обнаруживать двойные. Контроллер памяти ведёт статистику исправлений, а фоновый scrubbing регулярно перечитывает строки, чтобы не допустить накопления ошибок.

Более продвинутые технологии — Chipkill, Lockstep, Sparing — распределяют данные по нескольким чипам и каналам, так что система способна пережить отказ целого кристалла DRAM без потери данных.

В DDR5 появился on-die ECC, но он работает внутри самого микрочипа и защищает только внутренние операции, поэтому не заменяет системный ECC, который контролирует передачу данных между модулем и контроллером памяти.

Совместимость модулей часто становится источником скрытых проблем. Модули разной плотности, с разной организацией чипов (x4 против x8), с разным числом рангов и даже просто с разными таймингами могут формально запуститься вместе, но работать будут не на максимуме. Контроллер памяти в таких случаях снижает частоту, поднимает задержки или, что хуже всего, оставляет редкие ошибки, проявляющиеся только под нагрузкой. Сценарий, когда один быстрый комплект смешивают с более медленным, почти всегда заканчивается тем, что вся система работает на худших параметрах. В серверах требования строже: контроллер ждёт одинакового заполнения каналов и слотов по «цветам», иначе многоканальный режим отключается.

Нагрев — ещё один критичный фактор. В плотных серверах поток воздуха проходит вдоль планок, и даже один забитый фильтр может превратить стабильную систему в источник постоянных исправлений ECC. Спецификации указывают предельные температуры как границу, а не как норму: каждый лишний градус ускоряет старение кристаллов и ухудшает удержание заряда в конденсаторах DRAM.

Представим, у нас есть материнка с двумя каналами и набор разных планок: 4, 8 и 16 ГБ.

Если поставить только одну планку, например 16 ГБ, то вся память будет работать в одноканале. Объём хороший, но скорость ниже вдвое по сравнению с двухканалом. Это часто становится узким местом: процессор простаивает, ожидая данные.

Если поставить две одинаковые планки, например 8+8 или 16+16, то контроллер включит двухканальный режим. Каналы будут работать параллельно, и суммарная пропускная способность удвоится. Это идеальная ситуация, именно так обычно и рекомендуют собирать память.

Если взять разные модули, например 16 и 8, то контроллер разделит память. Первые 8 ГБ из каждой планки пойдут в двухканал, а «лишние» 8 ГБ от большей планки будут работать в одноканале. Такой режим называется flex mode. В итоге получится, что часть памяти быстрая, а часть медленнее, но система сама старается сначала использовать быстрый участок.

Если добавить третью планку, например 16+16+8, то две шестнадцатки образуют полный двухканал на 32 ГБ, а оставшиеся 8 ГБ встанут в одноканал. Общий объём будет 40 ГБ, но часть из него с меньшей скоростью.

Проблема в том, что при смешивании разных модулей контроллер вынужден подстраиваться под худший вариант. Если одна планка медленнее или с другими таймингами, то вся система может уйти на более низкие частоты. В худшем случае это проявляется как редкие ошибки под нагрузкой.

В серверах ситуация другая. Контроллеры в процессорах Xeon и EPYC работают сразу с несколькими каналами памяти — четыре, шесть, восемь и больше. Чтобы многоканальный режим включился, все каналы должны быть заполнены одинаковыми модулями. Требуется одинаковый объём, одинаковый тип (RDIMM или LRDIMM), одинаковая организация чипов и ранговость. Если поставить разные модули, система может не пройти инициализацию, сбросить память в одноканал или снизить частоты и тайминги.

Поэтому в серверных инструкциях всегда указывают точную схему установки: какие слоты занимать и какими модулями. Только при симметричном заполнении контроллер задействует все каналы на полной скорости.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845