web-dev-qa-db-ja.com

Mac OS X Yosemite(10.10)でのアップロード帯域幅の制限

ADSLインターネットを使用していますが、アプリケーションをフルスピードでインターネットにアップロードしている場合(たとえば、SkypeまたはChromeファイルのアップロード中))、ダウンロード帯域幅が非常に遅くなります。つまり、実際に閲覧できません。アップロード中のウェブページや8.8.8.8へのpingでも2〜3秒かかりますが、通常は0.06秒未満かかります。

Mac OS X Mavericks(10.9)以前では、 throttled を使用して送信トラフィックを制限したため、アップロード中にインターネットを使用できました。

Throttledは、Yosemite(10.10)から削除されたスロットルにipfwを使用します。推奨される代替手段は pf ですが、Mac OS XカーネルはALTQをサポートしていないため、トラフィックシェーピングが有効になります(私が試したように、すべてのaltqコマンドは単に無視されます)。

Network Link Conditioner アプリも試しましたが、送信パッケージが正しく調整されないため、アップロード中はインターネットを使用できません。平均発信帯域幅には制限がありますが、数秒の周期で手を振ったり振動したりしています。

では、どうすれば発信帯域幅を制限できますか?または、少なくともHTTPトラフィックの優先度を上げるにはどうすればよいですか?どういうわけかipfwをインストールできますか?他のアイデアはありますか?

Update:これまでのところ私にとって最も効果的な構成は、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つのキューが表示されます。最初のキューは制限されており、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
psmith

私は新しい写真アプリでまさにこの問題に遭遇しました。インストール後、photolibrarydアプリがバックグラウンドですべての写真をアップロードするため、引用したネットワークの混雑の問題が発生します。私もネットワークリンクコンディショナーをインストールし、256Kbpsのアップロード制限を設定しました。

最初はうまくいきませんでした。理由は単純でした。アップロードはTCP接続(ポート443のHTTPS)です。NLCを有効にした後、最初に切断する必要がありました(WiFiを1秒間オフにしました)。その後、新しいNLCルールの下でアップロードが再開され、同時にインターネットを使用できるようになりました。

詳細については、NLCを有効にする前後のPFルールを確認してください。 NLCが有効になっている場合、ダミーネットPFルールがあることに注意してください。そうです、ALTQをサポートする代わりに、AppleはダミーネットでPFを動作させたようです。私は 私のブログでMac OS XのPFについてもう少し を投稿しました。

更新:NLCは必要ありません。ダミーネットのパイプとキューは、dnctlを使用して直接作成できます。詳細な手順とpfでの使用例については、付属のマニュアルページをお読みください。

2
Matt Simerson