Saturday, July 16, 2011

Энергозбережения памяти

Современная DRAM требует чтобы с определенной периодичностью на ней вызывался режим регенерации. Каждый N период времени устанавливалась выборка строки и запись этой обратно для обновления значений - так как из-за токов утечки постепенно значение сбрасывается.
Идея:
  1. Для случая когда несколько планок памяти - не используемые планки памяти сбрасываются на минимальную тактовую частоту и отключаются любые обновления и обращения к этой планке. Когда понадобиться эта планка она заново инициализируется на нормальный режим. Думаю это не возможно, так как все планки контролером памяти обрабатываются совместно и использовать разные настройки памяти не возможно, так всегда используются максимальный из доступных на всех планках режим. Можно конечно для энергосбережения понижать настройки у всех планок - но думаю без сброса памяти - это сделать без потери содержимого памяти сейчас нельзя - или я просто не слушал про такой подход к энергосбережению. Хотя возможно можно успеть сменить настройки памяти до следующего цикла регенерации.
  2. Более реалистичный режим - добавить дополнительный бит на каждую строку в чипе памяти - при установленном этом бите все запросы на получение возвращают нули регенерация игнорируется. По умолчанию после инициализации эти биты установлены. при первой попытке что нибудь записать в эту сроку эти биты сбрасываются. Только нужно какой-то дополнительный интерфейс для установки  этого бита во время работы.
  3. и самый реалистичный метод - сбрасывать все неиспользуемые области памяти - по идее на сброшенный строках  во время регенерации тратится минимум энергии.
Но похоже что-то подобное уже реализовано Samsungом, когда обновляется только реально используемая память.

P.S. links:

  1. Partial Array Self-refresh in Linux - читать здесь
  2. POWER EVALUATION OF A HANDHELD COMPUTER
  3. Analysis of the PASR Standard and its usability in Handheld Operating Systems such as Linux