5

У меня есть 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 ответ1

2

Я столкнулся именно с этой проблемой с новым приложением Фотографии. После установки приложение, содержащее 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .