
Мне кажется, что кэширование страниц, которые выгружены, довольно контрпродуктивно. Если вы выгружаете страницы, в чем преимущество их предварительного кэширования в памяти, а затем перемещения их в нужное место? Даже если страницы выгружаются заранее, не разумнее ли "просто" их выгрузить? Разве кэширование выгрузки не является пустой тратой ресурсов?
решение1
После некоторых дополнительных исследований я обнаружил, что термин SwapCached вводит в /proc/meminfo
заблуждение. На самом деле, он относится к числу байтов, которые одновременно находятся в памяти и свопе, так что если эти страницы не грязные, их не нужно выгружать.
решение2
Никогда об этом не слышал, и для меня это тоже не имеет особого смысла. Я все еще думаю, что старое доброе правило, чтобы убедиться, что это вообще не свопится (кроме, конечно, резервирования), является лучшим. Теперь, теоретически, кэширование вещей в прямой доступной памяти, которая занимает некоторое время для загрузки с чего-то столь медленного, как диск, имеет очевидное преимущество. Но если вы можете кэшировать страницы, которые должны быть свопированы, зачем вообще своп?
решение3
Цель дублирования страниц между свопом и оперативной памятью состоит в том, чтобы избежать ожидания диска в следующих случаях:
Что-то нужно прочитать из них
Их нужно выселить, чтобы освободить место для чего-то другого.
Если бы они находились только в разделе подкачки, случай 1 означал бы ожидание их загрузки с диска; если бы они находились только в оперативной памяти, случай 2 означал бы ожидание их отправки на диск.
(Конечно, случай 2 на самом деле немного сложнее, поскольку очевидно, что вытеснять такие страницы дешевле, поэтому ядро, вероятно, вытесняет их в первую очередь, но суть должна быть ясна.)