Linux內核網絡性能問題的追蹤(工具篇)

????? 在現代計算環境中,網絡性能對于系統的整體性能至關重要。網絡瓶頸不僅會影響數據傳輸速度,還會影響應用程序的響應時間,最終影響用戶體驗。為了有效地解決網絡性能問題,了解和使用各種追蹤工具至關重要。另外一方面,造成網絡性能問題的原因有很多,而本文主要關注從Linux內核的角度對網絡性能問題的追蹤。本文將介紹三種在Linux下常用的性能追蹤工具:LTTng、ftrace和內核打印輸出,利用這三種工具,可以分別從Linux內核四層及以下協議棧實現代碼以及Linux內核應用層協議實現代碼入手,在主機上對網絡性能問題進行跟蹤。

2. Linux內核網絡協議棧

????? Linux內核網絡協議棧是一個復雜且高效的系統實現,用于處理所有網絡通信任務。它涵蓋了從底層的硬件接口到高層的應用協議,負責數據包的接收、處理、轉發和發送。理解Linux內核網絡協議棧的結構和工作原理,對于優化網絡性能、開發網絡應用和排除網絡故障非常重要。

Linux內核網絡協議棧遵循OSI模型和TCP/IP模型的層次結構,主要包括以下幾個層次:

  1. 物理層:負責實際的硬件傳輸,如網卡驅動程序。
  2. 數據鏈路層:包括以太網協議,負責數據幀的封裝和解封裝。
  3. 網絡層:主要包括IP協議,負責數據包的路由和轉發。
  4. 傳輸層:包括TCP和UDP協議,負責端到端的數據傳輸。
  5. 應用層:包括NFS等協議,直接服務于應用。

圖1 Linux內核網絡協議棧

????? 圖1是Linux內核網絡協議棧結構,摘自騰訊云開發者社區[1]。由圖可見,在Linux系統中,網絡報文的接收沿著Linux網絡協議棧向上流轉,而網絡報文的發送沿著Linux網絡協議棧向下流轉。我們可以利用工具在Linux網絡協議棧實現的各個部分進行追蹤和分析,就能定位網絡性能問題的根源。

3. ?ftrace工具

????? ftrace 是 Linux 內核提供的一種強大的跟蹤框架,主要用于診斷和調試內核中的性能和功能問題。ftrace 允許開發人員和系統管理員跟蹤內核函數的調用、系統事件和其他內核行為 [2]。

?????? ftrace 的基礎是 trace 文件系統,它位于 /sys/kernel/debug/tracing 目錄下。該文件系統包含許多文件和子目錄,用于配置和查看跟蹤數據。Ftrace 通過對這些文件進行讀寫操作來控制和獲取跟蹤信息。

ftrace 支持多種跟蹤器(tracer),每種跟蹤器提供不同的跟蹤功能。主要的跟蹤器包括:

  1. function tracer: 跟蹤內核函數的調用和返回。
  2. function_graph tracer: 跟蹤內核函數調用圖,包括函數的調用關系和時間消耗。
  3. sched tracer: 跟蹤調度事件。
  4. irq tracer: 跟蹤中斷處理事件。

????? ftrace 使用內核中的跟蹤點(tracepoints)來收集數據。跟蹤點是內核代碼中的特定位置,當代碼執行到這些位置時,會觸發一個事件記錄。這些事件記錄了各種信息,如時間戳、CPU ID、進程 ID 等。

???? ftrace 使用內核的環形緩沖區(ring buffer)來存儲跟蹤數據。環形緩沖區的大小是可配置的,當緩沖區滿時,新的跟蹤數據會覆蓋最舊的數據。用戶可以從緩沖區讀取跟蹤數據進行分析。

圖2 利用ftrace對Linux網絡協議棧進行追蹤

????? 圖2是國科環宇利用ftrace對Linux網絡協議棧進行追蹤的結果,從上圖可見,套接字在發送過程中,由于要處理外設中斷,導致了網絡發送性能下降。

4. ?LTTng工具

????? LTTng(Linux Trace Toolkit Next Generation)是一款功能強大的跟蹤工具,用于捕獲和分析Linux系統中的內核和用戶空間事件。LTTng內核跟蹤器通過內核模塊實現,這些模塊在內核空間中插入跟蹤點,用于捕獲內核事件。常見的內核模塊包括 lttng-modules,這些模塊提供了捕獲系統調用、調度事件、中斷處理等功能。LTTng設計了一套高效的事件處理機制,包括鎖定最小化、CPU本地緩存和批量處理等,確保在高負載下的低開銷和高性能。

????? 國科環宇將利用LTTng在高負載下的優良特性,對網絡協議棧的性能問題進行追蹤和排查。

5. ?內核打印輸出

????? 對于實現在內核的應用層協議如果出現性能問題,很難用常規的方法對其進行定位,這時利用內核打印輸出可以比較清晰地追蹤到性能瓶頸的根源。

