У меня есть ADSL-интернет, и когда приложение загружается в Интернет на полной скорости (например, Skype или Chrome во время загрузки файлов), пропускная способность загрузки становится очень очень медленной. Это означает, что я практически не могу просматривать веб-страницы во время загрузки, и даже 8.8.8.8
занимает 2-3 секунды; обычно это занимает менее 0,06 секунды.
В Mac OS X Mavericks (10.9) и более ранних версиях я использовал троттлинг, чтобы ограничить исходящий трафик, чтобы интернет можно было использовать во время загрузки.
Throttled использует ipfw для регулирования, который был удален из Yosemite (10.10). Рекомендуемая альтернатива - pf
, но ядро Mac OS X не имеет поддержки ALTQ, что позволило бы формировать трафик (так как я пытался, все команды altq просто игнорируются).
Я также попробовал приложение Network Link Conditioner , но оно неправильно регулирует исходящие пакеты, поэтому Интернет все еще не работает во время загрузки. Средняя исходящая пропускная способность ограничена, но она колеблется / колеблется в течение нескольких секунд.
Итак, как я могу ограничить исходящую пропускную способность? Или как повысить приоритет трафика HTTP хотя бы? Можно ли как-нибудь установить ipfw
? Любая другая идея?
Обновление: конфигурация, которая работает для меня лучше всего на данный момент, - сделать HTTP/HTTPS/SSH неограниченным и ограничить скорость загрузки для всего остального. Это делает Интернет пригодным для использования при одновременном резервном копировании и загрузке через торрент. Вот сценарий:
#!/bin/bash
# Reset dummynet to default config
dnctl -f flush
pfctl -F all
# Compose an addendum to the default config; creates a new anchor
(cat /etc/pf.conf &&
echo 'dummynet-anchor "my_anchor"' &&
echo 'anchor "my_anchor"') | pfctl -q -f -
# Configure the new anchor
cat <<EOF | pfctl -q -a my_anchor -f -
no dummynet quick on lo0 all
dummynet out all pipe 1
dummynet out proto icmp all pipe 2
dummynet out proto tcp to any port 443 pipe 2
dummynet out proto tcp to any port 80 pipe 2
dummynet out proto tcp to any port 22 pipe 2
EOF
# Create the dummynet queue
dnctl pipe 1 config bw 30Kbyte/s queue 50
dnctl pipe 2 config queue 50
# Activate PF
pfctl -E
Чтобы убедиться, что dnctl правильно настроен, запустите sudo dnctl list
. Вы должны увидеть 2 очереди, первая ограничена, вторая неограничена:
$ sudo dnctl list
00001: 240.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 udp 192.168.1.XX/XXX XX.XX.XX.XX/XXX 1372 1517617 6 8010 96
00002: unlimited 0 ms 50 sl. 1 queues (1 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 tcp 192.168.1.XX/XXX XX.XX.XX.XX/XXX 27 4557 0 0 0