Достаточно давно вместо sandbox и т.п. использую для сборки и отладки всяких штуковин для ARM под x86 lxc контейнер с армовой rootfs и qemu собранный с --target-list=arm-linux-user (user space emulator) чтобы запускать на x86 ядре arm'овые бинарники через binfmt_misc. Пока endianness хоста и эмулируемой системы совпадает, а сисколлы остаются неизменными между версиями ядра хоста и ядра под которое рассчитана армовая rootfs, всё работает как часики.
В контейнере запускается шелл, типа
lxc-execute -n sb -f /var/lib/lxc/sb/config — /bin/su - stanson — --login
Ну и дальше делай что угодно, как будто ты залогинился в армовую систему. Всё достаточно шустро и удобно, но есть нюанс.
Изнутри выглядит так:
stanson@sb:~$ ps -eo pid,vsz,args PID VSZ COMMAND 1 1008 /init.lxc.static — /bin/su - stanson — --login 4 73648 /usr/bin/qemu-arm /bin/bash --login 130 60412 /bin/ps -eo pid,vsz,args
Фига себе размерчик у bash и ps, не правда ли? Дело в том, что на каждый запущенный армобинарник запускается qemu. Если, например, запустить man bash в контейнере и посмотреть «снаружи», то будет так:
stanson@amilo:~$ ps -eo lxc,pid,vsz,args --sort lxc | grep '^sb' sb 21030 1008 /init.lxc.static — /bin/su - stanson — --login sb 21033 73648 /usr/bin/qemu-arm /bin/bash --login sb 21073 61436 /usr/bin/qemu-arm /usr/bin/man bash sb 21090 60284 /usr/bin/qemu-arm /usr/bin/pager -s
Вот откуда по 60-70 мегов на процесс. Сам qemu-arm невелик,
stanson@amilo:~$ ls -la `which qemu-arm` -rwxr-xr-x 1 root root 3205596 Mar 21 19:29 /usr/bin/qemu-arm*но памяти жрёт прилично, насколько я понял - из-за pre-allocation
Собственно вопросы
1. - есть ли более оптимальный способ делать то же самое?
2. - можно ли заставить qemu не заниматься pre-allocation?
Пока сам не копался в qemu, может кто уже решил этот вопрос?