????? 例如sunrpc.nfs_debug 和 sunrpc.rpc_debug 是 Linux 內核中用于調試 NFS(Network File System)和 RPC(Remote Procedure Call)功能的調試選項。它們通常用于開發和調試階段,以幫助診斷和解決與 NFS 和 RPC 相關的問題。

????? sunrpc.nfs_debug用于啟用 NFS 客戶端和服務器端的調試信息輸出。它允許開發人員和系統管理員跟蹤和調查 NFS 文件系統的運行時行為。通過設置sunrpc.nfs_debug可以跟蹤 NFS 操作,例如文件的讀寫請求。捕獲 NFS 錯誤和超時情況。分析 NFS 客戶端與服務器之間的通信問題。

????? sunrpc.rpc_debug 用于啟用 RPC(Remote Procedure Call)層的調試信息輸出。RPC 是一個用于遠程過程調用的協議,NFS 以及許多其他網絡服務都使用 RPC 進行通信。通過設置sunrpc.rpc_debug,可以跟蹤 RPC 消息的發送和接收。捕獲 RPC 調用失敗或超時情況。分析 RPC 協議層面的問題,如協議版本不匹配或消息格式錯誤。

????? sunrpc.nfs_debug 和 sunrpc.rpc_debug的輸出都是以內核打印的形式呈現的。

6. 結論

????? 在 Linux 系統調試和性能優化中,選擇適當的工具取決于具體的需求和場景。LTTng 和 ftrace 提供了強大的跟蹤能力和高級的數據分析功能,適合復雜的調試和性能分析任務;而內核打印輸出則是一個簡單但實用的調試工具,適合對實現在內核的應用層協議進行跟蹤。根據實際情況靈活選擇和組合使用這些工具,能夠更有效地提升系統的可靠性和性能。

7. 參考文獻

[1] Linux Networking Stack: Sending Data. kernel|network| Linux Networking Stack: Sending Data-騰訊云開發者社區-騰訊云

[2] ftrace - Function Tracer . https://www.kernel.org/doc/html/v4.17/trace/ftrace.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43626.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL批量插入數據的幾種方式

最近在項目中遇到了批量插入數據的一些問題,一般圖省事都是利用mybatis或mybatis-plus的saveBatch方法,但這次因為數據過多,出現了一系列的問題,只能手動處理,接下來分享下對于數據量比較大的批量插入,可能…

python的魔法方法

python類中的self是什么? 對象的方法都會有一個self參數,類比于c,self就相當于c的this指針。 由一個類可以生成無數個對象,當一個對象的方法被調用時,對象會講自身的引用作為第一個參數傳給該方法,那么pyt…

CTF-PWN-kernel-棧溢出(retuser rop pt_regs ret2dir)

文章目錄 參考qwb2018 core檢查逆向調試打包上傳測試腳本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )開啟KPTI利用swapgs_restore_regs_and_return_to_usermode開啟KPTI利用SIGSEGVrop設置CR3寄存器再按照沒有KPTI返回 kernel rop ret2userpt_regs 構造…

2024年浙江省高考分數一分一段數據可視化

下圖根據 2024 年浙江高考一分一段表繪制,可以看到,競爭最激烈的分數區間在620分到480分之間。 不過,浙江是考兩次取最大,不是很有代表性。看看湖北的數據,580分到400分的區段都很卷。另外,從這個圖也可以…

RTOS系統 -- FreeRTOS之任務調度

FreeRTOS中的任務調度 背景介紹 FreeRTOS是一種輕量級的實時操作系統,被廣泛應用于嵌入式系統中。它提供了多任務管理功能,包括任務創建、任務調度和任務切換。FreeRTOS的調度器根據任務的優先級和狀態自動調度任務,確保系統資源的有效利用…

獨立站優勢及吸引力分析

隨著全球化貿易的不斷深入,越來越多的廠商開始尋求更廣闊的市場和更高效的銷售渠道。獨立站作為企業自有的電商網站,正逐漸成為海外貿易的新寵。本文將分析獨立站的優勢及其對廠商的吸引力,鼓勵廠商以建立獨立站的方式出海。 一、獨立站的定義…

el-image放大圖片功能

1.需求&#xff1a;點擊圖片后放大圖片 html代碼&#xff1a; <el-imagestyle"width: 100px; height: 100px":src"baseUrl item.id":zoom-rate"1.2":max-scale"7":min-scale"0.2":preview-src-list"srcList"…

Xilinx FPGA UltraScale SelectIO 接口邏輯資源

目錄 1. 簡介 2. Bank Overview 2.1 Diagram 2.2 IOB 2.3 Slice 2.4 Byte Group 2.5 I/O bank 示例 2.6 Pin Definition 2.7 數字控制阻抗(DCI) 2.8 SelectIO 管腳供電電壓 2.8.1 VCCO 2.8.2 VREF 2.8.3 VCCAUX 2.8.4 VCCAUX_IO 2.8.5 VCCINT_IO 3. 總結 1. 簡介…

