色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

內核并發消殺器KCSAN技術分析

Linux閱碼場 ? 來源:內核工匠 ? 2023-02-25 09:12 ? 次閱讀

一、KCSAN介紹

KCSAN(Kernel Concurrency Sanitizer)是一種動態競態檢測器,它依賴于編譯時插裝,并使用基于觀察點的采樣方法來檢測競態,其主要目的是檢測數據競爭。

KCSAN是一種檢測LKMM(Linux內核內存一致性模型)定義的數據競爭(data race)的工具,同時它也可以控制報告哪種類型的數據競爭。

KCSAN知道LKMM定義的所有標記原子操作,以及LKMM尚未提到的操作,例如原子位掩碼操作(bit mask)。

KCSAN擴展了LKMM,例如通過提供data_race()標記,來表示存在數據競爭和缺乏原子可能性。

1.1 LKMM(Linux內核內存一致性模型)

Linux內核內存模型目前在源代碼樹中的memory-barrier.txt和atomic_ops.txt文件中有非正式的定義。包含以下組成部分:

變量訪問(Variable Access)

使用READ_ONCE()、WRITE_ONCE()和ACCESS_ONCE()宏來保護從共享(但非原子)變量的加載和存儲;

內存屏障(Memory Barriers)

一類同步屏障指令,是CPU或編譯器在對內存隨機訪問的操作中的一個同步點,使得此點之前的所有讀寫操作都執行后才可以開始執行此點之后的操作。比如barrier、smp_mb/smp_wmb/smp_rmb等;

鎖操作(Locking Operations)

原子操作(Atomic Operations)

控制依賴(Control Dependencies)

Linux內核提供了一個有限的控件依賴的概念,在某些情況下對依賴控件的存儲進行優先加載;

RCU寬限期授權關系(Grace-Period Relationships)

允許更新者等待所有已經存在的讀側臨界區完成,再回收舊的資源;

C11原子原語 (C11 Atomics)

將原子原語的實現委托給編譯器;如果多個體系結構采用這種方法,將減少體系結構特定代碼的數量。

1.2 數據競爭

為什么要關心數據競爭?

C語言的發展獨立于并發性。如果給定的變量或訪問沒有任何特別之處,則變量只會在響應當前線程的存儲時發生變化。

C語言和編譯器的進化對并發性不敏感

優化編譯器正變得越來越豐富

因此,編譯器可以并且使用各種優化,包括負載融合、代碼重新排序和許多其他可能導致并發算法故障的優化。

讀取拆分(單次訪問多次讀取)

存儲拆分(單次訪問多次寫入)讀取融合(編譯器直接使用上一次對這個變量的load結果,而不是真正再去load一次)

存儲融合(編譯器優化寫入變量流程,不再真實寫入)

代碼重排(把一些類似的計算歸在一起,節省占用的寄存器,改善現代超標量微處理器里面各個運算單元的利用效率)

虛擬讀取(編譯器優化會導致多次讀取,導致后續加載異常)

虛擬存儲(編譯器優化會導致多次存儲,導致后續存儲異常)

.....

因此需要告訴編譯器并發代碼,Linux提供內存一致性模型,也提供檢查方法解決此類問題。

1.2.1 訪問方式

普通訪問

標記訪問

5917632a-b463-11ed-bfe3-dac502259ad0.png

1.2.2 同步沖突訪問的檢測條件

在訪問同一個地方并且至少有一個是寫操作

至少有一個是普通訪問(比如x+42)

以下線程打鉤的是標準做法;打叉的是可能存在數據競爭的情況。

592bf27c-b463-11ed-bfe3-dac502259ad0.png

1.2.3 哪些不屬于數據競爭

例如:使用不對稱的鎖機制,并且使用READ_ONCE/WRITE_ONCE標記訪問。

5958056a-b463-11ed-bfe3-dac502259ad0.png

二、依賴與配置方案

2.1 版本支持

KCSAN支持GCC/CLANG編譯,需要GCC版本11,CLANG 12以上版本。

x86_64: >=5.8 ARM64: >=5.17

597262a2-b463-11ed-bfe3-dac502259ad0.png

599f2a3a-b463-11ed-bfe3-dac502259ad0.png

2.2 KCSAN工具鏈支持

cc-option,-fsanitize=thread --param tsan-distinguish-volatile=1

59ae3822-b463-11ed-bfe3-dac502259ad0.png

2.3 配置選項支持

59d02af4-b463-11ed-bfe3-dac502259ad0.png

三、工作原理與觸發條件

3.1 使用方式

檢查未標記讀取是否寫入競爭,會持續掃描內核的主要分支,在訪問的內存位置上設置觀察點,挑出導致數據爭用的數據,并將其報告給內核日志。

