Рецепт сервера для Recovery-шторма

13 Янв 2016

Whole-system persistence: рецепт надежного сервера

Со времен появления первых ЭВМ устройства хранения данных принято разделять на оперативную и постоянную память. Оперативная память обладает высоким быстродействием, но ее содержимое разрушается при выключении электропитания. Постоянная память, в частности накопители на магнитных дисках, наоборот, сравнительно медленная, но способна хранить информацию практически неограни­чен­ное время. С появлением твердотельных SSD-накопителей разрыв производи­тель­ности между двумя видами памяти несколько уменьшился, но количество не перешло в качество, и традиционная классификация запоминающих устройств осталась неизменной. Конструктив модулей оперативной памяти определил новые подходы к построению сер­вер­ных платформ, гарантирующих сохранность данных при отключении электропитания. Минимальных 15-30 минут, обеспечиваемых аккумулятором средне­статистического качест­вен­ного источника бесперебойного питания при обслуживании среднестатистической нагрузки вполне достаточно для того, чтобы сохранить жизненно важную информацию на диск и корректно завершить работу приложений, а при рестарте — восстановить контекст и продолжить работу.

Один из недостатков такого подхода — сравнительно высокая длительность процессов сохранения и особенно восстановления состояния, этот эффект получил название Recovery Storm: каждая минута простоя сервера может стоить очень дорого.

Три модели устойчивости

Согласно документу от Microsoft существует три варианта построения устойчивых систем.

  1. Block Based это привычная модель, основанная на сохранении информации в виде блоков, файлов или баз данных. Как правило, при сохранении и восстановлении требуется преобразование форматов представления данных.
  2. Persistent heaps модель допускает сохранение и восстановление содержимого диапазонов памяти под управлением программного обеспечения. Термин Flush-on-commit, используемый в контексте описания данной модели, подчеркивает участие приложения в выделении и подготовке данных, подлежащих сохранению.
  3. Whole-system persistence (WSP) модель отличается от предыдущей тем, что роль пользовательского программного обеспечения минимизирована. В частности, в модулях NVDIMM, копирование DRAM-to-Flash и восстановление Flash-to-DRAM выполняется аппаратно под управлением контроллера, устанавливаемого на модулях либо на дополнительной плате резервного питания. Контроллер фиксирует момент отключения напряжения и запускает необходимые процедуры, что подчеркивается термином Flush-on-fail.

Осознанный выбор: WSP + flush-on-fail

Теоретически, каждая из трех перечисленных моделей может базироваться на любой физической реализации (магнитный или SSD диск, энергонезависимая память). На практике, наиболее эффективным подходом является модель WSP на основе энергонезависимой памяти, работающая с дисциплиной flush-on-fail.

WSP или, в свободном переводе полностью устойчивая система, работая в режиме flush-on-fail, обеспечивает возможность быстрого копирования содержимого оперативной памяти и контекста центрального процессора в энергонезависимую память в момент отключения электропитания. Здесь ключевое слово быстрого и означает оно не только минимизацию потерь рабочего времени сервера, но и возможность значительного сокращения требуемой емкости резервного источника электропитания. Такой подход также позволяет выполнять основные операции по сохранению данных, только в случае аварийной ситуации и минимизировать потери производительности, связанные с подготовкой к возможному сбою питания, выполняемой независимо от того, произойдет сбой или нет.

Важным фактором обеспечения прозрачности механизмов резервного копирования является поддержка этой операции для всей оперативной памяти. Иначе, в алгоритмах работы приложений необходимо обеспечить размещение сохраняемых данных в строго заданном диапазоне адресного пространства, как это имеет место для второй модели (Persistent heaps, Selective model). В силу некоторых особенностей программной индустрии, адекватное сопровождение и адаптация существующих приложений под новые требования возможны далеко не всегда. Это весомый аргумент в пользу WSP.

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

NVDIMM: энергонезависимые модули памяти

