дм-кэш
является «медленным» кешем: для продвижения блока требуется много промахов чтения/записи, особенно когда продвижение нового блока означает понижать в должности уже кэшированный.
Фиксированный блочный характер дм-кэш
, в сочетании с отсутствием зарезервированной области только для записи означает, что для запуска продвижения/замены блока требуется много операций записи в одни и те же некэшированные блоки.Однако это также означает, что кэш страниц ядра не «поглощает» эти множественные отсутствующие записи, объединяя их в одну запись с базовыми блочными устройствами.
Другими словами, вы, вероятно, видите комбинированный эффект кэша страниц ядра (который поглощает и объединяет записи) и нежелание дм-кэш
для продвижения первых пропущенных блоков.
Если вы хотите зарезервировать некоторое устройство/пространство только для записи кеша, вы можете нажать на дм-writecache
(и обычный lvmcache
)
Дополнительная информация:
дм-кэш
блокирует попадание/промах доступа к отслеживанию повышения/понижения. Сначала у вас есть пустой кеш со всеми операциями ввода-вывода, направленными на исходное (медленное) устройство. Поэтому, когда вы выполняете, скажем, чтение 4K, оно будет обращаться к базовому медленному устройству с дм-кэш
отслеживание промаха. После нескольких других промахов тот же блок кеша (по умолчанию 32K), затем весь Блок кэша копируется на быстрое устройство. Если вы теперь записываете в кэшированные блоки, ваша запись будет кэширована. Однако, если вы пишете для некэшированный блок, он идет прямо на исходное (медленное) устройство. После некоторых других некэшированных записей, дм-кэш
наконец, выделит весь блок кеша (помните, 32 КБ по умолчанию), скопировав исходные данные на устройство кеша. На этом этапе новые операции чтения/записи могут выполняться из кэша. Понижение выполняется просто: когда необходимо продвигать новый блок, самый старый блок отбрасывается/сбрасывается.
Другими словами, для кэширования записи необходимо выделить соответствующий сегмент кэша, а резервные данные должны быть скопированы на устройство кэширования (выделение при записи). Чтобы ограничить использование полосы пропускания между источником и устройством кэширования, это копирование выполняется только после многих промахов (т.е. нет продвигать блок). Обратите внимание, что многократное чтение одного и того же некэшированного блока нет работать, так как кэш страниц ядра просто предоставит кэшированный блок сам по себе.
дм-writecache
работает по-другому и больше похож на традиционный кэш обратной записи RAID-контроллера. Он кэширует все пишет, игнорируя чтение. Это почти можно считать «кешем страниц L2 только для записи», где грязные страницы «заменяются местами», ожидая, пока медленное устройство догонит их. Чтобы использовать его, вам нужно разделить ваши быстрые устройства между дм-кэш
(который на данный момент должен быть запущен как сквозная запись
кеш) и дм-writecache
, или посвятить им разные устройства. я никогда пытался сделать это через LVM, и я подозреваю, что инструментарий не позволит вам вложить/сложить два разных модуля кэша. Тем не менее, вы можете попробовать это через прямой dmsetup
команды.