●用“軟觀察點”查找競爭

〇設置觀察點和失速通道;

〇如果監測點已經存在,那么競爭檢查將照常進行;

〇如果值改變了--> 競爭;

〇失速通道隨機延遲,增加觀察競爭狀態的機會;

默認值:任務[1,80]us,中斷[1,20]us。

●為所有檢測內存訪問設置觀察點

〇 注釋標記訪問,僅用于檢查非標記訪問是否存在觀察點;

KCSAN從不在標記的訪問上設置觀察點;

如果對并發訪問的變量的所有訪問都正確地標記了,KCSAN將永遠不會觸發觀察點,因此永遠不會報告訪問。

●采樣: 周期性建立觀察點

〇默認值:平均2000次訪問。

3.2 KCSAN軟觀測點

基于地址頁索引

〇可以溢出到相鄰槽。

〇使用索引確保報告元數據給匹配的生產者/消費者。

具有靈活、可縮放的特點,以數組的形式存放。

59e492a0-b463-11ed-bfe3-dac502259ad0.png

代碼片段如下:

入口函數check_access,在check_access數據地址、長度、類型;在check_access函數執行find_watchpoint判斷。需要檢測的ptr已經插樁編譯。

5a0b8e8c-b463-11ed-bfe3-dac502259ad0.png

3.3 KCSAN 運行流程

進入check_access函數,格式描述包含數據指針、長度、讀寫類型;

確認是否需要觀測,需要滿足至少一個寫操作且為普通訪問;

如果判定需要觀測,加入觀察列表;

延時一段時長,查看是否有訪問、變更數據等情況;如果有,則生產數據表,并打印數據到控制臺;如果沒有則退出;

在步驟3,如果未發現合適的觀測點,則該數據運行流程退出

5a1fad18-b463-11ed-bfe3-dac502259ad0.png

3.4 ASSERT檢測機制

KCSAN提供有一種斷言檢測機制,檢查在數據競爭模型以外的情況下提供競爭檢測;

5a442b5c-b463-11ed-bfe3-dac502259ad0.png5a5947e4-b463-11ed-bfe3-dac502259ad0.png

3.4.1 ASSERT集合

5a671eaa-b463-11ed-bfe3-dac502259ad0.png

3.5 KCSAN特點

5a792366-b463-11ed-bfe3-dac502259ad0.png

四、測試套件

4.1 KUNIT測試模型

KCSAN提供KUNIT的支持

創建多個access_thread線程用于測試用例函數的調用接口

掛接console跟蹤點,該跟蹤點監控串口輸出數據;如果有數據競爭報錯,可以捕獲并判斷;

啟動測試用例接口函數,實現測試函數的掛接并提供超時判定(缺省執行500毫秒);

在執行超時以后,判斷輸出是否與預想一致;并給出判斷結果。

5a977a00-b463-11ed-bfe3-dac502259ad0.png

4.2 測試條件

1. 配置CONFIG_KCSAN_KUNIT_TEST=y使能KUNIT

2. KCSAN功能正常開啟

4.3 測試環境

QEMU Linux 6.11 core 4 GCC11

測試覆蓋:

1. 不同條件下的數據競爭data_race

5ab9ae04-b463-11ed-bfe3-dac502259ad0.png

2.斷言函數數據競爭assert_exclusive_x

5ad080c0-b463-11ed-bfe3-dac502259ad0.png

3. barrier/lock判定

5ae3eeda-b463-11ed-bfe3-dac502259ad0.png

五、過程與案例分析

5.1 KCSAN啟動過程

1. 在完成KCSAN配置后,系統啟動時有“kcsan:enable early”打印:

5b0313aa-b463-11ed-bfe3-dac502259ad0.png

2.后臺會實時進行觀測點的監控與比對,如果比中會有”BUG:KCSAN”控制臺打印來描述數據競爭的信息;這些信息包括調用函數、數據競爭地址、CPU號、進程號等;可在不同的測試場景進行壓力測試;

5b11b540-b463-11ed-bfe3-dac502259ad0.png

3.在運行過程中,查看“KCSAN kernel debug”節點查看當前的狀態,這些狀態信息包括觀測點、數據競爭、ASSERT報錯等一系列信息;

5b223af0-b463-11ed-bfe3-dac502259ad0.png

5.2 案例一

描述:IGMP協議timer超時與事件函數在讀寫mr_ifc_count變量的數據競爭

net: igmp: fix data-race in igmp_ifc_timer_expire()

5b4449d8-b463-11ed-bfe3-dac502259ad0.png

解決辦法:

