ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ネットワーク遅延を減らしてAppの応答性を向上させる
最新のネットワークスループットレートを最大限に活用することで、ネットワークレイテンシがご利用のAppにどう影響するのかご覧ください。応答性を向上させるためにAppやサーバで行う変更について解説します。インターネットの改善が行われたときにご利用のAppが対応できるようにしておくことで、エンドツーエンドの遅延を低減させることができるようになります。
リソース
- Network Quality test in Go
- Network Speedtest by Ookla
- Responsiveness Test Server configuration instructions
- Waveform bufferbloat test
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
♪メロウなインストゥルメンタル ヒップホップ音楽♪ ♪ Vidhi Goelです このビデオでは Appのネットワークのディレイを短縮し 反応を良くする方法を説明します まずAppの反応になぜレイテンシーの 縮小が重要か 次にAppでできるリスト またサーバ上で不必要なディレイを なくす方法を説明します 最後にネットワーク自体で ディレイ縮小でできることを 説明します ネットワークレイテンシーはデータ移動に かかる時間です Appにコンテンツを どれだけ速く配信できるかを 左右します ネットワーク処理遅延は ネットワークを使用する すべてのAppに影響します App体験を損ないます 例えばビデオ通話が時々フリーズしたり 遅れが発生し会議を妨げてしまいます 多くの場合サービス・プロバイダで 帯域幅をアップグレードしますが 問題はまだ解決できません この問題の根本的原因を理解するには Appパケットがどのように ネットワークを移動するか 知る必要があります App フレームワークがサーバーデータを要求し パケットがネットワークの スタックから送信されます 多くの場合パケットは直接ディレイなく ネットワークでサーバーに 送信されると思われます しかし実際には最も遅いリンクに通常 パケット処理の大きなキューがあります Appからのパケットは この大きなキューの処理が終わるまで 処理できません 最も遅いリンクのキューで Appとサーバー各往復に 時間がかかります この問題は多数の往復で 悪化し Appリクエストに 最初のレスポンスを得るまで長くかかります 例えばTCP TLS 1.2を使用し 最初のレスポンス パケットまでの時間 は 4つのトリップを掛けた各往復の 時間です ネットワークキューによって 毎往復の時間が既に 膨張しているため 結果として総使用時間は長すぎるのです Appの反応には 2つの相補要因があります 各往復の期間また往復の数です これらを縮小すればレイテンシーが下がり App反応が改善されます 帯域幅増加とレイテンシー減少と ページ・ロード時間の インパクト研究があります 最初のテストでレイテンシーは固定で 帯域幅は1から10Mb/sまで漸増的に増加します 初めは帯域幅は1から2Mb/sまで増加し ページ・ロードはおよそ 40パーセント短縮されます すばらしいですね しかし4Mb/sの後ページ・ロードは ほとんど改善がありませんでした このためAppはギガビットに アップグレードしても 遅いのです 他方レイテンシー・テストでレイテンシーが 20ミリセカンド減少するごとに ページ・ロードは線形の改善があります 結果はAppのすべてのネットワーク活動に 適用されます App反応完全とレイテンシー短縮の 簡単な方法はIPv6 TLS 1.3また HTTP/3など 最新のプロトコルの 採用ですAppで URLSessionと Network. framework API を 使用するとプロトコルは サーバ上で有効化すると 自動的に使用されます 公開以来1年以内にHTTP/3使用は 一貫して増加しました ウェブの20パーセントが既にHTTP/3で 成長し続けています サファリの異なるHTTPバージョン比較で HTTP/3は最も高速でした HTTP/3リクエストはHTTP/1と比較し 時間が半分です ラウンド・トリップ時間の 倍数としてリクエスト 完了時間のメジアンを見た場合です Appのリクエストがはるかに速くなります デバイスがWiFiからセルに移動する場合 新しい接続には時間がかかり Appが失速します 接続退避の使用で失速を除去できます URLSessionあるいはNWParametersで multipathServiceTypeプロパティを .handoverに設定します Appでこのオプションの作動を確かめます UDPを直接使用するプロトコル設計で iOS 16 macOS Venturaは データグラムの送信で よりよい方法を導入しました QUICデータグラムは平易なUDPの多く利点を 提供し最も重要なのはQUICデータグラムが ネットワーク中で混雑に反応し 往復の時間を維持するか パケット・ロスを縮小します クライアント選択で isDatagramをQUICオプション上で Trueに設定し 最大のデータグラム フレーム・サイズを設定します データグラム・フローを作成した後 QUICストリームと同じく送受信ができます Appレイテンシーの縮小が わかりました 次にサーバはAppの反応に どのように影響があるか 説明します 多くの場合ハードウェアはよいにもかかわらず サーバがAppを 遅くしています macOSモンテレーはネットワーク品質ツールが 導入されました サービス・プロバイダー ネットワークとサーバの バッファを測定します ネットワーク品質ツールの目的地として サーバを構成します networkQualityツールを実行します まずアップルの既定のサーバに その後構成サーバです 既定のサーバのツールスコアが良く 自分のサーバーで悪い場合 サーバ反応を改善する余地が あるかもしれません このテクニックを使用した改善例です それは ストリームビデオです
ビデオをスキップしても 遅延のバッファで結局遅かった 経験があるでしょう ランダム・アクセスでこの緩慢の理由を 調査しました ネットワーク品質ツールで ストリーミングサーバの挙動のテストで 反応スコアはよくありませんでした 右はWWDCビデオを流し ビデオをスキップしても スクリーンはビデオのデバッファ中に 何も表示しませんでした 数秒後にビデオが表示されました macOSの上で ネットワーク品質ツールから詳細な出力で サーバのキューが大きいことが原因とわかり サーバ設定をチェックしました 特にTCP TLS またHTTPバッファサイズです 4MB 256K 4MBまでの構成で RAMが大きくバッファは巨大でした バッファがよくてもバッファを増やすことが よりよいとは限りません 反応測定はこの問題を強調します 新しく生成したパケットは これらの大きなバッファで 古いデータ後にキューされ 最新パケットでディレイが 増えてしまいました HTTPのバッファサイズを256Kに TLSは16K TCPは128Kに縮小しました
Apache Traffic Serverコンフィグ・ファイルの オプションを示します TCP未送信マークは128Kにセットされ オプションで低バッファを有効化しました TLSで動的なレコード・サイズを有効化し またHTTP/2の マークおよびバッファブロック・サイズ を縮小しました これらの設定をApache Traffic Serverに 推奨します 異なるウェブサーバを使用している場合 同等のオプションを推奨します 変更後 再びネットワーク品質ツールを実行し 今回は高いRPMスコアが得られました 右側で同じビデオを流します スキップするとビデオは 即座に再開されます サーバで不必要キューが除去されることにより ランダム・アクセス反応が改善されました App ネットワーキングを どのように使用するかに かかわらずサーバ上の変更でApp反応が良くなり よりよいユーザー体験が提供できます Appを改善しサーバを更新する方法です 反応に非常に影響する3番めの要因は ネットワーク自体です アップルはmacOSモンテレーで iOS 15 ネットワーク 品質ツールを導入しました 以来ネットワーク検査で他社も同じ方法を 使用しました WaveformはBufferbloatテストを始め 反応テストのオープン・ソース実装で Goで書かれました Ooklaの速度試験Appに 反応測定が加わりました OoklaのAppはミリセカンドで往復時間を表示 また60,000で割る場合 毎分往復あるいはRPM数を得られます これらのツールを自分のネットワーク測定で 使用できます ネットワークのディレイを 理解する最良の方法は ディレイに反応するAppです リモート・マシンスクリーン共有体験を おみせします アクセス・ネットワークを 模倣したネットワーク条件セットアップで その他ネットワークの共有 デバイスと通信します 遠隔ログオンしスクリーン共有します
別のFinderrメニューをクリックし 各メニューのディスプレイは非常に遅く 相互ディレイをチェックするため ローカルのマシン上の時間を 表示するAppを立ち上げ 同じAppをリモートマシン上で立ちあげました コンピューター時間は同期されても 遠隔のスクリーンは定期的に更新されず 数秒ディレイがあり この理由は ネットワークの最も遅いリンクで 大きなキューが存在することで この大きなキューにスクリーン共有App パケットデータがありました
このキュー問題の解決で アップルはネットワークのコミュニティと L4Sと呼ばれる新技術を開発しています iOS 16および macOSヴェントゥーラで ベータとして利用可能です L4Sはキューディレイを著しく縮小し 0の混雑ロスを達成します 一貫して 短いキューを続けるために ネットワークはパケットを落とす代わり 明示的に混雑信号を示します また送信元はネットワークから混雑 フィードバックに基づき送信割合を調節します パケット・ロスなしで ネットワーク中のキューを 非常に低く抑えます App反応を改善できます さてL4S でスクリーン共有 改善を見てみましょう 同じマシン また同じネットワークを使用します 今回はL4Sを有効化します 別のFinderrメニューをクリックすると 直ちに開きました 両方のマシン上でタイム・Appを起動し 両方の遠隔スクリーン時間を計ると ローカルのマシンはほとんど 完全に 同期されました このテクノロジーはスクリーン共有だけでなく L4Sは今日のAppのすべてを改善し 将来のAppで現在にはない ドアを開きますこのチャートは スクリーン共有Appパケットから観察された 平均ラウンド・トリップ時間です 同じネットワーク共有その他デバイスから 通信もあります クラシックキューとL4Sで L4Sでのラウンドトリップ時間は かなり縮小されました これはスクリーン共有体験劇的な改善の 主要な理由です HTTP/3あるいはQUICを 使用するAppを L4Sでテストします 開発者設定の内部で あるいはmacOS ヴェントゥーラで デフォルト書き込みによって iOS 16のL4Sを 有効化できます リナックス・サーバーを使用して テストするにはQUIC実装で 正確なECNを支援し 拡張可能な混雑制御 アルゴリズムを使用する 必要があります To ensure that you are ready ネットワーキング展開 準備ができていることを 保証するため Appで L4Sとの互換ををテストし また遭遇する問題の フィードバックを供給します Appの反応改善のためレイテンシーの縮小は 必要なことがわかりました したがってHTTP/3およびQUICで 往復の数を減らし Appにコンテンツをより高速で配信します 反応速度を挙げるためサーバで 不必要なキューを除去します L4S開発者設定でAppの互換をテストし フィードバックします 最後にサーバープロバイダにL4S対応を 問い合わせます ありがとうございました ♪
-
-
6:21 - Enable connection migration on URLSessionConfiguration for HTTP/3
let configuration = URLSessionConfiguration.default configuration.multipathServiceType = .handover
-
6:29 - Enable connection migration on NWParameters for QUIC
let parameters = NWParameters.quic(alpn: ["myproto"]) parameters.multipathServiceType = .handover
-
7:08 - Opt-in to QUIC datagrams
// Only one datagram flow can be created per connection let options = NWProtocolQUIC.Options() options.isDatagram = true options.maxDatagramFrameSize = 65535
-
8:12 - Network quality tool in MacOS
networkQuality -s -C https://myserver.example.com/config
-
10:59 - Recommended configuration for Apache Traffic Server
% cat /opt/ats/etc/trafficserver/records.config # Set not-sent low-water mark trigger threshold to 128 kilobytes CONFIG proxy.config.net.sock_notsent_lowat INT 131072 # Set Socket Options flag to the sum of the options we want # TCP_NODELAY(1) + TCP_FASTOPEN(8) + TCP_NOTSENT_LOWAT(64) = 73 CONFIG proxy.config.net.sock_option_flag_in INT 73 ... # Enable Dynamic TLS record sizes CONFIG proxy.config.ssl.max_record_size INT -1 ... # Reduce low-water mark and buffer block size for HTTP/2 CONFIG proxy.config.http2.default_buffer_water_mark INT 32768 CONFIG proxy.config.http2.write_buffer_block_size INT 262144
-
12:52 - Responsiveness tests
https://www.waveform.com/tools/bufferbloat https://github.com/network-quality/goresponsiveness https://www.speedtest.net/
-
17:12 - Enable L4S for QUIC on Mac
defaults write -g network_enable_l4s -bool true
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。