在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核網絡擁塞控制算法的實現框架(三)

麥辣雞腿堡 ? 來源:技術簡說 ? 作者:董旭 ? 2023-07-28 11:38 ? 次閱讀

下面看一個特別重要的框架,也可以稱為是擁塞控制引擎,如下結構體所示, tcp_congestion_ops描述了一套擁塞控制算法所需要支持的操作 。這個框架定義了一些鉤子函數,Linux內核中不同的擁塞控制算法根據算法思想實現以下鉤子函數,然后進行注冊即可完成擁塞控制算法的設計。

struct tcp_congestion_ops {
 struct list_head list;
 u32 key;
 u32 flags;

 /* initialize private data (optional) */
 void (*init)(struct sock *sk);
 /* cleanup private data  (optional) */
 void (*release)(struct sock *sk);

 /* return slow start threshold (required) */
 u32 (*ssthresh)(struct sock *sk);
 /* do new cwnd calculation (required) */
 void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
 /* call before changing ca_state (optional) */
 void (*set_state)(struct sock *sk, u8 new_state);
 /* call when cwnd event occurs (optional) */
 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
 /* call when ack arrives (optional) */
 void (*in_ack_event)(struct sock *sk, u32 flags);
 /* new value of cwnd after loss (required) */
 u32  (*undo_cwnd)(struct sock *sk);
 /* hook for packet ack accounting (optional) */
 void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
 /* suggest number of segments for each skb to transmit (optional) */
 u32 (*tso_segs_goal)(struct sock *sk);
 /* returns the multiplier used in tcp_sndbuf_expand (optional) */
 u32 (*sndbuf_expand)(struct sock *sk);
 /* call when packets are delivered to update cwnd and pacing rate,
  * after all the ca_state processing. (optional)
  */
 void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
 /* get info for inet_diag (optional) */
 size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
      union tcp_cc_info *info);

 char   name[TCP_CA_NAME_MAX];
 struct module  *owner;
};

用戶可以通過自定義以上鉤子函數實現定制擁塞控制算法,并進行注冊。以下截取cubic擁塞控制算法對接口的實現、注冊****的代碼片段。 可以注意到cubic只實現了擁塞控制引擎tcp_congestion_ops的部分鉤子函數,因為有一些鉤子函數是必須實現,有一些是根據算法選擇實現的。

static struct tcp_congestion_ops cubictcp __read_mostly = {
 .init  = bictcp_init,
 .ssthresh = bictcp_recalc_ssthresh,
 .cong_avoid = bictcp_cong_avoid,
 .set_state = bictcp_state,
 .undo_cwnd = tcp_reno_undo_cwnd,
 .cwnd_event = bictcp_cwnd_event,
 .pkts_acked     = bictcp_acked,
 .owner  = THIS_MODULE,
 .name  = "cubic",
};

static int __init cubictcp_register(void)
{
 BUILD_BUG_ON(sizeof(struct bictcp) > ICSK_CA_PRIV_SIZE);
 beta_scale = 8*(BICTCP_BETA_SCALE+beta) / 3
  / (BICTCP_BETA_SCALE - beta);

 cube_rtt_scale = (bic_scale * 10); /* 1024*c/rtt */

 cube_factor = 1ull < < (10+3*BICTCP_HZ); /* 2^40 */

 /* divide by bic_scale and by constant Srtt (100ms) */
 do_div(cube_factor, bic_scale * 10);

 return tcp_register_congestion_control(&cubictcp);
}

static void __exit cubictcp_unregister(void)
{
 tcp_unregister_congestion_control(&cubictcp);
}

module_init(cubictcp_register);
module_exit(cubictcp_unregister);

在Linux用戶態可以 通過參數查看當前使用的擁塞控制算法、當前可支持的擁塞控制算法 。如下表所示是兩個參數以及含義。

參數含義
net.ipv4.tcp_congestion_control當前運行的擁塞控制算法
net.ipv4.tcp_available_congestion_control當前可支持的擁塞控制算法

