Проблема с тем, что вы пытаетесь сделать, заключается в том, что кеш VFS полностью контролируется внутри ядра, и ваше проблемное пространство очень нишевое - в общем, размещение кеша в своп полностью противоречит цели кеширования (хотя я согласен, что ваш вариант использования допустим). Я просто хочу сказать, что очень маловероятно, что то, что вы хотите сделать, в настоящее время поддерживается в ядре (и я, конечно, никогда не слышал никаких шумов о том, что вы хотите сделать, возможно).
Если бы вы использовали Используя технологию «псевдо» виртуализации, такую как qemu, вы сможете «перегрузить» память, используемую виртуальными машинами. Таким образом, память, используемая виртуальной машиной, будет более видимой для хоста как «обычная» память процесса, и тогда вы сможете использовать хост ' s место подкачки, чтобы вывести его, когда он не нужен. Это создает риск замены машины до смерти, если процессам на виртуальных машинах действительно нужна вся эта память или если давление в кеш-памяти на виртуальных машинах было сильным, но это могло работать с некоторой осторожной настройкой.
Любые попытки управлять такого рода вещь в пользовательском пространстве вряд ли сработает, потому что кэширование VFS - это все на уровне ядра, и (опять же) варианты использования для управления им в пользовательском пространстве очень нишевые. Если бы это были данные приложения, которые вы пытались кэшировать, вы могли бы предоставить кеш для данных в пользовательском пространстве (если вам это нужно в файловой системе, вы можете использовать FUSE, но хранилище данных для конкретного приложения будет работать лучше), но это много работы (кэширование сделать не так просто) и не будет работать, если вам нужно кэшировать корневую файловую систему.
Если вы все же решите, что это того стоит, я думаю, вы потратите много времени на написание и отладку собственного кода уровня ядра для поддержки этого варианта использования. Вместо того, чтобы обобщать проблему «хранить кеш в свопинге» (что сразу же заставит многих людей защитить себя), может быть проще некий механизм «кэширования устройства SAN», который использует пространство подкачки, а не VFS в -кэш памяти. Обратите внимание, я говорю «проще», а не «легко» - это все еще требует много работы.
Я был бы готов потратить много усилий (и денег) на улучшение производительности моего NAS / SAN до того, как я занялся модификацией ядра - потому что, честно говоря, это даст больше прибыли, чем кэширование. При кешировании ваш начальный доступ всегда будет таким же медленным, как и базовый механизм доступа, и если вы сможете сделать это быстрее, это, вероятно, улучшит воспринимаемую производительность больше, чем медленный начальный доступ с быстрым (нечастым) повторным доступом . Также подумайте о стоимости предоставления всем вашим виртуальным машинам целого объема оперативной памяти - вы можете купить много оперативной памяти за месяц или два взлома ядра.