У меня есть гостевая виртуальная машина ubuntu 16.04 LTS, работающая внутри HyperV на Win10 pro v1803 (сборка 17134.345). У гостя есть подключение к Интернету через виртуальный адаптер Ethernet NAT на хосте, но TCP-подключения к Интернету очень медленные (<5 КБ / с). Сам хост подключен к Wi-Fi и обычно обеспечивает соединения со скоростью МБ / с. Как я могу улучшить производительность гостевого трафика?
ВМ находится в двух разных сетях IPV4. Я не настраивал IPv6, и это единственная работающая ВМ.
гостевой eth0 находится на 192.168. 20.200 / 24
. В HyperV этот интерфейс подключен к VSwitch с хостом для трафика host-vm. Максимальная пропускная способность этого канала высока и соответствует ожиданиям. Задержка с хостом составляет <1 мс.
гость eth1 находится на 192.168.30.200/24
. В HyperV его интерфейс подключен к VSwitch NAT и обеспечивает подключение виртуальной машины к Интернету. Пропускная способность этого канала с точки зрения виртуальной машины очень низкая, то есть постоянная скорость загрузки ~ 5 КБайт / с. С другой стороны, задержка аналогичен хосту, в диапазоне 8-9 мс для интернет-запросов.
VNat на хосте был создан с помощью PowerShell с использованием шагов, описанных в этой статье Microsoft
. Я отключил функции разгрузки на гостевой системе. Чтобы увидеть, увеличило ли это максимальную пропускную способность, выполните следующие команды:
for i in rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash; do
sudo ethtool --offload eth1 "$i" off
done
Но это не улучшило скорость гостевого интернета. Никакого эффекта не заметил. Я попытался перезагрузить хост и виртуальные машины, отключив и повторно включив интерфейс NAT, но это тоже ничего заметно не улучшило.
Прочие сведения:
В PowerShell Get-NetAdapter сообщает следующие основные информация для vSwitch:
vEthernet (vNAT) Hyper-V Virtual Ethernet Adapter # 6 19 Up 00-15-5D-02-E8-0F 10 Гбит / с Используя шаги, описанные в этой статье Microsoft
, я отключил функции разгрузки на гостевой системе, чтобы посмотреть, увеличило ли это максимальную пропускную способность, с помощью следующих команд:
for i in rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash; do
sudo ethtool --offload eth1 "$i" off
done
Но это не улучшило скорость гостевого интернета. Никакого эффекта не заметил. Я попытался перезагрузить хост и виртуальные машины, отключив и снова включив интерфейс NAT, но это тоже ничего заметно не улучшило.
Прочие сведения:
В PowerShell Get-NetAdapter сообщает следующие основные сведения. информация для vSwitch:
vEthernet (vNAT) Hyper-V Virtual Ethernet Adapter # 6 19 Up 00-15-5D-02-E8-0F 10 Гбит / с Используя шаги, описанные в этой статье Microsoft
, я отключил функции разгрузки на гостевой системе, чтобы посмотреть, увеличило ли это максимальную пропускную способность, с помощью следующих команд:
for i in rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash; do
sudo ethtool --offload eth1 "$i" off
done
Но это не улучшило гостевую скорость интернета. Никакого эффекта не заметил. Я попытался перезагрузить хост и виртуальные машины, отключив и снова включив интерфейс NAT, но это тоже ничего заметно не улучшило.
Прочие сведения:
В PowerShell Get-NetAdapter сообщает следующие основные сведения. информация для vSwitch:
vEthernet (vNAT) Hyper-V Virtual Ethernet Adapter # 6 19 Up 00-15-5D-02-E8-0F 10 Гбит / с
TCP-соединения быстро упадут ниже 5 КБ / с. Apt-get может часами работать с небольшими пакетами:
0% [3 InRelease 104 kB / 109 kB 95%] 2,889 B / s
...
Получено 323 КБ за 1 мин 1 с (5280 Б / с)
Дома speedtest-cli на гостевом компьютере сообщает о 1,91 Мбит / с ниже, 13,02 Мбит / с выше. На хосте скорость 80 Мбит / с вниз, 20 Мбит / с.
В университете speedtest-cli на гостях сообщает о 5,9 Мбит / с вниз, 8,41 Мбит / с вверх. На хосте: 112,53 Мбит / с вниз, 154,13 Мбит / с.
Гостевое ядро - Ubuntu 16.04 (xenial) Хост Linux 4.4.0-138-generic # 164-Ubuntu SMP Вторник 2 октября 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
. Похоже, что это ядро встроено в драйверы для Hyperv, если я верю этому списку .
Я нашел правдоподобное объяснение замедлению. Я думаю, это связано с тем, что виртуальной памяти мало. - хост - это среда с ограничениями по оперативной памяти (ноутбук).
Я заметил, что когда я страдаю от этих низких скоростей, в диспетчере задач процесс Vmmem
находится в торпоре, потребляя значительную часть доступной виртуальной памяти (~ ГБ) и с относительно высокой загрузкой ЦП. Я подозреваю, что сетевые буферы запутываются в этом беспорядке, их меняют местами или просто отбрасывают, потому что они не могут быть поставлены в очередь в любом месте памяти.
Я не совсем уверен, как лучше всего сделать Vmmem исправьте его состояние, как только оно начнет действовать. Я попытался освободить память, закрыв все приложения на хосте и на виртуальной машине. Также попытался закрыть все виртуальные машины, но он продолжал вращаться. Как я уже упоминал в вопросе, я также пробовал перезагрузить хост, но обычно перезагрузка хоста win10 поддерживает работу виртуальных машин, поэтому, вероятно, плохое состояние вернется и при новой загрузке хоста.
Один из способов решить эту проблему - закрыть виртуальную машину в Hyper-V, перезагрузите хост и затем снова включите виртуальную машину. Вероятно, это не устраняет основную причину (недостаточно подкачки?, Недостаточно памяти, выделенной в HyperV?), Но, по крайней мере, он восстанавливает приличную скорость сети в виртуальной машине.
Эти скорости сети, которые я указал в вопросе, повсюду место. Я бы определенно не ожидал, что RX будет меньше TX при моем асимметричном домашнем интернет-соединении.