1. igmp_ifc_event/ igmp_ifc_timer_expire函數在讀寫mr_ifc_count變量存在數據競爭,需要使用LLKM 訪問保護;

2. 修改調用mr_ifc_count點,使用READ_ONCE/WRITE_ONCE保證編譯器的一致性;

3. mr_ifc_count和in_dev->mr_ifc_count值不等時啟動重傳機制;

5b5f548a-b463-11ed-bfe3-dac502259ad0.png

5.3 案例二

描述:在taskstats_exit()中分配和測試任務統計時,會有一個競爭在讀寫sig->stats

When assiging and testing taskstats in taskstats_exit() there's a race when writing and reading sig->stats

5b6e8482-b463-11ed-bfe3-dac502259ad0.png

解決辦法:

1. 結構體成員sig->stats存在數據競爭,需要使用LLKM訪問保護;

2. smp_load_acquire/smp_store_release函數解決CPU數據同步和編譯器同步問題,適用于同一個函數內部的數據競爭;

5b854ef6-b463-11ed-bfe3-dac502259ad0.png

六、總結

本文從工作原理、運行流程、測試方式等多個方面介紹了KCSAN,旨在讓讀者能夠對KCSAN運行有一個直觀的認識,利用KCSAN在產品中解決一些數據競爭問題;數據競爭是一個復雜問題,用KCSAN能幫助大家快速找到數據競爭問題,進而尋找方法解決或規避,本文更多傳遞是一種發現和解決此類問題的思路。

消殺器技術在不斷地迭代和更新,也讓大家多一份探尋世界、改變世界的機會;借此機會,站在巨人的肩膀上,讓大家看得更遠、走得更遠,愿大家都有一個美好的明天。






審核編輯:劉清

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

    關注

    180

    文章

    7608

    瀏覽量

    137071
  • 編譯器
    +關注

    關注

    1

    文章

    1635

    瀏覽量

    49169
  • LINUX內核
    +關注

    關注

    1

    文章

    316

    瀏覽量

    21672
  • rcu
    rcu
    +關注

    關注

    0

    文章

    21

    瀏覽量

    5455

