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

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

DRAM-кэширование в жестких дисках
#Windows #Western Digital OptiNAND #DRAM-кэш #EPO-safe cache #ArmorCache #Mode Page 08h #биты WCE #RCD #FUA #Linux #HDD #ZFS #scsi
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
Посетитель сайта

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

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

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

Что такое вычислительные накопители? Вычислительные накопители — это новая технологическая парадигма, которая интегрирует вычислительные возможности непосредственно в устройства хранения данных для обработки данных там, где они находятся, снижая перемещение данных...
286
13
4469
81
Введение – эволюция архитектуры четырех поколений SmartNIC Выделяют четыре поколения эволюциии архитектуры NIC до SmartNIC [5]. SmartNIC первого поколения Сетевые карты SmartNIC первого поколения избавили от рудиментарных функций без сохранения...
4469
81
Для идеального случая запросы распределяются между дисками равномерно. Рассмотрим сначала операции случайного чтения. В массиве RAID 0 чтение будет выполняться параллельно с каждого диска массива, поэтому производительность массива будет равна...
2820
2