レイテンシとバンド幅





SODA Noriyuki
<soda@NetBSD.org>
<soda@sra.co.jp>

最適化

最適化

基本

最適化

基本

最適化

基本

最適化

基本

最適化

基本

最適化

基本

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

最適化

でもこれだけじゃない

latency

latency

latency

latency

latency

latency

latency

latency

latency 実例 (その1)

registerアクセス0.25ns
L1 cache アクセス1ns
L2 cache アクセス3ns
L3 cache アクセス4ns
関数呼び出し5ns
memory アクセス70ns
I/O syscall (cache hit)300ns
※CPU種別や時代によって大幅に変わります。

latency 実例 (その2)

Infiniband LAN RTT18μs
1000BASE-T LAN RTT100μs
東京←→名古屋 RTT8ms
disk アクセス10ms
東京←→米国西海岸 RTT100ms
東京←→米国東海岸 RTT180ms
※CPU種別や時代によって大幅に変わります。

latency and bandwidth

latency が大きいと

latency and bandwidth

傾向

バンド幅
時代が進むと、どんどん向上する
レイテンシ
時代が進むと、ゆっくりと向上する
メモリ階層
ディスク/メモリ/L3 cache/L2 cache/L1 cache
時代が進むと、階層間の差が開く
一定以上に差が開くと、中間に階層が増える

改善策

今日の話

というわけで、今日は、latency に起因する問題に対する解決策のパターンを あれこれ紹介します。

改善策

まとめて回数を減らす

例: バンド幅: 向上
latency: (厳密に言うと)ちょっと悪化

改善策

read ahead (その1)

例:

改善策

read ahead (その2)

例:

改善策

read ahead (その3)

例: バンド幅: 通常は向上
   予測が外れると悪化する場合も
latency: 短縮

改善策

write back

例: バンド幅: 向上
latency: ある意味悪化
   ディスクにすぐ書かれない。
   クラッシュした場合は失われる。

改善策

write combining

例: バンド幅: 向上
latency: 問題なし
   フレームレートと比較すると一瞬

改善策

先行送信 (その1)

例:

改善策

先行送信 (その2)

バンド幅: 向上
latency: 短縮

改善策

中間にバッファを置いて並列処理 (その1)

例:

改善策

中間にバッファを置いて並列処理 (その2)

例: バンド幅: 向上
latency: 短縮

改善策

処理を細分化して並列処理

スループット: 向上
latency: 変化なし

改善策

並列性を抽出して並列実行する (その1)

例: スループット: 向上
latency: 短縮

改善策

並列性を抽出して並列実行する (その2)

スループット: 向上
latency: 短縮

改善策

投機実行

read ahead は、この一種
CPUの Out of Order 実行機能は、これを含んでいる。

スループット: 通常は向上
   予測が外れると悪化する場合も
latency: 短縮

改善策

インターリーブ

処理を複数のハードウェアで手分けして並列処理する バンド幅: 向上する
latency: 変化なし

改善策

関係ない処理を並列して行なう (その1)

例:

改善策

関係ない処理を並列して行なう (その2)

例:

改善策

関係ない処理を並列して行なう (その3)

例:

改善策

関係ない処理を並列して行なう (その4)

例:

改善策

関係ない処理を並列して行なう (その5)

バンド幅:
全体としてのスループットは通常は向上する。
スレッドあたりのスループットは同じか、 あるいはバンド幅ネックとなった場合は低下する。
latency:
絶対時間では同じ。スレッドに割り当てられたCPU時間比では短縮する。

改善策

差分を送る

データ全体ではなく、通信の両側でデータを保持しておき、差分のみを送る バンド幅: 通常は向上する
latency: 通常は短縮する

改善策

階層バイパス (その1)

改善策

階層バイパス (その2)

バンド幅: 通常はある程度向上する
latency: 短縮する

改善策

複合処理

バンド幅: 向上する
latency: 短縮する

改善策

データではなくプログラムを送る

バンド幅: 向上することが多い
latency: 短縮する (が、送り先の能力が低いと低下する)

改善策

物理的になんとかする

まとめ

CPU時間だけでなく遊んでる時間にも注意