原文標題:內核并發消殺器(KCSAN)技術分析

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    零傳播、零擴散,EHIGH恒高UWB技術疫情防控系統!

    。UWB技術如何做好密集區域預防措施?人員密集區熱力圖分析:對于人員較為密集、流動性大的區域進行重點以及加強通風換氣和垃圾處理,最大限度切斷一切飛沫傳播及接觸式傳播的可能。 UWB
    發表于 02-21 19:36

    Linux環境并發服務設計技術研究

    講述并發服務設計的主要技術,包括多進程服務、多線程服務和I/ O 復用服務,同時對以上服
    發表于 04-24 10:02 ?16次下載

    內核并發通信的研究

    提出了一種內核并發消息通信機制。該機制采用對象傳送協議和動態線程池技術,并通過會話控制完成數據的收發過程,將線程池設計為二級阻塞隊列來暫緩線程的撤銷過程,
    發表于 05-26 21:08 ?6次下載

    雷達回程誤差分析隙設計

    本文提出一種采用電技術減小回程誤差的方法。通過對回程誤差進行分析,從結構和電路兩方面分別介紹減小回程誤差的措施,并結合船載雷達設備重點對電
    發表于 04-28 10:46 ?38次下載
    雷達回程誤差<b class='flag-5'>分析</b>及<b class='flag-5'>消</b>隙設計

    并發程序動態分析基礎技術綜述

    并發錯誤難觸發、難調試、難檢測.為應對這一挑戰,已有動態程序分析技術通過觀測或控制并發程序執 行實現其質量保障.由于并發程序不確定性主要來自
    發表于 12-30 17:37 ?0次下載

    音圈馬達無人機助力防疫工作

    音圈馬達無人機助力防疫工作。近段時間,由于防控需要,很多村莊都是實施人員管控和工作。在延慶區舊縣鎮古城村,一臺黑色的“大家伙”蓄勢待飛,它足有2立方米大小,飛行平臺上裝載著30
    發表于 08-19 14:28 ?357次閱讀

    類產品介紹 冰箱殺菌除味設計說明

    在2020年新冠肺炎疫情影響下,全國醫療機構及其他公共場所需大范圍、長時間、高頻次消毒,產品需求量驟升以及群眾的居家消毒意識提高,催生了對消產品的巨大需求。
    的頭像 發表于 11-29 14:54 ?2275次閱讀
    <b class='flag-5'>消</b><b class='flag-5'>殺</b>類產品介紹 冰箱殺菌除味<b class='flag-5'>器</b>設計說明

    技術技術的區別

    ,又叫免殺毒技術,是反病毒,反間諜的對立面,是一種能使病毒或木馬免于被殺毒軟件查殺的軟件。
    的頭像 發表于 07-08 10:49 ?1615次閱讀

    技術層面分析微機的工作原理

    技術層面分析微機的工作原理,由于電力系統容量的擴大,高壓電纜使用增加,同步電機使用,電力變壓等感性負載增加。使系統的容性負載和感性
    的頭像 發表于 11-15 10:20 ?1032次閱讀

    鯨啟智能霧化殺機器人,助力防疫工作

    國慶后,國內疫情形勢嚴峻,疫情防控工作更顯得尤為重要,很多企業、公共場所把目光聚焦在了智能機器人身上,中國智能殺機器人的應用場景也更加多樣化。 比起安排工作人員進行,使用消毒機器人會更加
    的頭像 發表于 05-11 11:37 ?434次閱讀

    廣和通5G模組助推5G數字小坦克“霸氣出街”、科技抗疫

    、智能小坦克、AR眼鏡和5G邊緣計算盒相結合,利用信息“云邊端”三步處理,實現智能化、安全化、可控化的數字化。?5G云防疫小坦克展現“神威”得益于5G低時延大寬帶的特性,5G
    的頭像 發表于 03-25 16:58 ?480次閱讀
    廣和通5G模組助推5G數字<b class='flag-5'>消</b><b class='flag-5'>殺</b>小坦克“霸氣出街”、科技抗疫

    病毒怎樣才能更全面?移動消毒站組網解決方案

    人群中的病毒做工作。然而,對大范圍區域進行全面殺毒工作,耗時大,耗資大,自然是不能成為常態,在這種情況下,基于工業級路由,快速搭建無線移動消毒站則顯得十分重
    的頭像 發表于 09-19 10:07 ?452次閱讀
    病毒<b class='flag-5'>消</b><b class='flag-5'>殺</b>怎樣才能更全面?移動消毒站組網解決方案

    微機諧的使用條件

    的使用條件。 首先,我們來了解一下什么是微機諧。微機諧是一種基于數字信號處理的電力諧波處理技術,主要通過實時監測和分析電力信號的頻譜,識別并分離出諧波成分,然后通過濾波
    的頭像 發表于 07-25 09:11 ?542次閱讀

    類產品中的冰箱殺菌除味設計

    在2020年新冠肺炎疫情影響下,全國醫療機構及其他公共場所需大范圍、長時間、高頻次消毒,產品需求量驟升以及群眾的居家消毒意識提高,催生了對消產品的巨大需求。
    的頭像 發表于 11-29 17:03 ?508次閱讀
    <b class='flag-5'>消</b><b class='flag-5'>殺</b>類產品中的冰箱殺菌除味<b class='flag-5'>器</b>設計

    廣明源的SafeGlo感控解決方案市場潛力巨大

    8月29日,2023深圳國際醫用消毒及感控設備展覽會在深圳國際會展中心正式拉開帷幕。在這場為期3天的消毒領域盛會中,廣明源將全面展示光科技在感控領域中的創新應用,共同促進全球消毒產業穩步發展
    的頭像 發表于 08-30 09:04 ?752次閱讀
    主站蜘蛛池模板: 国语自产精品一区在线视频观看 | 国产婷婷综合在线视频中文| 入室强伦女教师被学生| 高h超辣bl文| 亚洲精品123区| 美女脱三角裤| 纯肉高H啪短文合集| 亚洲qvod图片区电影| 久久免费资源福利资源站| 99精品视频免费在线观看| 日日AV夜夜添久久奶无码| 国产一级毛片在线| 91亚洲精品| 午夜福利理论片高清在线| 久久影院午夜理论片无码| jizzhd中国| 亚洲精品久久久午夜麻豆| 嫩草www视频在线观看高清| 国产成人a v在线影院| 伊人久久精品午夜| 乳欲性高清在线| 久久亚洲精品中文字幕60分钟| 成人伦理影院| 一边亲着一面膜下奶韩剧免费| 秋霞电影伦网理最新在线看片| 国产在线亚洲精品观| 99精品国产第一福利网站| 香蕉人人超人人超碰超国产| 麻豆精品乱码WWW久久密| 国产精品嫩草影院一区二区三区| 中文字幕在线不卡日本v二区 | 99久久伊人一区二区yy5o99| 手机在线国产视频| 美女gif趴跪式动态图| 国产精品系列在线观看| 99re6久久在热线视频| 亚洲第一区欧美日韩精品| 欧美另类jizzhd| 快穿女主有名器的H纯肉黄暴拉文 快插我我好湿啊公交车上做 | 国产呻吟久久久久久久92| a级老头和老太xxxx|