tso[tso]

tso[tso]
更多義項 ▼ 收起列表 ▲

tso(TCP Segment Offload)是一種利用網卡的少量處理能力,降低CPU傳送數據包負載的技術,需要網卡硬體及驅動的支持。

TSO:Technical Standards Order

技術標準說明,航空產品要取得適航認證就必須由美國聯邦航空局FAA進行審查,FAA對產品的公司進行質量保證體系的全面符合性審查,提出建設性的建議和意見,如果FAA對審查情況比較滿意,將會頒發TSO認證證書。這對航空產品走向國際市場的必須門檻。
A Technical Standard Order (TSO)is a minimum performance standard issued by the Administrator for specified materials, parts, processes, and appliances used on civil aircraft. TSOs can be viewed by Current, Active Historical, or Canceled. Current TSOs are the approved FAA performance standard that the applicant must use to receive a TSO authorization. Active Historical TSOs are for previously approved TSO authorizations. Canceled TSOs are for reference only.

TSO(TCP Segment offload)

是一種利用網卡的少量處理能力,降低CPU傳送數據包負載的技術,需要網卡硬體及驅動的支持。
在不支持TSO的網卡上,TCP層向IP層傳送數據會考慮mss,使得TCP向下傳送的數據可以包含在一個IP分組中而不會造成分片, mss是在TCP初始建立連線時由網卡MTU確定並和對端協商的,所以在一個MTU=1500的網卡上,TCP向下傳送的數據不會大於min(mss_local, mss_remote)-ip頭-tcp頭。
而當網卡支持TSO時,TCP層會逐漸增大mss(總是整數倍數增加),當TCP層向下傳送大塊數據時,僅僅計算TCP頭,網卡接到到了IP層傳下的大數 據包後自己重新分成若干個IP數據包,添加IP頭,複製TCP頭並且重新計算校驗和等相關數據,這樣就把一部分CPU相關的處理工作轉移到由網卡來處理。 核心TCP/IP協定棧也必須考慮下發包數和實際包數不一致的情況,例如處理擁塞控制算法時必須做一些特殊的處理等等。
註:參考核心版本為2.6.9;
1 TCP/IP協定棧對TSO的支持
1.1 逐漸增大mss(offload)
在不支持TSO的網卡 上,TCP層向IP層傳送數據會考慮mss,使得TCP向下傳送的數據可以包含在一個IP分組中而不會造成分片, mss是在TCP初始建立連線時根據網卡MTU確定並和對端協商的,所以在一個MTU=1500的網卡上,TCP向下傳送的數據不會大於min (mss_local, mss_remote)-ip頭-tcp頭。
套用層傳輸層傳輸數據時,對於TCP協定,最終會調用如下函式:
檔案 net/ipv4/tcp.c
int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t size)
該函式會調用如下函式
檔案 net/ipv4/tcp.c
unsigned int tcp_current_mss(struct sock *sk, int large)
獲得當前的mss值,如果網卡不支持TSO,則該函式返回的mss值將和原來相同,否則如果當前不是一個MSG_OOB類型的訊息,核心將嘗試增大 mss值,注意: 最大的mss值不會大於65535-ip頭-tcp。 核心根據/proc變數tcp_tso_win_divisor決定增大後的mss占當前擁塞控制視窗的比率(snd_cwnd)。最終的效果是:增大的mss總是原有mss值的整數倍,但是不會超過snd_cwnd/tcp_tso_win_divisor。
1.2 對skb計數的修正
在啟用TSO時,由於TCP層向下傳送一個skb, 有可能最終會發出n個IP數據包,即一個skb和一個IP packet可能不是一一對應的關係,而我們都知道,TCP擁塞控制算法需要精確跟蹤當前傳送、接收以及擁塞控制視窗來決定最終傳送多少數據包,TSO的 存在給計算帶來了一定的複雜性,所以核心在每一個skb的末尾維護了額外的數據(struct skb_shared_info,通過skb_shinfo取出),表示該skb包含多少個packet。核心提供下列函式操作這塊數據: tcp_skb_pcount
tcp_skb_mss
tcp_inc_pcount
tcp_inc_pcount_explicit
tcp_dec_pcount_explicit
tcp_dec_pcount
tcp_dec_pcount_approx
tcp_get_pcount
tcp_set_pcount
tcp_packets_out_inc
tcp_packets_out_dec
tcp_packets_in_flight
最終,當TCP協定棧在調用tcp_snd_test決定是否可以傳送當前skb時,會調用上述函式修正計算結果。

相關詞條

熱門詞條

聯絡我們