Рейтинг:2

Полная производительность кэша обратной записи lvmcache/dm-cache

флаг id

У меня есть кеш обратной записи SSD перед жестким диском, настроенный через lvmcache (то есть dm-cache). Когда кэш LV не заполнен (Данные% столбец в lvs < 100,00%), записи идут в кэш-устройство (отслеживается через дстат). Однако, когда кэш LV заполнен (Данные% = 100,00%), записи идут непосредственно на жесткий диск, по сути, превращаясь в кеш со сквозной записью. Блоки не вытесняются из кеша SSD даже по прошествии некоторого времени, и производительность падает.Когда я пытаюсь прочитать недавно прочитанные данные из кэшированного LV, чтение происходит с SSD, поэтому я предполагаю, что весь SSD теперь стал кэшем для чтения. Это ожидаемое поведение для кэша записи dm-cache даже в режиме обратной записи? Нет зарезервированного места для записи? Это кажется довольно плохим дизайном, поскольку, по сути, пользователи могут записывать данные только в один кеш-LV, прежде чем кеш станет кешем со сквозной записью.

Насколько я понимаю, dm-cache использует алгоритм выселения mq, но это относится только к кэшированию чтения и, следовательно, не имеет отношения к проблеме кэширования записи, которую я наблюдаю.

Есть ли способ зарезервировать место для кеша записи или использовать одновременно dm-writecache (который, как я понимаю, не будет кэшировать чтение) и dm-cache?

Рейтинг:1
флаг ca

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

Фиксированный блочный характер дм-кэш, в сочетании с отсутствием зарезервированной области только для записи означает, что для запуска продвижения/замены блока требуется много операций записи в одни и те же некэшированные блоки.Однако это также означает, что кэш страниц ядра не «поглощает» эти множественные отсутствующие записи, объединяя их в одну запись с базовыми блочными устройствами.

Другими словами, вы, вероятно, видите комбинированный эффект кэша страниц ядра (который поглощает и объединяет записи) и нежелание дм-кэш для продвижения первых пропущенных блоков.

Если вы хотите зарезервировать некоторое устройство/пространство только для записи кеша, вы можете нажать на дм-writecache (и обычный lvmcache)

Дополнительная информация:

дм-кэш блокирует попадание/промах доступа к отслеживанию повышения/понижения. Сначала у вас есть пустой кеш со всеми операциями ввода-вывода, направленными на исходное (медленное) устройство. Поэтому, когда вы выполняете, скажем, чтение 4K, оно будет обращаться к базовому медленному устройству с дм-кэш отслеживание промаха. После нескольких других промахов тот же блок кеша (по умолчанию 32K), затем весь Блок кэша копируется на быстрое устройство. Если вы теперь записываете в кэшированные блоки, ваша запись будет кэширована. Однако, если вы пишете для некэшированный блок, он идет прямо на исходное (медленное) устройство. После некоторых других некэшированных записей, дм-кэш наконец, выделит весь блок кеша (помните, 32 КБ по умолчанию), скопировав исходные данные на устройство кеша. На этом этапе новые операции чтения/записи могут выполняться из кэша. Понижение выполняется просто: когда необходимо продвигать новый блок, самый старый блок отбрасывается/сбрасывается.

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

дм-writecache работает по-другому и больше похож на традиционный кэш обратной записи RAID-контроллера. Он кэширует все пишет, игнорируя чтение. Это почти можно считать «кешем страниц L2 только для записи», где грязные страницы «заменяются местами», ожидая, пока медленное устройство догонит их. Чтобы использовать его, вам нужно разделить ваши быстрые устройства между дм-кэш (который на данный момент должен быть запущен как сквозная запись кеш) и дм-writecache, или посвятить им разные устройства. я никогда пытался сделать это через LVM, и я подозреваю, что инструментарий не позволит вам вложить/сложить два разных модуля кэша. Тем не менее, вы можете попробовать это через прямой dmsetup команды.

Albert T avatar
флаг id
«означает, что для запуска продвижения/замены блока требуется много операций записи в одни и те же некэшированные блоки». Я не понимаю концепцию кэширования блока записи и его повышения/понижения. Записи по существу буферизуются в кэшах записи (таких как dm-writecache) и понижают уровень других блоков в агрессивных кэшах чтения, если запись считается доступом. Не могли бы вы рассказать об этом подробнее? «Если вы хотите зарезервировать какое-то устройство/пространство только для записи кеша, вы можете подключиться к dm-writecache (и обычному lvmcache)» Как бы я это сделал? Это повлечет за собой наличие двух кэшей на одном LV, верно?
shodanshok avatar
флаг ca
@AlbertT Я отредактировал свой ответ с необходимой информацией

Ответить или комментировать

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