Счетчики ARC ZFS постоянны?

303
lungj

Предположим, у меня есть некоторые данные, к которым часто обращаются, и некоторые реже доступные данные. Я понимаю, что ARC в конечном итоге научится прекратить высылать часто используемые данные, чтобы освободить место для других данных только потому, что к другим данным недавно обращались. Предположим, что я уже некоторое время использую систему ZFS, и она воспользовалась этим шаблоном доступа.

Если я перезагружаю свой ящик и данные, к которым часто обращаются, просто читаются и, таким образом, в ARC, будут ли новые чтения других данных вызывать их выселение? Или ZFS помнит, что эти данные часто используются?

Если это зависит от реализации, то этот вопрос конкретно относится к Solaris.

2

1 ответ на вопрос

1
Dan

У ARC нет постоянных счетчиков, поэтому ему придется снова увидеть ваш шаблон доступа, чтобы определить, что что-то часто используется. Тем не менее, он ничего не изгонит, пока не заполнится / не возникнет давление памяти из-за чего-то еще в системе, поэтому при первой загрузке все прочитанное или записанное попадет в кэш. Если ваши часто используемые данные читаются дважды, то они должны попасть в список «MFU».

Вы можете прочитать больше об алгоритме ARC здесь . Короче говоря, он фактически состоит из двух списков LRU, один для материала, к которому был получен доступ один раз («список MRU»), и один для материала, к которому обращались дважды или более («список MFU» - да, имя неверное, оно действительно использует LRU для выселения, потому что LRU быстрее и проще в реализации, чем MFU). Существуют также «списки призраков», которые отслеживают недавно извлеченные ключи (но не данные) из каждого списка, которые помогают определить, насколько большими должны быть два кэша относительно друг друга.

L2ARC является постоянным (обычно хранится на SSD), но не использует алгоритм ARC (еще одно неоптимальное имя). Я считаю, что это просто циклически перебирает данные в кеше. Кроме того, я полагаю, что вы не сможете повторно использовать его после перезагрузки, если не используете форк OpenZFS от Nexenta (я не думаю, что они загрузили его до разработки).

За исключением функции Nexenta «Persistent L2ARC», ничего в этом ответе не зависит от платформы.