Я знаю, как работает свопинг, почему он автоматический и почему это вообще хорошо.
Однако есть распространенный сценарий, при котором я хотел бы иметь больше контроля.
Я пишу LOB-веб-приложения с IIS и Sql Server (хотя этот вопрос более общий).
Эти приложения размещаются на выделенных серверах (или виртуальных машинах на них) и используются нечасто. Может случиться так, что они не используются часами. Когда следующий пользователь затем делает запрос, первый запрос базы данных к SqlServer обычно занимает не менее пары секунд. И это даже не считая других компонентов стека, которые тоже должны проснуться.
Я думаю, что это, по крайней мере частично, связано с вводом-выводом, которого действительно следовало избегать, поскольку эта информация была однажды в памяти. (Запросы выполнялись раньше в какой-то момент в прошлом.)
На машине также работает антивирусный сканер (политика компании), и я предполагаю, что после его проверки все остальные процессы полностью заменяются. Кроме антивирусных сканеров, иногда существуют другие процессы обслуживания, которые со временем могут временно потреблять память.
Я бы даже не возражал, чтобы стек приложений усыпил временно, пока он возвращается в память, когда машина снова становится неактивной - но я не думаю, что это так, как это работает.
Это звучит как очень общая проблема, с которой сталкиваются практически все люди, развертывающие приложения с более редким использованием. Это также относится ко всем операционным системам, веб-серверам и базам данных.
Конечно, я знаю, что могу делать обычные фиктивные запросы, которые загружают сервер - и на самом деле я уже делаю это, чтобы сохранить часть стека, не связанную с базой данных.
Что еще здесь можно сделать? Тем более, что можно сделать экономично и практически?
Все зависит от того, как вы настроили виртуальную машину и гостевую ОС. Если вы зарезервируете всю гостевую память, вы можете быть уверены, что она никогда не будет выгружена (что в любом случае не должно происходить при достойной подготовке).
В гостевой системе должно быть достаточно памяти, чтобы ничего не выгружать. В идеале подкачки не должно быть или должно быть очень мало.
Кроме того, вы можете убедиться, что ваша виртуальная машина также получает вычислительную мощность, когда это необходимо, поэтому вам также может потребоваться зарезервировать несколько сотен МГц.
Экономически все это стоит дорогих ресурсов хоста. Вам нужно будет найти разумные минимумы зарезервированных ресурсов, чтобы не резервировать все. Если вы сделаете это, вы получите немного от виртуализации машины.