Виртуалка может занимать память разными способами:
- Под работающие приложения - htop это показывает зеленым и включает в свою цифру справа. Очевидно, qemu должен хранить содержимое этой памяти, и virt-manager считает ее потребленной.
- Под дисковый кеш - htop это показывает желтым и НЕ включает в свою цифру справа. Но поскольку эту память терять нельзя (виртуалка к ней может обратиться в любой момент), qemu тоже должен хранить содержимое этой памяти, и virt-manager считает ее потребленной.
- Под всякие мелочи типа буферов.
- Под старье. Т.е. раньше эта память использовалась (приложением или под дисковый кеш), сейчас стала не нужна, и ядро считает ее свободной. htop показывает это черным. Но ядро эту память не чистит (так как это дорого по времени и на реальном железе не нужно), там остаются не нули, и qemu не знает и знать пока не может, что это на самом деле мусор. И честно его хранит и потребляет память хоста под хранение этого мусора. Мало ли, вдруг пользователь на самом деле в виртуалке тестирует работоспособность какого-нибудь эксплойта, который обращается (намеренно) к освобожденной памяти - так что даже мусор хранить, к сожалению, нужно.
Чтобы такого не было, придумали «virtio-balloon free page hinting», и это работает, начиная с linux-5.7.x и qemu-5.1.x. Но по умолчанию все равно выключено, и в virt-manager’е это не включить никак, только при запуске qemu руками.