Различие изменчивой и постоянной переменных влияет на правильность?

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

Например, если я вставлю узел в начало связанного списка с помощью программы с постоянной памятью, мне придется сделать следующее:

  1. Создайте новый узел с новыми данными внутри него
  2. связать "следующий" указатель с текущим заголовком связанного списка
  3. затем обновите указатель заголовка, чтобы он указывал на новый узел.

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

Программисты хотят определить, какие переменные должны пережить сбой, а какие не важны, чтобы им не требовались накладные расходы ("ведение журнала" и "промывка и ограждение"). Это намного сложнее, чем кажется, и для этого есть много исследований и инструментов.

А теперь вопрос. Если предположить, что я правильно понимаю модель постоянного программирования, будет ли когда-либо неправильно обрабатывать все изменчивые переменные (например, счетчик циклов) как постоянные переменные? Я понимаю, что это приведет к значительным накладным расходам и определяется как "ошибка производительности". Я был бы признателен, если есть случаи, когда сохранение изменчивой переменной может повлиять на правильность программы восстановления.

Спасибо.

1 ответ

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

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

Безопасность может быть проблемой, если оборудование с постоянной памятью не имеет встроенной поддержки шифрования. "Неустойчивое" состояние может быть доступно злоумышленнику или приложению.

Другие вопросы по тегам