ограничение загрузки полосы в Mac OS X Yosemite (10.10)

4993
psmith

У меня есть 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 
5
На Yosemite вы можете использовать Icefloor ... Gibs 9 лет назад 0
Спасибо за совет @gibs, но с [веб-сайта] (http://www.hanynet.com/icefloor/): `IceFloor работает на OS X 10.10 Yosemite с ограниченными функциональными возможностями. Управление пропускной способностью не поддерживается. psmith 9 лет назад 0

1 ответ на вопрос

2
Matt Simerson

I ran into exactly this issue with the new Photos app. After installation, a photolibraryd app uploads all the photos in the background, causing the network congestion issues you cite. I too installed the Network Link Conditioner and set up a 256Kbps upload limit.

At first it didn't work. The reason was simple: the upload is a TCP connection (HTTPS on port 443). I had to disconnect first (I just shut off WiFi for a second) after enabling NLC. After that, the uploads resumed under the new NLC rule and I'm able to use my internet at the same time.

For further insight, take a look at your PF rules before and after enabling NLC. Notice that when NLC is enabled, you have a dummynet PF rule?! That's right, instead of supporting ALTQ, it appears that Apple made PF work with dummynet. I posted a bit more about PF on Mac OS X on my blog.

UPDATE: NLC is not needed. Dummynet pipes and queues can be created directly with dnctl. Read the accompanying man page for it for detailed instructions and examples of using it with pf.

Я обновил свой ответ абзацем `dnctl`, который представляет собой инструмент CLI, который будет делать то, что вы хотите, @psmith. Matt Simerson 9 лет назад 0
Я обновился до El Capitan, и действительно, `dnctl`, похоже, работает. Я нашел рабочую конфигурацию здесь: https://www.reddit.com/r/osx/comments/3g7dim/limiting_bandwidth_per_application/ psmith 8 лет назад 0

Похожие вопросы