Я пытаюсь воспроизвести некоторые проблемы в развернутом приложении, в котором сервер и клиент MSSQL работают на двух разных машинах. Я думаю, что между двумя машинами могут быть проблемы с сетью, поэтому я хотел бы попытаться воспроизвести эти условия на двух виртуальных машинах Hyper-V (на одном виртуальном сервере). Конечно, сеть для этих виртуальных машин является «локальной», поэтому на самом деле она далека от условий в реальной среде.
Есть ли программа, которую я могу запустить на любой виртуальной машине, которая снизит производительность сети? Или может быть какая-то другая работа? Например, одним из способов воспроизвести условия может быть запуск виртуальных машин на отдельных серверах Hyper-V в географически удаленных местах (чтобы трафик SQL проходил через VPN или что-то в этом роде), но я думаю, что это немного затянуто. Должен быть способ попроще.
В Linux вы должны использовать netem, в FreeBSD - dummynet.
Ни одно из этих решений не будет работать на одной машине Windows с Hyper-V. Я искал и не могу найти никаких сетевых эмуляторов, совместимых с Windows Hyper-V.
Вы можете разместить две виртуальные машины на двух разных физических машинах, установив между ними ящик Linux или FreeBSD. Но не похоже, что есть какое-то решение, которое будет делать именно то, что вы хотите, на одном хосте виртуальной машины.
Дополнительным методом является автономный набор инструментов Network Emulator Toolkit (NEWT), который, несмотря на свой возраст, вполне способен и работает с операционными системами Windows x86 и x64.
https://blog.mrpol.nl/2010/01/14/network-emulator-toolkit/
Используя прилагаемые XML-шаблоны с установщиком, вы можете быстро приступить к работе по моделированию задержки, пропускной способности, джиттера и других сетевых переменных.
Я тестировал и использовал это приложение на всех версиях Windows от XP -> Windows 10.
Dummynet должен работать на вас: http://info.iet.unipi.it/~luigi/dummynet/
Он устанавливает службу на сетевой адаптер, а затем через командную строку вы устанавливаете свои параметры.
Я использовал его для тестирования доступа к веб-сайту по ссылке с высокой задержкой или низкой пропускной способностью в Windows XP, и он работает очень хорошо.
Мой друг что-то настроил, используя dummynet и FreeBSD в ESX. Я знаю, что это не Hyper-V, но вы можете изменить его, чтобы он работал на вас. http://apocryph.org/2009/05/15/simulating-slow-wan-links-with-dummynet-and-vmware-esx/
Похоже, тебе нужно netem
Вы можете вставить потерю пакетов, задержку, джиттер и т. Д.
Если это просто для задержки пакетов, в Linux вы можете просто использовать tc и дисциплины последовательного подключения (например, HTB):
[...] HTB как дочерний по отношению к другому HTB НЕ совпадает с классом другого класса в том же HTB. Это потому, что когда класс в HTB может отправлять, он будет отправлен, как только сможет аппаратное оборудование. Таким образом, задержка нижнего предельного класса ограничивается только оборудованием, а не предками. В HTB в случае HTB внешний HTB моделирует новое оборудование со всеми последствиями (большая задержка)
убытки также могут быть внесены с iptables и random
модуль:
# for randomly dropping 10% of incoming packets:
iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP
# and for dropping 10% of outgoing packets:
iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP