2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
CBSD и Qemu User mode
Имея установленный в мастер-ноде QEMU, собранный с дополнительными таргетами user mode (\*-user) ( https://wiki.freebsd.org/QemuUserModeHowTo ), вы можете создавать клетки с альтернативной архитектурой, отличной от архитектуры мастер хоста. При этом, эмуляция будет достигаться через эмулятор Qemu, работающий в прозрачном режиме — если бинарный файл имеет отличную от родной архитектуру, он может выполнен в этой системе без необходимости устанавливать целостную виртуальную машину Qemu.
Для того, чтобы CBSD могла создавать такие клетки, выполняемый бинарный файл Qemu, обеспечивающий ту или иную архитектуру в usermode, должнен быть собран статически, поскольку этот файл будет помещен внутри клетки.
Зачем это вообще может быть полезно?
В первую очередь, это достаточно простой способ проверить работоспособность бинарной FreeBSD программы определенной архитектуры в родном окружении, при этом вам не потребуется искать bootable-дистрибутив и устанавливать FreeBSD нужной архитектуры на отдельный носитель с нуля.
Во-вторых, многие владельцы ARM-based устройств страдают от отсутствия репозитория pkg для ARM архитектур, а собирать пакеты непосредственно на крайне ограниченных по мощностям ресурсах самих Embedded ARM-based устройств — мягко скажем, довольно грустная операция.
ARM-based jail, запущенный на мощной x86-64 системе позволит вам собрать необходимые пакеты, которые вы сможете уже проинсталлировать на Embedded устройстве через стандартный pkg в бинарном виде.
По результатам тестирования, потеря скорости в работе под QEMU эмулятором колеблется от 3% до 25% что, например, в сравнении с мощностями таких устройств как RPi-B, современный x86-десктоп в любом случае значительно быстрее.
В данный момент протестирована работа клеток на armv6 архитектуре и mips64
Замечание: ввиду того, что программы будут выполняться под qemu, на них распространяется стандартное ограничение оперативной памяти в 128MB, что может приводить к падениям некоторых пузатых процессов. Я не нашел на скорую руку как через user mode утилиты (qemu-arm, qemu-mips64) указать -m XX, поэтому вы можете просто откорректировать нужный вам объем в файле vl.c QEMU, указав например
#define DEFAULT_RAM_SIZE 512
вместо 128.