Я пытаюсь проверить, как используется ARC моего пула ZFS, мотивируя это «мне нужно больше оперативной памяти, даже если это дорого».
У меня есть быстрый ECC на 128 ГБ, и я использую твердотельные накопители NVMe для L2ARC, но он все еще делает много небольших операций чтения-вывода, связанных со смесью DDT/spacemaps. Система рассчитана на ДДТ и имеет коэффициент дедупликации примерно 3,5x ~ 4х, поэтому, пожалуйста, не отвечайте «ДДТ - это баад», я знаю, но нужен ДДТ, поэтому я работаю над тем, чтобы минимизировать оставшуюся частоту чтения, гарантируя, по крайней мере, что метаданные ddt/spacemap в основном сохраняются в ARC, когда система нагревается.
Я ожидаю, что будет использоваться оперативная память: DDT составляет около 35-40 ГБ, и я использовал sysctl, чтобы зарезервировать 85 ГБ ARC для метаданных. Я также установил больший размер блока spacemap и дефрагментировал пул (скопировал в новый пул), что, похоже, очень помогает. Но поскольку я не вижу метрик для определения количества загруженных или удаленных метаданных различных типов (ddt/spacemap/other), и нет инструментов для установки размера блока ZFS ddt или предварительной загрузки записей DDT в ARC, я в неведении относительно точного воздействия, или поможет ли больше оперативной памяти, или других систематических способов добиться большего.
Я искал решения. zdb
, arc-stats
т. д. не дают разбивки ситуации ARC метаданных, а представляют собой единовременную сумму для всех метаданных.
Есть ли простой способ получить представление о том, что происходит, чтобы оценить, поможет ли больше ОЗУ, даже если оно не точное, или как лучше понять (даже если неточно) разбивку значений ddt/spacemap/"другие" метаданные MRU/MFU загружаются /кэшируются /выселяются?