предварительная загрузка библиотеки в бродячую виртуальную машину - PullRequest
1 голос
/ 03 мая 2019

Я регулярно использую Vagrant с поставщиком libvirt для установки и запуска виртуальных машин qemu + kvm в Linux.Недавно я попытался использовать библиотеку libhugetlbfs для поддержки физической памяти гостя огромными страницами (см. Мое замечание в конце *).

Обычно библиотека должна быть предварительно загружена сПеременная среды LD_PRELOAD:

>> LD_PRELOAD=libhugetlbfs.so ... <my app>

Следуя этой логике, я попробовал:

>> LD_PRELOAD=libhugetlbfs.so ... vagrant up

, но заметил, что она не работает должным образом.Переменная среды не передается на базовый гостевой компьютер, который я идентифицирую как «qemu-system-x86» в списке процессов (указан ps)

Я обнаружил следующее:

  • Кажется, что "vagrant up" не является родительским процессом гостевой машины.Родительский процесс "qemu-system-x86" - это init, так что, я думаю, какой-нибудь демон его создал?Я просто не понимаю, как работает vagrant ...

  • Пользователь, который создает процесс "qemu-system-x86" - это libvirt-qemu.По какой-то причине я не смог "sudo su" этому пользователю ...

Есть ли какой-нибудь метод, который я могу определить переменную LD_PRELOAD для гостевой машины извне?Или, может быть, какой-то хак для внедрения переменной среды в уже запущенный процесс?

* Я знаю, что в виртуализации на основе libvirt используются двумерные таблицы страниц.Я заинтересован в изменении распределения памяти на уровне хоста, поэтому мне нужно применить libhugetlbfs из "снаружи" .Предварительная загрузка libhugetlbfs для приложения, работающего в гостевой системе, не представляет никаких проблем.

...