Ограничение пропускной способности загрузки в Mac OS X Yosemite (10.10)
У меня 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
1 ответ
Я столкнулся именно с этой проблемой с новым приложением Фотографии. После установки photolibraryd приложение загружает все фотографии в фоновом режиме, вызывая проблемы с перегрузкой сети, которые вы цитируете. Я также установил Network Link Conditioner и установил лимит загрузки 256 Кбит / с.
Сначала это не сработало. Причина была проста: загрузка по TCP-соединению (HTTPS через порт 443). Сначала пришлось отключить (я просто отключил WiFi на секунду) после включения NLC. После этого загрузка возобновилась в соответствии с новым правилом NLC, и я могу одновременно использовать свой интернет.
Для получения более подробной информации ознакомьтесь с правилами PF до и после включения NLC. Обратите внимание, что когда NLC включен, у вас есть правило PF dummynet?! Все верно, вместо поддержки ALTQ, похоже, что Apple заставила PF работать с dummynet. Я опубликовал немного больше о PF на Mac OS X в своем блоге.
ОБНОВЛЕНИЕ: NLC не требуется. Трубы и очереди Dummynet могут быть созданы непосредственно с dnctl, Для получения подробных инструкций и примеров использования с pf,