Ограничение пропускной способности загрузки в 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
,