Можно ли заставить виртуальную машину использовать пространство подкачки (swapfile) в качестве памяти при чрезмерной загрузке?

Когда я читаю что-то о чрезмерной загрузке виртуальных машин ( https://docs.fedoraproject.org/en-US/Fedora/18/html/Virtualization_Administration_Guide/sect-Virtualization-Tips_and_tricks-Overcommitting_with_KVM.html), у меня возникают некоторые вопросы.

Сначала система моего хост-компьютера выглядит следующим образом: 1. Память (DRAM): 16 ГБ 2. Пространство подкачки (раздел подкачки): 32 ГБ 3.SSD: 512 ГБ

Я установил KVM и сделал свою виртуальную машину (ВМ). У меня установлена ​​виртуальная машина 1. Память: 4 ГБ 2. Пространство подкачки (раздел подкачки): 8 ГБ 3. Виртуальный диск Емкость: 20 ГБ

Если я ограничу ресурс памяти виртуальной машины от 4 ГБ до 1 ГБ с помощью интерфейса cgroup, это приведет к перегрузке, если объем памяти моей виртуальной машины будет больше 1 ГБ.

В этом URL ( https://unix.stackexchange.com/questions/137509/kvm-and-swap-space) в ситуации переполнения памяти виртуальная машина будет использовать пространство подкачки (раздел подкачки) в качестве памяти.

Поскольку я ограничил ресурс памяти своей виртуальной машины до 1 ГБ, я надеялся, что моя виртуальная машина будет использовать пространство подкачки в качестве памяти, и я надеялся, что смогу увидеть некоторую ситуацию с выгрузкой в ​​моей операционной системе, когда моя виртуальная машина использует более 1 ГБ памяти. \ Но я не смог.

контрольный эксперимент и vmstat для проверки выполнения операции подкачки

произошел некоторый обмен (так), но очень маленький по сравнению с Block-I/O(bo). Блокировка ввода / вывода означает, что (ВМ) отправляет ввод / вывод в файл устройства, а не в пространство подкачки (файл подкачки). Кажется, он не использует пространство подкачки в качестве памяти. Кажется, это просто грязные кеши с обратной записью, потому что у них всего 1 ГБ памяти. Есть ли какая-то часть, которую я пропускаю?

1 ответ

Решение

Я думаю, что часть, которую вы упускаете, это то, что означает "чрезмерная приверженность".

Чрезмерное обязательство - это не уловка, чтобы использовать на самом деле больше ресурсов, чем те, которые вы ограничивали в системе. Это техника действовать, как будто есть больше ресурсов.

Основная концепция заключается в том, что большинство программ будет выделять больше памяти, чем они фактически используют. Например, они могут выделить 32 КБ ОЗУ для чтения в файле размером всего 57 байт. Они читают это, и фактически используют одну страницу памяти для этого. Но было еще выделено 32К. Обратите внимание, что этот пример относится к 90-м годам, и сегодня объем распределения больше, а размер файла больше, но дело в том, что дополнительная память по-прежнему остается обязательством, которое никогда не будет собрано.

Если я не ошибаюсь, это даже происходит в некоторых программах, которые сознательно не делают этого, потому что они загружают библиотеки, которые делают это, и даже загрузка этих библиотек делает это - компоновщик выделяет достаточно памяти для библиотеки, но только подпрограммы которые фактически вызваны, фактически загружены. Это, вероятно, будет общая память, так что эффект минимизирован, но он все еще там.

Количество чрезмерных обязательств зависит от того, какие программы были вызваны и как они используются. Если программа выполняется очень тщательно, она, вероятно, будет использовать больше своих библиотек. Программы, которые вызывают calloc вместо malloc, не проявляют чрезмерной передачи, поскольку calloc записывает каждый байт выделенного пространства, требуя, чтобы ОС выполнила запрошенное обязательство, даже если реальная часть этой памяти будет использоваться будет намного меньше. Некоторые программы гораздо более осторожны, чтобы распределять только тот объем памяти, который им необходим, в то время как другие зависят от ОС, чтобы поддерживать чрезмерную загрузку, чтобы позволить им быть прагматичными в своих структурах данных.

Если приложениям на вашем сервере, использование которых ограничено 1 ГБ, действительно удастся попытаться получить доступ к полному ГБ страниц, будет использоваться подкачка 8 ГБ, настроенная вами для использования. Но это не использует это для чрезмерной приверженности. Технически он не использует чрезмерную загрузку, пока не выделит 9 ГБ виртуальной машины, которые у него есть.

Как уже было сказано, это Linux, и я помню, что пытался подтолкнуть Linux к максимальному выделению памяти без включения чрезмерной нагрузки, так как он имеет тенденцию давать сбой немного раньше - он сохранял некоторый резерв для различных вещей, таких как крошечный объем файлового кэша и прочее., Этот опыт был более десяти лет назад, но я не вижу особой причины для этого изменения; важно иметь память, чтобы иметь возможность выполнять файловый ввод-вывод.

Другие вопросы по тегам