< вернуться назад

DRAM-кэширование в жестких дисках

DRAM-кэширование в жестких дисках
#HDD #scsi #DRAM Cache #EPO-safe cache #RCD #FUA #Linux #ZFS #Windows
7 минут
DRAM-кэширование в жестких дисках

Современные жёсткие диски (HDD) остаются важным компонентом инфраструктуры хранения, несмотря на широкое распространение SSD. Производительность и надёжность HDD во многом зависят от встроенных механизмов кэширования. В этой статье мы рассмотрим:

    1. DRAM-кэш как базовый уровень буферизации.
    2. SCSI-уровень управления кэшем (Mode Page 08h, биты WCE, RCD, FUA и др.).
    3. Поддержка со стороны операционных систем и приложений.
    4. Защиту данных при аварийном отключении питания (EPO-safe cache) 
    5. Технологию ArmorCache от Western Digital

Диаграмма 1: Иерархия кэша HDD

DRAM-кэширование в жестких дисках - 1

1. DRAM-кэш в HDD

На плате контроллера каждого современного HDD установлен буфер памяти DRAM — от десятков до сотен мегабайт. Размер кэша варьируется в зависимости от класса диска:

  • Desktop: 64-128 МБ
  • Enterprise: 128-512 МБ

Основные функции

Буферизация записи. Записи от хоста сначала попадают в DRAM, что позволяет диску отвечать со скоростью ~50 мкс вместо 5-15 мс механической записи. При случайной записи производительность может увеличиться в разы.

Чтение с опережением (read-ahead). Контроллер предугадывает последовательные обращения и заранее подгружает данные. Размер prefetch обычно настраивается от 64 КБ до нескольких МБ.

Оптимизация очередей. Совместно с NCQ (Native Command Queuing) DRAM помогает контроллеру переупорядочить до 32 команд одновременно, минимизируя движения головок через алгоритмы типа SCAN или C-SCAN.

Метаданные. В кэше хранятся служебные структуры: таблицы переназначения секторов, информация о зонах (для SMR), данные калибровки головок.

Ограничения

Волатильность. При отключении питания содержимое DRAM теряется через ~1-5 мс после падения напряжения.

Риск потери данных. Если диск подтвердил запись (отправил GOOD status), но данные остались только в DRAM, то при внезапном отключении питания они будут утеряны. Это особенно критично для СУБД и файловых систем.

2. Управление кэшированием на уровне SCSI

Протокол SCSI (и его SAT-транслированные версии для SATA) позволяет управлять кэшированием через Mode Page 08h (Caching Page). Страница содержит 20 байт параметров.

Ключевые поля и биты

WCE (Write Cache Enable) — бит 2 в байте 2:

  • WCE=1: диск может подтверждать запись после приёма в DRAM (~200-300 IOPS случайной записи)
  • WCE=0: подтверждение только после физической записи (~80-150 IOPS случайной записи)

RCD (Read Cache Disable) — бит 0 в байте 2:

  • RCD=1: запрещает read-ahead и кэширование чтения
  • Редко используется, так как read-кэш безопасен для целостности данных

DRAM-кэширование в жестких дисках - 2 DRAM-кэширование в жестких дисках - 3

Mode page 08h

FUA (Force Unit Access):

  • Устанавливается в CDB команд WRITE(10/16)/READ(10/16)
  • Принуждает выполнить операцию с носителем, игнорируя кэш
  • Позволяет выборочно обходить WCE для критичных записей

DRAM-кэширование в жестких дисках - 3

Write(10)

SYNCHRONIZE CACHE (10/16):

  • Опкод 0x35/0x91
  • Принудительно сбрасывает весь write-кэш на диск
  • Время выполнения: от единиц до десятков миллисекунд

Диаграмма 2: Сравнение путей записи

Стандартная запись (WCE=1):

Хост ──► DRAM ──► [ACK] ──► Пластины (позже)

         50мкс   мгновенно  в фоне

Запись FUA:

Хост ──► DRAM ──► Пластины ──► [ACK]

         50мкс    5-15мс      завершение

Событие EPO в ArmorCache:

Потеря ──► Аварийное ──► iNAND ──► Восстановление

питания    обнаружение   сохр.     (след. загрузка)

           ◄─ 100мс ─►    2мс      → Пластины

Проверка и настройка в Linux

# Просмотр текущих настроек кэша

sg_modes -p 8 /dev/sdX sdparm —page=ca —all /dev/sdX

# Отключение write cache (безопасно, медленно)

sdparm —set=WCE=0 /dev/sdX echo «write cache: off» | tee /sys/block/sdX/queue/write_cache

# Принудительный сброс кэша

sg_sync /dev/sdX sync && echo 3 > /proc/sys/vm/drop_caches

3. Поддержка со стороны ОС и приложений

Linux