具體如下圖所示,通過參數看到當前可支持的擁塞控制算法以及當前使用的擁塞控制算法。可以看到當前可支持的擁塞控制算法中包含bbr算法, bbr算法在內核版本4.9開始支持的

圖片

如果留意的話,在本文開始時提到了很多傳統的擁塞控制算法,那么在上面的命令中沒有看到,其實有眾多擁塞控制算法在Linux中沒有進行安裝,如下命令 查看Linux系統中所有已實現的擁塞控制算法模塊

圖片

如果想安裝特定的擁塞控制算法可以通過modprobe命令對指定的擁塞控制算法進行安裝,如下所示安裝了Vegas擁塞控制算法,此時再查看當前系統中可以使用的擁塞控制算法,多了一個Vegas算法。

圖片

除了可以動態查看當前Linux系統可用的擁塞控制算法、當前使用的擁塞控制算法外還可以動態切換擁塞控制算法。如下所示將默認的cubic擁塞控制算法切換為bbr擁塞控制算法。

圖片

切換后驗證如下,當前運行的擁塞控制算法由之前的cubic擁塞控制算法切換到了bbr擁塞控制算法。

圖片

圖片

至此本文關于Linux內核網絡中擁塞控制的大概框架、原理介紹到這,文中有表達有誤或者不準確的地方歡迎指正。關于具體的每個擁塞控制算法的實現,將在后續文章中呈現。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40290
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209521
  • 網絡
    +關注

    關注

    14

    文章

    7565

    瀏覽量

    88792
