Предыстория
По-умолчанию, если не установлены драйвера из комплекта Xenserver Tools, Xenserver эмулирует сетевую карту Realtek 8139. Это хорошо, она работает во многих дистрибутивах, но она поддерживает только скорость 100 Мбит/с.
При этом, XenServer способен эмулировать сетевую карту Intel 82540 (E1000). Но выбор этого параметра отсутствует где-либо в конфигурации виртуальной машины.
Решение
Для того. чтобы обойти это ограничение можно сочинить небольшую обертку для исполняемого файла эмулятора QEMU - qemu-dm, которая при запуске будет брать строку параметров запуска qemu-dm и подменять в ней rtl8139 на e1000. В результате - эмулируемый сетевой адаптер будет поддерживать скорость 1Гбит/c и даже jubmo frames.
Все нижу написанное справдливо как для версий 6.1 и 62, так и для новейшей 6.5, за исключением того, что виртуалка dom0 в 6.5 имеет архитектуру x64, поэтому qemu-dm лежит в папке /usr/lib64/xen/bin/. Тут я приведу пример для XenServer 6.5.
Начнем.
Логинимся в командную строку xenserver и переименовываем оригинальный /usr/lib64/xen/bin/qemu-dm в /usr/lib64/xen/bin/qemu-dm.orig
mv /usr/lib64/xen/bin/qemu-dm /usr/lib64/xen/bin/qemu-dm.orig
Затем сделаем файл-обёртку с именем /usr/lib64/xen/bin/qemu-dm и таким содержимым:
#!/bin/bash oldstring=$@ newstring=${oldstring//rtl8139/e1000} exec /usr/lib64/xen/bin/qemu-dm.orig $newstring
Затем делаем обёртку исполняемой и запрещаем ее изменять:
chmod 755 /usr/lib64/xen/bin/qemu-dm chattr +i /usr/lib64/xen/bin/qemu-dm
Теперь можно перезапустить виртуальные машины и в них уже будут эмулироваться сетевые интерфейсы e1000.
Я проверял этот трюк на Xenserver 6.5 и виртуалке с Kerio Control 7.2. Ничего дополнительно настраивать не пришлось. Интерфейсы не “съехали”. Просто изменилась модель эмулируемого сетевого адаптера.
С помощью chattr мы запретили замену файла qemu-dm. Таким образом, его не получится заменить, нпример, в результате обновления Xenserver.
Отключить эту защиту и разрешить изменение этого файла можно так:
chattr -i /usr/lib64/xen/bin/qemu-dm
Discussion