Системные флаги:

  • O_SYNC/O_DSYNC: каждая запись выполняется с обязательным FUA (минуя кэш)
  • O_DIRECT: обходит кэш ОС, но не гарантирует FUA к диску
  • fdatasync()/fsync(): переводятся в SYNCHRONIZE CACHE команды

Файловые системы:

  • ext4: использует barriers (FLUSH + FUA) для журналирования
  • XFS: активно применяет FUA для метаданных
  • Btrfs: FUA для COW-операций и чекпойнтов

ZFS

ZFS активно использует FUA для ZIL (ZFS Intent Log) записей, чтобы минимизировать задержки от лишних SYNCHRONIZE CACHE. При высокой нагрузке это может давать 2-3x улучшение latency по сравнению с FLUSH-based подходом.

Windows

FILE_FLAG_WRITE_THROUGH и FILE_FLAG_NO_BUFFERING заставляют драйвер выставлять FUA, если диск его поддерживает. В enterprise сценариях SQL Server и Exchange активно используют эти флаги.

4. Защита при аварийном отключении питания: EPO-safe cache

При включённом кэше данные операций записи могут находиться DRAM. Даже enterprise диски теряют питание DRAM за 1-5 мс, что недостаточно для записи на пластины. Для сохранности данных, в режиме с выключенным кэшем диски используют минимальный объем DRAM для ускорения работы (до 2МБ). Этот мини-кэш может быть сохранен даже в случае аварийного отключения питания (EPO — emergency power-off). Для сохранения используется энергия шпинделя с пластинами, который в случае аварии выполняет роль генератора.

  1. Детектор падения напряжения (~4.0V для 5V rail)
  2. Экстренная парковка головок (1-2 мс)
  3. Аварийный сброс кэша в небольшой NOR flash (~2 МБ)
  4. При следующем включении — восстановление и дозапись

Ограничения традиционного подхода

50-100мс, на которые хватает энергии останавливающегося шпинделя, хватает на сброс в аварийное хранилище только небольшого объема данных. 

5. ArmorCache (Western Digital OptiNAND)

В новых HDD (20+ TB) Western Digital кардинально переосмыслила подход в технологии ArmorCache (часть OptiNAND-архитектуры):

64 ГБ NAND flash интегрируется прямо на плату диска. Это не гибридный подход (как в SSHD), а специализированное хранилище для метаданных и аварийного кэша.

Более быстрая память, по сравнению с традиционным NOR, позволяет сбросить в неволатильную памяти в случае аварии 100+ МБ за время остановки шпинделя. Таким образом, даже в режиме с отключенным кэшем, диск работает с приличным буфером за запись, не подвергая риску данные. Это кардинально увеличивает производительность в WCD режиме, особенно на больших размерах IO.

DRAM-кэширование в жестких дисках - 5

Улучшенная EPO-защита

  • Traditional HDD: 2 МБ emergency storage
  • ArmorCache: 100+ МБ emergency storage
  • Полная защита write cache даже при WCE=1

Режимы работы

Write Cache Enable (WCE=1) + ArmorCache:

  • Высокая производительность (~250+ IOPS random write)
  • Полная защита от потери данных при EPO
  • Фактически устраняет trade-off между производительностью и безопасностью

Write Cache Disable (WCE=0) + ArmorCache:

  • Скорость приближается к WCE=1 за счёт буферизации в iNAND
  • Двойная гарантия целостности данных
  • Подходит для самых критичных применений

Заключение

Для системных инженеров критично понимать взаимодействие всех уровней кэша. Неправильная конфигурация кэша может привести как к потере производительности (излишне консервативные настройки), так и к потере данных (агрессивное кэширование без учёта EPO-сценариев).

Практические рекомендации

  • OLTP базы: WCE=0 или ArmorCache-enabled диски, возможно защищенный батарейкой кэш на запись на аппаратном RAID-контроллере
  • Аналитика/DWH: WCE=1 с регулярными SYNC
  • Бэкапы: WCE=1 приемлемо
  • Критичные системы: всегда тестировать EPO-сценарии

Автор: Олег Ларин

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *
Author
Посетитель сайта

Добавить комментарий

Комментариев пока нет

Другие статьи, которые могут быть полезными

Масштабируемость увеличением количества дисков Масштабируемость системы по объему хранения выполняется за счет подключения дополнительных дисковых полок SAS либо NVMEoF. Максимальное количество дисков, до которого может быть расширена система, указано в...
3433
1
Для настройки протоколов iSCSI выполните следующие действия: Для подключения BAUMSTORAGE используйте пакет open-iscsi. Установка пакета выполняется командой: yum install open-iscsi (для RHEL/CentOS) aptitude install open-iscsi (для Debian/Ubuntu Linux) Просмотрите и отредактируйте IQN...
19570
11
Проведена проверка совместимости СХД BAUM STORAGE AI и ROSA Virtualization. Результаты проверки: Файловые протоколы: протокол NFS - работает. Блочные протоколы.  Подключение через коммутатор: протокол SCSI - работает; протокол FC -...
4528
1