Vue利用遞歸的方法,根據id獲取對應的字段名(樹形數據)

樹形數據源 options:[{ancestors: "0",code: "99",id: "99",name: "測試部門1",parentId: "0",children: [{ancestors: "0,99",code: "test",id: "1720269456426344449",name: "測試子部…

【國潮】軟件本土化探索

文章目錄 一、國產-操作系統銀河麒麟&#xff08;Kylin&#xff09;操作系統華為鴻蒙系統&#xff08;HarmonyOS&#xff09;統信UOS深度Deepin 二、國產-服務器華為鯤鵬&#xff1a;飛騰&#xff1a;海光&#xff1a;兆芯&#xff1a;龍芯&#xff1a;申威&#xff1a; 三、國…

Redis學習 - 基礎篇

Redis學習 - 基礎篇 一. 簡介 Redis 是一個高性能的key-value數據庫&#xff0c;常用的數據類型如下&#xff1a;string&#xff0c;list&#xff0c;set&#xff0c;zset&#xff0c;hash 二. 安裝 Widows和Linux下如何安裝Redis-CSDN博客 三. 常用命令 配置及數據庫操作…

《信息技術與信息化 》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

問題解答 問&#xff1a;《信息技術與信息化 》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知網收錄的第一批認定學術期刊。 問&#xff1a;《信息技術與信息化 》級別&#xff1f; 答&#xff1a;省級。主管單位&#xff1a;山東省科學技術協會 主辦單…

國內磁性器件核心企業『云路新能源』攜手企企通正式啟動SRM項目,供應鏈競爭力再上新臺階

近日&#xff0c;珠海黎明云路新能源科技有限公司&#xff08;以下簡稱“云路新能源”&#xff09;攜手企企通啟動SRM數字化采購供應鏈管理項目&#xff0c;雙方相關負責人與項目組成員出席本次啟動會。 本次采購數字化項目建設&#xff0c;企企通將助力云路新能源實現采購全場…

智能無人數字直播間 打造24小時的無人直播間源碼系統 帶網站的安裝代碼包以及搭建教程

系統概述 智能無人數字直播間系統是一種基于人工智能技術的軟件工具&#xff0c;它結合了高精度掃描建模、自動化控制、多模態生成等多項先進技術&#xff0c;能夠實現對真實人物的高度仿真&#xff0c;并自主執行各類直播任務。該系統不僅支持24小時不間斷直播&#xff0c;還…

微信小程序引入自定義子組件報錯,在 C:/Users/***/WeChatProjects/miniprogram-1/components/路徑下***

使用原生小程序開發時候&#xff0c;會報下面的錯誤&#xff0c; [ pages/button/button.json 文件內容錯誤] pages/button/button.json: [“usingComponents”][“second-component”]: “…/…/components/second-child/index”&#xff0c;在 C:/Users/***/WeChatProjects/m…

Windows 中修改 MySQL 密碼

沒想到這樣一個簡單的需求&#xff0c;愣是試了半天沒試到有用的命令&#xff0c;最后終于找到一個有用的&#xff0c;在此做個記錄&#xff1a; set password for rootlocalhost 你的新密碼;

【C++與python】| splice語法對比列表切片

splice用法詳解 C 中的 splice示例 1&#xff1a;將整個列表 lst2 插入到 lst1 中某個位置示例 2&#xff1a;將 lst2 的一個元素插入到 lst1 中某個位置 Python中的列表切片&#xff08;Slicing&#xff09;示例 1&#xff1a;獲取列表的子列表示例 2&#xff1a;修改列表的子…

禪道二次開發——禪道zentaoPHP框架擴展機制——對視圖層(view)擴展

視圖文件的擴展分為兩種方式&#xff0c;一種是完全覆蓋&#xff0c;第二種是通過鉤子機制來擴展。 一、完全覆蓋 視圖文件的覆蓋可以通過完全覆蓋的方式來重新定義。比如我對bug模塊的create頁面進行擴展。原來的視圖文件是存放在module/bug/view/create.html.php。如果需要…

Android約束布局的概念與屬性(2)

目錄 3&#xff0e;鏈式約束4&#xff0e;輔助線 3&#xff0e;鏈式約束 如果兩個或以上控件通過下圖的方式約束在一起&#xff0c;就可以認為是他們是一條鏈&#xff08;如圖5為橫向的鏈&#xff0c;縱向同理&#xff09;。 圖5 鏈示意圖 如圖5所示&#xff0c;在預覽圖中選…

解讀網絡安全公司F5:助企業高效簡化多云和應用部署

伴隨企業加速數字化轉型工作、擴展到新的基礎設施環境并采用微服務架構&#xff0c;企業正擁抱混合和多云基礎設施所帶來的靈活性。Ernst & Young調查數據顯示&#xff0c;84%的企業正處于向現有網絡安全解決方案套件添加多種新技術的早期階段。企業同樣意識到&#xff0c;…