У меня есть виртуальная машина и в ней процесс, который потребляет много памяти (~ 200 ГБ). Что-то вроде БД в памяти. Мне нужно запустить его на стандартном ноутбуке, и я не могу его перекомпилировать или увидеть код.
Я добавил 256 ГБ пространства подкачки с pri=32767
в /etc/fstab
и vm.swappiness=100
в /etc/sysctl.conf
но он просто не загружает БД достаточно быстро (застрял на 4 ГБ через 24 часа; похоже, больше не растет).
(РЕДАКТИРОВАТЬ: я клонировал машину, изменил ОЗУ с 256 ГБ на 4 ГБ, добавил жесткий диск, отформатировал его как ext4 и создал файл подкачки размером 256 ГБ (dd -> mkswap -> swapon ...))
Почему перестало расти?
Я подозреваю, что медлительность вызвана тем, что это пространство подкачки, поэтому ОС занята «подкачкой» (загрузка -> недостаточно места -> решает, что поменять местами ...).
Я ищу способ «добавить больше памяти», но заставить ОС обрабатывать его как обычную память. Или, может быть, у меня неправильная конфигурация свопа?
Я знаю, что это ухудшит производительность, но для меня это приемлемо.
Виртуальная машина - CentOS 6.
Смотря на http://www.corsair.com/en-us/blog/2015/september/ddr3_vs_ddr4_generational, пропускная способность памяти составляет около 4 ГБ / с (статья немного устарела, но давайте использовать это число для справки) как для записи, так и для чтения.
Тогда для жестких дисков пропускная способность составляет примерно 100 МБ / с для последовательных операций (http://www.buildcomputers.net/hard-disk-speed.html). Для произвольного доступа пропускная способность намного меньше.
Таким образом, даже если программное обеспечение обращается к памяти последовательно, ОЗУ будет в 40 раз быстрее. Однако доступ к памяти для программного обеспечения, скорее всего, очень случайный, местами появляются небольшие блоки, что значительно повышает общую производительность ОЗУ.
Тогда возникает вопрос, как на самом деле работает своп. Каждая операция, при которой процессор обращается к данным, должна использовать RAM для данных. Если данных нет в памяти, то часть ОЗУ выгружается на жесткий диск, а необходимая часть считывается с жесткого диска в память. Когда в ОЗУ слишком много «горячих» данных, происходит постоянная подкачка, что приводит к описанной вами ситуации.
Процессор не может использовать HDD напрямую в качестве RAM, потому что адресация и интерфейс совершенно разные.