收藏 人收藏

    評論

    相關推薦

    TCP協議技術之擁塞控制算法

    擁塞控制是在網絡層和傳輸層進行的功能。在網絡層,擁塞控制可以通過路由
    的頭像 發表于 02-03 17:06 ?2229次閱讀
    TCP協議技術之<b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>

    Linux內核網絡的TCP傳輸控制塊相關資料分享

    1、Linux內核網絡之傳輸層接收消息簡析在傳輸層發送消息時,TCP發送出去消息后,會跟蹤這些數據包,直到得到對方的確認為止。對于接收方來講,當收到一個報文段時,其會根據情況把這些數據包添加到接收
    發表于 06-21 16:53

    Linux內核網絡網絡層發送消息之IP分片簡析

    1、Linux內核網絡網絡層發送消息之IP分片簡析本文分析下ip的分片。行 IP 分片。IP分片通常發生在網絡環境中,比如1個B環境中的MTU為500B,若的數據長度超過
    發表于 07-20 15:34

    基于衛星網絡的TCP擁塞控制算法

    分析衛星網絡的特點和現有慢啟動算法的不足,提出一種使擁塞窗口平滑增長的慢啟動算法。引入門限因子和粒度因子實現
    發表于 03-20 13:54 ?18次下載

    Linux中傳輸控制協議的擁塞控制分析

    TCP(transport control protocol)的性能在很大程度上取決于其所使用的擁塞控制算法。傳統的TCP在實現多種擁塞
    發表于 06-17 07:43 ?21次下載

    高速網絡中TCP擁塞控制算法的研究

    針對TCP 在高速網絡中的缺陷,提出了改進的BIC TCP 擁塞控制算法。優化算法通過監控鏈路緩存的變化,調整探索可用帶寬過程中的
    發表于 09-17 10:18 ?15次下載

    嵌入式LINUX內核網絡棧(源代碼)

    本文選擇 LINUX-1.2.13 內核所包含的網絡部分代碼分析(注意網絡部分代碼與內核代碼的演變是分離的,如
    發表于 05-12 10:39 ?57次下載
    嵌入式<b class='flag-5'>LINUX</b><b class='flag-5'>內核網絡</b>棧(源代碼)

    基于模糊控制和壓縮感知的無線傳感網絡擁塞算法

    針對無線傳感網絡(WSN)的擁塞問題,提出了一種將模糊控制和壓縮感知(cs)技術相結合來緩解無線傳感網絡擁塞
    發表于 01-03 09:59 ?0次下載
    基于模糊<b class='flag-5'>控制</b>和壓縮感知的無線傳感<b class='flag-5'>網絡</b><b class='flag-5'>擁塞</b><b class='flag-5'>算法</b>

    具有預測與自我調節能力的擁塞控制算法

    隨著網絡技術的日益發展,計算機網絡擁塞問題已極大地影響了用戶的使用體驗與數據傳遞。單一地提高硬件設備的投入并不能持續地防止網絡擁塞。因此
    發表于 01-18 16:18 ?0次下載
    具有預測與自我調節能力的<b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>

    防止網絡擁塞現象的TCP擁塞控制算法

    ,近些年又出現了選擇性應答(selectiveacknowledgement,SACK)算法,還有其他方面的大大小小的改進,成為網絡研究的一個熱點。 TCP的擁塞控制主要原理依賴于一個
    的頭像 發表于 10-29 14:54 ?2490次閱讀

    如何使用Linux內核實現USB驅動程序框架

    Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度
    發表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內核實現</b>USB驅動程序<b class='flag-5'>框架</b>

    如何用eBPF寫TCP擁塞控制算法

    是兩個痛點: 內核越來越策略化。 內核接口不穩定。 分別簡單說一下。 所謂內核策略化就是說越來越多的?靈巧的算法?,?小tricks?等靈活多變的代碼進入
    的頭像 發表于 12-26 09:44 ?1674次閱讀

    Linux內核配置的網絡資料說明

    Linux不止在上網時候才會用到網絡功能’一些程序在單機時候也會需要內核網絡支持。 X server是個典型的例子。如果你是從一個老內核
    發表于 03-12 10:33 ?14次下載

    Linux內核網絡擁塞控制算法的具體實現框架(一)

    控制算法,有很大差別。本文從Linux內核源碼中學習網絡擁塞
    的頭像 發表于 07-28 11:32 ?750次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核網絡</b><b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>的具體<b class='flag-5'>實現</b><b class='flag-5'>框架</b>(一)

    Linux內核網絡擁塞控制算法實現框架(二)

    從上面的概念中可以得知,擁塞窗口可以間接反映網絡的狀況,進而去限制發送窗口的大小。擁塞窗口作為網絡擁塞
    的頭像 發表于 07-28 11:34 ?829次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核網絡</b><b class='flag-5'>擁塞</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>的<b class='flag-5'>實現</b><b class='flag-5'>框架</b>(二)
    主站蜘蛛池模板: 日本三级强在线观看| 久久综合欧美成人| 男男憋尿play按小腹| 天天好比网| 国产亚洲视频在线| 国产欧美一级片| 伊人久久大| 国产亚洲精品成人a在线| 久久天天操| 一级特黄性生活大片免费观看 | 免费啪啪网站| 天天视频国产精品| 成人三级毛片| 欧美xx高清| 日本番囗| 奇米欧美成人综合影院| 美女视频一区二区| 久草免费新视频| 一级一级一片免费高清| h视频在线观看免费网站| 日本亚洲欧美国产日韩ay高清| 亚洲日本中文字幕天天更新| 男人免费看片| 一级做a爰片久久毛片看看| 国产三级影院| 免费在线观看视频网站| 四虎永久在线精品视频免费观看| wwwcom日本| 中文字幕精品一区二区2021年| 全黄h全肉边做边吃奶在线观看| 丁香花免费观看视频| 黄色h视频| 伦理片日本韩国电影三级在线观看| 1314亚洲人成网站在线观看| 国产成人影院在线观看| 四虎精品视频| 色淫阁色九九| 啪啪网站色大全免费| 国内在线观看精品免费视频| 欧美性色生活片天天看99| 日产精品卡二卡三卡四卡无卡乱码|