Назад | Перейти на главную страницу

несколько Qemu vms с проблемами масштабирования с сетевым мостом

Я установил несколько виртуальных машин qemu. Они запускаются подключенными к виртуальным тапам (у каждой ВМ свои)

qemu-system-x86_64 -enable-kvm -hda my_drive.qcow2 -m 1024 -netdev tap,id=t1,ifname=tap0,script=no,downscript=no  -device rtl8139,netdev=t1,id=nic1,mac=<random_uniq_mac>

И все виртуальные ответвители подключены к мосту с именем br1 Есть привязанный DHCP-сервер br1 так что каждая машина может получить ip и разрешить dns

dnsmasq --interface=br1 --bind-dynamic --dhcp-range=subnet.11,subnet.253,5m --log-queries --no-daemon 

Выявленная проблема заключается в том, что, когда работает слишком много виртуальных машин qemu, некоторые теряют свои интернет-соединения или даже не получают IP-адрес от dnsmasq, мы создали небольшую программу для подключения к некоторому веб-сайту и отображают любые ошибки.

hOpenHandle = InternetOpen(TEXT("POC"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
PL_CHECK("InternetOpen");

hOpenUrlHandle = InternetOpenUrl(hOpenHandle, TEXT("http://www.somewebsite.org"), 0, 0, INTERNET_FLAG_RAW_DATA, 0);
PL_CHECK("InternetOpenUrl");

InternetReadFile(hOpenUrlHandle, buffer, 32, &ret);
PL_CHECK("InternetReadFile");

InternetReadFileEx(hOpenUrlHandle, &InetBuff, IRF_ASYNC, 2);
PL_CHECK("InternetReadFileEx");

hConnectHandle = InternetConnect(hOpenHandle, TEXT("www.somewebsite.org"), INTERNET_INVALID_PORT_NUMBER, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
PL_CHECK("InternetConnect");

hResourceHandle = HttpOpenRequest(hConnectHandle, TEXT("GET"), TEXT("/"), NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
PL_CHECK("HttpOpenRequest");

HttpSendRequest(hResourceHandle, NULL, 0, NULL, 0);
PL_CHECK("HttpSendRequest");

HttpSendRequestEx(hResourceHandle, NULL, NULL, 0, 0);
PL_CHECK("HttpSendRequestEx");
return (EXIT_SUCCESS);

С участием tcpdump начал связываться br1 Я вижу нормальный трафик, но когда кажется, что виртуальная машина теряет соединение, в tcpdump больше ничего не отображается, виртуальная машина затем фактически получает нужные пакеты, но по-прежнему ничего не отображается в tcpdump, я пришел к выводу, что он, вероятно, уже прошел, но был приостановлен либо хост-системой, qemu, либо гостевой системой.

Последняя информация, которую я собрал, взята из ifconfig который показывает отброшенные пакеты RX и TX. Кажется, что когда машина qemu теряет связь, ifconfig увеличивает количество отброшенных пакетов RX. Следующий фрагмент показывает количество пакетов, отброшенных в разное время. Справа перед началом, в середине после запуска нескольких виртуальных машин, некоторые из которых потеряли подключение к Интернету, а затем слева после запуска нескольких из них, которые работали правильно.

  br1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 |  br1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500         |  br1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500        
          RX errors 0  dropped 504466  overruns 0  frame 0     |          RX errors 0  dropped 504446  overruns 0  frame 0     |          RX errors 0  dropped 504371  overruns 0  frame 0    

Мы видим, что число увеличилось только тогда, когда мой проблемный случай произошел между серединой и правым.

Не знаю, причина это, следствие или просто совпадение. Могу ли я получить дополнительную информацию об отброшенных пакетах RX? Есть идеи, как определить проблему?