stringtranslate.com

Постоянная память

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

Постоянная память , которую часто путают с энергонезависимой памятью с произвольным доступом (NVRAM), вместо этого более тесно связана с концепцией постоянства , поскольку в ней делается акцент на состоянии программы, которое существует за пределами зоны сбоя процесса, который ее создал. (Процесс – это выполняемая программа. Зона сбоя процесса – это то подмножество состояния программы, которое может быть повреждено , если процесс продолжает выполняться после возникновения ошибки, например, из-за ненадежного компонента, используемого в компьютере, выполняющем программу. .)

Эффективный доступ, подобный памяти, является определяющей характеристикой постоянной памяти. [2] Это может быть обеспечено с помощью инструкций памяти микропроцессора , таких как загрузка и сохранение. Его также можно предоставить с помощью API, которые реализуют действия удаленного прямого доступа к памяти (RDMA), такие как чтение RDMA и запись RDMA. Другие методы с малой задержкой , которые обеспечивают побайтовый ( нужны пояснения ) доступ к данным, также подходят для этой цели.

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

Проблема чтения непостоянной записи

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

Чтобы проиллюстрировать проблему: для односвязного списка без блокировки узел может быть вставлен производителем thread Aпосле headузла, nextуказатель головного узла автоматически переключается (CAS), чтобы указывать на новый node A, однако этот CAS не является упорствовал. Затем производитель вставляет еще один узел thread Bпосле node A, поскольку CAS node Aуже виден всем параллельным потокам. CAS атомарно переключает nextуказатель на node Aточку node B, и этот CAS сохраняется. Если в этот момент произойдет сбой питания, приложение, использующее связанный список, останется в несогласованном состоянии с обоими node Aи node Bпотеряется, поскольку nextуказатель от headузла на node Aне сохранился. Поскольку node Bбыло опубликовано, но к нему невозможно получить доступ после перезагрузки, а также могли сохраниться другие данные, доступ к которым осуществляется через или зависит от него node B, все последующие доступы к таким данным будут невозможны, что приведет к потере данных. [3]

Проблема чтения-непостоянной записи не ограничивается связанными списками без блокировок, ее можно обнаружить в любых структурах данных без блокировок, где может существовать потенциальный разрыв между параллельной видимостью и постоянной видимостью. Например, аналогичная проблема может возникнуть с постоянными циклическими буферами . [4]

Смотрите также

Рекомендации

  1. ^ Сатиш М. Татте. 1986. Постоянная память: архитектура хранения для объектно-ориентированных систем баз данных. В материалах международного семинара 1986 года по объектно-ориентированным системам баз данных (OODS '86). Издательство IEEE Computer Society, Лос-Аламитос, Калифорния, США, 148–159.
  2. ^ П. Мехра и С. Файнберг, «Быстрая и гибкая устойчивость: волшебное зелье для отказоустойчивости, масштабируемости и производительности в онлайн-хранилищах данных», 18-й Международный симпозиум по параллельной и распределенной обработке, 2004. Труды., Санта-Фе, Нью-Мексико, США, 2004, стр. 206-. дои: 10.1109/IPDPS.2004.1303232
  3. ^ Ван, Уильям; Дистельхорст, Стефан (17 июня 2019 г.). «Постоянные атомы для реализации устойчивых структур данных без блокировки для энергонезависимой памяти (краткое объявление)». 31-й симпозиум ACM по параллелизму в алгоритмах и архитектурах . Ассоциация вычислительной техники. стр. 309–311. дои : 10.1145/3323165.3323166. ISBN 9781450361842. S2CID  195064876 – через цифровую библиотеку ACM.
  4. Вольчко, Марио (26 апреля 2019 г.). «Энергонезависимая память и Java: Часть 2». Середина .

Внешние ссылки