利器解讀!Linux 核心調測中最最讓開發者頭疼的 bug 有解了|龍蜥技術
編者按: 一直持續存在 核心記憶體調測領域兩大行業難題: "記憶體被改" 和 "記憶體洩漏"何解?本文整理自 龍蜥大講堂第 13 期,有效地解決這兩大難題都需要什麼方案?快來看作者的詳細介紹吧!
一、背景
1.1 記憶體被改
//out-of-bound char *s = kmalloc(8, GFP_KERNEL); s[8] = '1'; kfree(s); //use-after-free char *s = kmalloc(8, GFP_KERNEL); kfree(s); s[0] = '1'; //double-free char *s = kmalloc(8, GFP_KERNEL); kfree(s); kfree(s);
1.1.1 為什麼調測難
1.1.2 現有方案的侷限性
-
SLUB DEBUG 需要傳入 boot cmdline 後重啟,也影響不小的 slab 效能,並且只能針對 slab 場景;
-
KASAN 功能強大,同時也引入了較大的效能開銷,因此不適用於線上環境;後續推出的 tag-based 方案能緩解開銷,但依賴於 Arm64 的硬體特性,因此不具備通用性;
-
KFENCE 相對來講進步不少,可在生產環境常態化開啟,但它是以取樣的方式極小概率地發現問題,需要大規模叢集開啟來提升概率。而且只能探測 slab 相關的記憶體被改問題。
1.2 記憶體洩漏
char *s; for (;;) { s = kmalloc(8, GFP_KERNEL); ssleep(1); }
1.2.1 為什麼調測難
1.2.2 現有方案的侷限性
二、解決方案
-
可以在生產環境的kernel動態開啟和動態關閉。
-
功能關閉時無任何效能回退。
-
能夠100% 捕獲slab/order-0 page的out-of-bound、memory corruption, use-after-free、 invaild-free 等故障。
-
能夠精準捕獲問題發生的第一現場(從這個意義上來看,可以顯著加速問題的復現時間)。
-
支援 per-slab 開關,避免過多的記憶體和效能開銷。
-
支援 slab/page 記憶體洩露問題的排查。
2.1 使用方法
2.1.1 功能開啟
-
(可選)配置按 slab 過濾
-
取樣模式
-
全量模式
2.1.2 記憶體被改
2.1.3 記憶體洩漏
2.2 使用效果
對於 記憶體被改,抓到該行為後會在 dmesg 列印現場的呼叫棧。從觸發現場到該記憶體的分配/釋放情況一應俱全,從而幫助精準定位問題。
2.3 效能影響
2.3.1 hackbench
2.3.2 sysbench mysql
三、總結
-
理論上的覆蓋場景不全
-
記憶體開銷大
關於回放和課件獲取
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2889274/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 龍蜥開源核心追蹤利器 Surftrace:協議包解析效率提升 10 倍! | 龍蜥技術協議
- 開箱即用!Linux 核心首個原生支援,讓你的容器體驗飛起來!| 龍蜥技術Linux
- 一文解讀機密容器的崛起和發展 | 龍蜥技術
- 龍蜥利器:系統運維工具 SysAK的雲上應用效能診斷 | 龍蜥技術運維
- 龍蜥開源Plugsched:首次實現 Linux kernel 排程器熱升級 | 龍蜥技術Linux
- 深入解讀雲場景下的網路抖動 | 龍蜥技術
- 「龍蜥開發者說」徵稿啦!
- 技術解讀:Dragonfly 基於 P2P 的智慧映象加速系統 | 龍蜥技術Go
- 虛擬化解決方案 virtio 的技術趨勢與 DPU 實踐解讀 | 龍蜥技術
- 軟體調優方法有哪些?看看飛騰技術專家怎麼說 | 龍蜥技術
- 技術解讀:現代化工具鏈在大規模 C++ 專案中的運用 | 龍蜥技術C++
- 深入解讀基礎軟體雲原生面臨的挑戰 | 龍蜥技術
- 來自開發者的點贊,龍蜥社群榮登“2022 中國技術品牌影響力榜單”
- 技術門檻高?來看 Intel 機密計算技術在龍蜥社群的實踐 | 龍蜥技術Intel
- 龍蜥社群&龍蜥開發者獲CSDN2021年度技術影響力「年度開源專案」獎和「年度社群之星」
- 技術解讀倚天 ECS 例項——Arm 晶片的 Python-AI 算力最佳化 | 龍蜥技術晶片PythonAI
- 龍蜥開發者說:聊一聊我技術生涯的“三次迭代” | 第 3 期
- 龍蜥開發者說:6 年前開啟的開源“潘多拉盲盒”,如今都解了哪些未知數 | 第 15 期
- 萬里資料庫加入龍蜥社群,打造基於“龍蜥+GreatSQL”的開源技術底座資料庫SQL
- 入門即享受!coolbpf 硬核提升 BPF 開發效率 | 龍蜥技術
- 讀《JavaScript核心技術開發解密》筆記JavaScript解密筆記
- 基於 Coolbpf 的應用可觀測實踐 | 龍蜥技術
- KeenTune的演算法之心——KeenOpt 調優演算法框架 | 龍蜥技術演算法框架
- 系列解讀 SMC-R (二):融合 TCP 與 RDMA 的 SMC-R 通訊 | 龍蜥技術TCP
- 龍蜥開發者說:我眼裡的龍蜥社群:一個包容的大家庭 | 第 10 期
- 龍蜥開發者說:首次觸電,原來你是這樣的龍蜥社群? | 第 8 期
- 讓人頭疼的BCProxy許可權
- 龍蜥LoongArch架構研發全揭秘,龍芯開闢龍騰計劃技術合作新正規化架構
- 跨語言程式設計的探索 | 龍蜥技術程式設計
- 助力Koordinator雲原生單機混部,龍蜥混部技術提升CPU利用率達60%|龍蜥技術
- 龍蜥社群成立雲原生 SIG,引入 3 大核心技術,共建雲原生生態
- 工作中遇到很讓人頭疼的上司怎麼辦?
- 龍蜥開發者說:為愛發電!當一個龍蜥社群打包 Contributor 是怎樣的體驗?| 第16期
- GaussDB技術解讀系列:效能調優
- eBPF 雙子座:天使 or 惡魔?| 龍蜥技術eBPF
- 龍蜥開發者說:海納百川,有容乃大,我在龍蜥社群的升級之旅 | 第 11 期
- Linux核心技術分析Linux
- 龍蜥社群高效能儲存技術 SIG 11 月運營回顧 | 龍蜥 SIG