前回の記事「GoogleのBBR TCP輻輳制御アルゴリズムの4つの可変速エンジン」の最後で、bbrアルゴリズムは名目上強力なエンジンとして安定したエネルギーの流れを必要とすると述べました。供給、そしてこの種のエネルギーはパケットです。 TCPの高速再送メカニズムはLOSTと判断されたデータパケットを1回だけ再送するため、再送データパケットが再び失われてスライディングウィンドウをスライドさせることができない場合、データパケット送信は提供されません。それは失速するでしょう、現時点ではTCPタイムアウトを待つことしかできません!もちろん、タイムアウトのコストは輻輳制御のためだけでなく、接続全体のために少し大きいです、それは異常な災害と変わらない!
Bbrは、それが新しいパケット、LOSTとしてマークされたパケット、再送されたパケット、あるいは構築されたエラーパケットのどれであっても構いません。パケットがあります!bbrは、輻輳制御とパケットのマーキング/送信の間の分離を本当に実装しています。
ニーズについて話した後、計画について話します。
Linuxカーネルはbbrの前にRACKメカニズムを導入しましたが、これは再送後に再び失われたパケットをすばやく見つけて再送するように設計されていますこれらのパケットの処理は非常に重要です。 RTOの深淵に陥るでしょう。もちろん、RTOコールバックはあなた自身の手の中にあり、それほど積極的に対処することはできませんが、失速した接続のためにそれを強制し続けることは自己欺瞞ですRACKはこの問題を解決します。しかしながら、bbr前のRACKは最大の利益を得ることができません。なぜならRACKはどのパケット、特に再送後に再び失われたパケットを即座に検出できるからです。ただし、輻輳ウィンドウの計算は現時点ではssthreshに固定されています。 PRRの方向は下がり、輻輳ウィンドウによって制限され、それ以上のデータを送信する準備ができた瞬間を送信することはできません!bbrエンジンは即座にRACKから送信されたエネルギーを消化し、動的にハイエンドエンジン
RACK(最初にこのドラフトを見てください)もちろん、最近のACK、つまり最新のACKにもSACKが含まれているので、正しい名前にはRecent ACKがあるはずです。RACKはデータを記録しません。 (s)ACKの時刻であるが、ACKを受信した場合には、ACKで確認されたデータパケットの送信時刻を記録し、その送信時刻、すなわち最新の送信時刻にRecentを送信する。 RACKの考えは、この最近のACKによって確認されたパケットの送信時間T.rackを記録し、次に時間窓Twinを与えることであり、時間T.rack − twinより前に送信された未確認パケットはマークされる。 LOSTの場合、これらのパケットは送信側のロジックに送信されます。これは非常に常識です。
RACKコードはとても単純で、コアロジックはnet /ipv4 /tcp_recovery.cにある2つの関数を含むファイルです。
/*
* s)確認応答パケットの最新の送信時刻は、ACKの処理中のrack.mstampです。
* xmit_time - 現在処理中の確認パケットの送信時刻
* sacked - 現在処理中の確認パケットの選択パケットが確認のために選択されているかあなたは今まで行ったことがありますか?ちょっと待ってください。
* /
void tcp_rack_advance(struct tcp_sock * tp、const struct skb_mstamp * xmit_time、u8 sacked);
/*
* tcp_rack_advanceに従って記録する最後に送信された確認済みパケットの送信時刻はrack.mstampと
です。*再送キューで確認対象として選択されていないパケットの送信時刻skb.mstampとフラグがLOSTかどうかの差。
* RACKには組み込みのツインがあり、rack.mstamp-skb.mstamp> twinに一致するすべてのパケットがLOSTとしてマークされます。
*パケットが再送信された場合は、再投稿されたスタンプを消去します。
* /
int tcp_rack_mark_lost(struct sock * sk); Br>
上記はRACKに関する2つのインタフェースです。TCPはACKを処理するときにこれら2つのインタフェースを呼び出します:
1)。ACKによって運ばれる情報の取り扱い(ACK番号またはTCPヘッダのオプション) sACK(block)を呼び出すときはtcp_rack_advanceを呼び出します。
2)ACKを送信することがシーケンシャルACKでないときは、例外Alertに入るときにtcp_rack_mark_lostを呼び出します。
このRACKメカニズムの単純さは、通常のシーケンシャルACKとSACKの区別がなくなり、タイムスタンプの比較だけで、送信順序に関係なく、パケットがパケットかどうかを判断するためのものです。再送信されます。例として次のシーケンスを取ります。
2 |
3 |
4 |
5 |
6 |
7 |
8 |
ACKが4を確認し、UNAが5であると仮定します。ACKはSACK情報を伝送せず、4のみを確認し、その後、rack.mstampは4回の送信の時間です。 5、6、7、8は4の前にどのように送信できますか?明らかに4の後です!RACKの単純さがここに反映されています!5、6、7、8は4の後ろにありますが、誰も保証できません送信時系列を記録することがより合理的です!通常のシナリオでは、4、5、6、7、8が再送信されたパケットで、最初に再送信されます7。 8を送信し、6を再送信し、4を再送信し、最後に5を再送信すると、送信される時系列は次のようになります。
2 |
3 |
7 |
8 |
6 |
4 |
5 |
今度は4が確認され、上記の時間順序に従って、5の確認を待つ理由があります。なぜなら、5は4の後に送られますが、7,8,6は4の前に送られるからです。 skb7.mstampとrack.mstampの差がツインよりも大きい場合、7が最初に送信されます。7を待機し続けるという選択確認は耐えられないことを意味します。逆の場合も同様です。双子の中では、待ち続ける理由があります、それは故障しているかもしれません!同じ戦略は8と6を扱います。
この処理はもっと簡単ですか?パケットの最後の送信時刻とrack.mstampの差を時間順に比較するだけです!パケットが再送信されたことがないかどうかを無視します。しかしながら、これは、シリアル番号に従ってLOST判定を実行するという複雑さの問題を解決する。
ただし、順不同の場合、RACKメカニズムでは、失われていない(実際には順不同またはACKが順不同である)多くのパケットを誤って表示する可能性があると考えるかもしれません。ツインタイムウィンドウの役割を反映して、RACKタイムシーケンスは厳密なタイムシーケンスではなく、バッファ付きの準タイムシーケンスメカニズムです。たとえ双子が役に立たないと思っていても、うまくいかなければ再びRACKをオフにすることができます!
双子の選択は一般に最小RTTの1/4であり、最小RTTはSRTTとは無関係です。これは、自動的に後方にスライドするタイムウィンドウによってサンプリングされた最小RTTに基づいて、真の測定された測定された離散RTT win_minmax(「GoogleのBBR TCP輻輳制御アルゴリズムの4つのシフトエンジン」のwin_minmaxの詳細を参照)主な目的はノイズを滑らかにすることではなく(ダチョウの戦略に少し似ていますが)、混雑しないことによって引き起こされるジッタを除去することです。これは、BufferBloatの影響を最小限に抑えるノイズを積極的に見つけることです。
RACKメカニズムにより、bbrはパケットの欠如について心配する必要がなくなりました。
bbrがACKに従って帯域幅とRTTを収集できる限り、bbrはこれらの帯域幅、RTTフィードバックフルレートに従って実行でき、帯域幅とRTTフィードバックが返送されます。それが新しいパケットであるか再送パケットであるかにかかわらず、パッケージは送信される限り、ACK、SACK、またはDSACKであるかどうかにかかわらず、すべて結果をフィードバックすることができます。連続的に送信可能なパケット(すなわち、LOSTとマークされたパケット)のストリームも、アウトオブオーダなどのイベントが使用されるときに提供され得る。このプロセスはスムーズに実行され、RTOタイムアウトを待つことはもうありません!
bbr以前は、パケット損失や重大な順序外れが発生すると、TCPは輻輳制御アルゴリズムを引き継ぎますが、そうではありません。順不同、いわゆるパケット損失、これらは自分自身を推測するためのTCP輻輳制御ステートマシンロジックです、大部分は真実ではありません、それが本当にパケット損失であるかどうかを正確に推測することはできません。同様に、TCPもまたサソリです!だから、bbrのアプローチは正しいです:
bbrアルゴリズム自体:送信レートとウィンドウを計算します。
TCP輻輳制御ステートマシン:新しいデータを準備し、LOST(レガシーモードとRACKモード)をマークします。つまり、トランスポータブルデータパケットを提供し、そしてbbrアルゴリズムによって提供される食道を満たします。
TCP転送ロジック:転送可能なすべてのパケット、新しいパケット、LOSTとマークされたすべてのパケットを実際に転送します。
上記3人が協力して、「いくら送信されますか」、「何が送信されますか」、「どのように送信するのですか」などの質問に答えます。 s)相互に完全に独立して、相互作用するACKフィードバック。
...
次に何をしますか?
次にスロットを吐きます産業革命の後、人々は蒸気機関車を馬車に乗せようとします。 ..
システムファンクションコールは、Unix /Linuxオペレーティングシステムがユーザープログラムをサポートするために提供するインターフェイスであることを知っていますこれらのインターフェイスを通して、アプリケーションはオペレーティングシステムにサービスを要求し、制御はオペレーティングシステムに転送されます。結果はユーザプログラムに返されます。
システムコールの主な目的は、システムプログラムを知らなくても、デバイ
} _TIF_SYSCALL_AUDIT
1、role:ディレクトリの内容を一覧表示します。 2、形式:ls [options] [files] ファイル関連の内容を表示しない場合は、 [options]を指定します。指定
昨日、zabbixのアラーム電子メールを受け取りました。このディレクトリに移動すると、ディスク使用率が高くなり、このMongoDBデータは現在使用されていないため、データファイルを直接削除し、それ以外
pstreeコマンドは、プロセス間の派生関係をツリー図で表示します。表示効果は比較的直感的です。 pstreeコマンドは、プロセスのツリーをツリービューで表示します。 psコマン