Доступные решения на NVDIMM используют конденсаторы большой емкости, называемые ultracapacitors. Хотя их габариты и выделяются на фоне современных электронных компонентов, по сравнению с аккумуляторами UPS, решение весьма компактное и даже экологичное. Для повышения КПД, конденсаторы заряжаются от источника питания +12 вольт, а низкие напряжения, необходимые для функционирования RAM, Flash и управляющего контроллера, формируются импульсными понижающими регуляторами.

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

Реализация модели WSP в системе с NVDIMM: центральное место отводится управляющему контроллеру, в обязанности которого входит мониторинг AC-питания, а также своевременный запуск процедур резервного копирования и восстановления информации
Рис.1
Реализация модели WSP в системе с NVDIMM: центральное место отводится управляющему контроллеру, в обязанности которого входит мониторинг AC-питания, а также своевременный запуск процедур резервного копирования и восстановления информации

WSP как аппаратно-программная инфраструктура

WSP подразумевает интеграцию в серверную платформу следующих четырех компонентов:

  1. Power Monitor представляет собой аппаратный компонент, контролирующий состояние линии AC-питания, запускающий процесс копирования данных (DRAM-to-Flash) при отключении питания. Задачей данного узла является генерация запроса на аппаратное прерывание для центрального процессора.
  2. Save Routine это программный модуль, запускаемый по запросу на прерывание от устройства Power Monitor. Процедура координирует аварийное сохранение информации из оперативной памяти в энергонезависимую. Одной из задач является обеспечение когерентности содержимого оперативной памяти и кэш-памяти (операции Cache Writeback and Invalidation), с целью предотвращения сохранения «устаревшей» копии данных. Для успешного рестарта также необходимо сохранить состояние процессора(процессоров) и остановить все выполняемые потоки инструкцией HLT.
  3. Recovery Routine это программный модуль, обеспечивающий восстановление информации при возобновлении питания.
  4. Собственно NVDIMM Module, содержащий схемы DRAM, Flash, контроллер и резервный источник питания в виде конденсаторов ultracapacitors.

Неочевидные требования к блоку питания

Дополнительные конденсаторы обеспечивают питание во время переноса информации из DRAM в энергонезависимую Flash-память, автономно выполняемого модулями NVDIMM. Длительность этой процедуры может составлять единицы-десятки секунд.

В отличие от NVDIMM, процессор и системная логика резервным питанием не обеспечены. Это означает, что интервал времени, отведенный на запуск и выполнение процедуры Save Routine, отсчитываемый от момента отключения AC-питания, должен быть завершен до разряда фильтрующих конденсаторов блока питания. В примере на рис.2 интервал отсчитывается от момента перехода сигнала PowerGood в состояние низкого логического уровня и до фактического отключения выходных напряжений. Отметим, что при таком подходе платформа должна автономно формировать сигнал системного сброса, используя задержанную версию сигнала PowerGood, формируемую не блоком питания, а дополнительной схемой на основании выходных напряжений блока питания. Иначе, сброс центрального процессора произойдет до выполнения процедуры Save Routine по низкому уровню сигнала PowerGood от блока питания.

В зависимости от нагрузки, мощности и качества блока питания длительность данного интервала составляет 10-300 миллисекунд. Начальный этап процедуры сохранения, требующий участия центрального процессора, должен быть завершен за это время. Типовое время выполнения такой процедуры менее 5 миллисекунд.

В этом примере, длительность интервала, отведенного для процедуры Save Routine, составляет 33 миллисекунды

Рис.2 В этом примере, длительность интервала, отведенного для процедуры Save Routine, составляет 33 миллисекунды

Возможен и альтернативный вариант: интервал начинается с момента отключения AC-питания и заканчивается в момент перехода сигнала PowerGood в состояние низкого логического уровня.

Резюме

Как видим, модель WSP + flush-on-fail наиболее эффективная и как это обычно случается, самая дорогостоящая. Основных причин тому две:

  • Процессами сохранения и восстановления информации управляет аппаратное обеспечение. Кроме того, специальные требования предъявляются к качеству блока питания.
  • Совершенная реализация WSP предполагает наличие дублирующих устройств энергонезависимой памяти (Flash Backup) для всей оперативной памяти платформы.
Теги: