chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核中的jump label原理與邏輯及運(yùn)行過(guò)程

Linux閱碼場(chǎng) ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:dog250 ? 2021-03-25 14:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

jump label機(jī)制進(jìn)入Linux內(nèi)核已經(jīng)很多很多年了,它的目的是 消除分支。 為了達(dá)到這個(gè)目的,jump label的手段是 修改分支處的代碼。

~把代碼當(dāng)做數(shù)據(jù),代碼和數(shù)據(jù)在馮諾伊曼計(jì)算機(jī)中得到了統(tǒng)一~

本質(zhì)上,jump label作用于下面的邏輯:

e0bbcc26-8cdd-11eb-8b86-12bb97331649.png

靜態(tài)拆分成了下面的兩個(gè)邏輯,其一是:

e0e058fc-8cdd-11eb-8b86-12bb97331649.png

或者,其二是:

e12ea246-8cdd-11eb-8b86-12bb97331649.png

但二者不能同時(shí)共存。顯然,這破壞了通用性和靈活性,帶來(lái)了高效!

這相當(dāng)于一個(gè)硬熔斷,具體詳情參見(jiàn):

本文來(lái)一點(diǎn)可以看得見(jiàn)的東西,演示一下真實(shí)的jump label & static key。

先看下面的C代碼:

e1519dc8-8cdd-11eb-8b86-12bb97331649.png

很簡(jiǎn)單的代碼,也很正確。然而, 如果main函數(shù)是一個(gè)高頻調(diào)用的函數(shù),并且在E1,E2是不隨著代碼邏輯而發(fā)生變化,僅僅參數(shù)設(shè)定的情況下, 那么if語(yǔ)句盡量消除以消除不必要的分支預(yù)測(cè),而這正是jump label的用武之地!

我們下面用jump label機(jī)制來(lái)重寫(xiě)上面的代碼,請(qǐng)看:

e18ee192-8cdd-11eb-8b86-12bb97331649.png

e1e3bc44-8cdd-11eb-8b86-12bb97331649.png

e22b2692-8cdd-11eb-8b86-12bb97331649.png

e26cc53e-8cdd-11eb-8b86-12bb97331649.png

e2a16848-8cdd-11eb-8b86-12bb97331649.png

定義JUMP_LABEL宏編譯之,看看效果:

e2c8bb50-8cdd-11eb-8b86-12bb97331649.png

如何做到的呢?static_branch_true內(nèi)聯(lián)函數(shù)是如何判斷true or false的呢?

事實(shí)上,jump label邏輯修改了代碼段,取消了條件判斷!這一切都是在update_branch中發(fā)生的。我們看下update_branch調(diào)用之前,main函數(shù)的匯編碼:

e31df26e-8cdd-11eb-8b86-12bb97331649.png

在執(zhí)行了update_branch之后,main函數(shù)發(fā)生了變化:

e338ed80-8cdd-11eb-8b86-12bb97331649.png

e39d2124-8cdd-11eb-8b86-12bb97331649.png

看樣子就是這么回事!

之所以這件事可以發(fā)生得如此簡(jiǎn)單,多虧了一個(gè)新的section,即__jump_table,我們通過(guò)objdump看看__jump_table的內(nèi)容:

e3e7c74c-8cdd-11eb-8b86-12bb97331649.png

通過(guò)jump_label_demo.c的struct entry結(jié)構(gòu)體,我們直到這個(gè)section中包含了多個(gè)3元組,包含3個(gè)字段:

需要修改的代碼地址。

需要jmp到的代碼地址。

匹配健。

我們看67064000 00000000按照小端就是0x400667,它就是需要修改的代碼地址,而6e064000 00000000按照小端則是0x40066e:

e41fa0e0-8cdd-11eb-8b86-12bb97331649.png

看來(lái),這個(gè)__jump_table的item會(huì)將jmpq 40066c修改為jmpq 40066e,從而實(shí)現(xiàn)了 永久靜態(tài)分支。

最后,__jump_table的內(nèi)容就是在每一個(gè)內(nèi)聯(lián)的static_branch_true函數(shù)中被填充的,該參數(shù)的參數(shù)是一個(gè)key,它指示了branch entry三元組中的最后一個(gè)字段。

static_branch_true函數(shù)的內(nèi)聯(lián)非常重要,它實(shí)現(xiàn)了將branch entry三元組數(shù)據(jù)直接插入到__jump_table section,而不是共享同一個(gè)函數(shù)體。

總之,如果你看代碼還是覺(jué)得別扭,手敲一遍我上面的示例程序,就理解了,內(nèi)核里面的也就這么回事,總結(jié)一句話:

依靠運(yùn)行時(shí)修改代碼而不是依靠狀態(tài)數(shù)據(jù)來(lái)控制執(zhí)行流。

我不知道這對(duì)于所謂的 通用計(jì)算機(jī)程序設(shè)計(jì) 是不是反其道而行之,但在效果上,它確實(shí)是一匹好馬。不禁感嘆, 硬編碼讀起來(lái)是丑陋的,但執(zhí)行起來(lái)卻是高效的!

靈活性換高效率,得不償失,我是這樣以為。jump label的本質(zhì)在于, 將同時(shí)刻存在的一套代碼沿著時(shí)間線在可預(yù)期的固定時(shí)間點(diǎn)上分割成邏輯相反的兩套代碼。

硬件性能的提升將會(huì)證明jump label就是個(gè)笑話。

說(shuō)兩句好話,Linux內(nèi)核參數(shù),sysctl變量基本上就可以通過(guò)jump label來(lái)運(yùn)作,從而替代if判斷。

原文鏈接:https://blog.csdn.net/dog250/article/details/106715700
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7318

    瀏覽量

    94127
  • 邏輯
    +關(guān)注

    關(guān)注

    2

    文章

    834

    瀏覽量

    30068
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4947

    瀏覽量

    73291
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    319

    瀏覽量

    23076

原文標(biāo)題:Linux內(nèi)核jump label與static key的原理與示例

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux-RT特點(diǎn)及簡(jiǎn)單應(yīng)用

    Scheduling),允許內(nèi)核中斷正在執(zhí)行的任務(wù)以執(zhí)行更高優(yōu)先級(jí)的任務(wù)。這可以降低任務(wù)響應(yīng)時(shí)間,提高實(shí)時(shí)性能。 內(nèi)核鎖優(yōu)化:Linux-RT對(duì)內(nèi)核
    發(fā)表于 12-05 07:37

    Linux內(nèi)核模塊的加載機(jī)制

    。Linux內(nèi)核模塊的加載過(guò)程主要包含了ELF解析、動(dòng)態(tài)鏈接、安全驗(yàn)證和資源管理技術(shù)。其核心步驟包括:權(quán)限檢查→ELF解析→符號(hào)重定位→依賴加載→初始化執(zhí)行。
    發(fā)表于 11-25 06:59

    Linux內(nèi)核printk日志級(jí)別全解析:從參數(shù)解讀到實(shí)操配置

    一、開(kāi)篇:一個(gè)命令引出的核心問(wèn)題 在?Linux?終端執(zhí)行?cat /proc/sys/kernel/printk,你可能會(huì)看到這樣的輸出: 這串?dāng)?shù)字不是隨機(jī)的,而是內(nèi)核日志系統(tǒng)的“核心配置開(kāi)關(guān)
    的頭像 發(fā)表于 11-20 15:54 ?1331次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>printk日志級(jí)別全解析:從參數(shù)解讀到實(shí)操配置

    探索操作系統(tǒng)底層的關(guān)鍵接口

      在linux,將程序的運(yùn)行空間分為內(nèi)核空間與用戶空間(內(nèi)核態(tài)和用戶態(tài)),在邏輯上它們之間是
    的頭像 發(fā)表于 11-08 12:42 ?608次閱讀

    deepin亮相2025國(guó)Linux內(nèi)核開(kāi)發(fā)者大會(huì)

    11 月 1 日,第二十屆中國(guó) Linux 內(nèi)核開(kāi)發(fā)者大會(huì)(CLK)在深圳舉辦。CLK 作為國(guó)內(nèi) Linux 內(nèi)核領(lǐng)域極具影響力的峰會(huì),由清華大學(xué)、Intel、華為、阿里云、富士通南大
    的頭像 發(fā)表于 11-05 17:59 ?654次閱讀

    使用rk3568開(kāi)發(fā)板,核0\\1\\3運(yùn)行linux,核2運(yùn)行hal,在核0怎么關(guān)閉核2

    使用rk3568開(kāi)發(fā)板,核0\\\\1\\\\3運(yùn)行linux,核2運(yùn)行hal,想在內(nèi)核通過(guò)smc指令完成核0對(duì)核2得啟動(dòng)和關(guān)閉,文件系統(tǒng)
    發(fā)表于 10-27 10:09

    如何在裸機(jī)環(huán)境運(yùn)行KleidiAI微內(nèi)核

    ,對(duì) KleidiAI 進(jìn)行了簡(jiǎn)要概述,并附有相關(guān)指南鏈接,其中詳細(xì)說(shuō)明了在 Linux 環(huán)境運(yùn)行 KleidiAI 矩陣乘法 (matmul) 微內(nèi)核的分步操作,這份指南內(nèi)容詳實(shí)且
    的頭像 發(fā)表于 08-08 15:16 ?3647次閱讀
    如何在裸機(jī)環(huán)境<b class='flag-5'>中</b><b class='flag-5'>運(yùn)行</b>KleidiAI微<b class='flag-5'>內(nèi)核</b>

    Linux內(nèi)核參數(shù)調(diào)優(yōu)方案

    在高并發(fā)微服務(wù)環(huán)境,網(wǎng)絡(luò)性能往往成為K8s集群的瓶頸。本文將深入探討如何通過(guò)精細(xì)化的Linux內(nèi)核參數(shù)調(diào)優(yōu),讓你的K8s節(jié)點(diǎn)網(wǎng)絡(luò)性能提升30%以上。
    的頭像 發(fā)表于 08-06 17:50 ?750次閱讀

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗(yàn)證這些參數(shù)是否生效同樣關(guān)鍵。
    的頭像 發(fā)表于 05-29 17:40 ?838次閱讀

    揭秘,瑞芯微全系擁抱Linux 6.1內(nèi)核的底層邏輯

    近期,瑞芯微(Rockchip)基本完成了旗下產(chǎn)品Linux6.1BSP內(nèi)核更新,引發(fā)了不小的行業(yè)熱議。除了低端RK3506依舊使用Buildroot構(gòu)建系統(tǒng)外,RK3588、RK3576
    的頭像 發(fā)表于 05-16 08:31 ?1134次閱讀
    揭秘,瑞芯微全系擁抱<b class='flag-5'>Linux</b> 6.1<b class='flag-5'>內(nèi)核</b>的底層<b class='flag-5'>邏輯</b>

    Linux內(nèi)核編譯失?。恳苿?dòng)硬盤和虛擬機(jī)的那些事兒

    Linux開(kāi)發(fā),編譯內(nèi)核是一項(xiàng)常見(jiàn)任務(wù),但不少開(kāi)發(fā)者在移動(dòng)硬盤或虛擬機(jī)環(huán)境下嘗試時(shí)會(huì)遭遇失敗。本文將簡(jiǎn)要探討這些問(wèn)題的成因,并介紹一些虛擬機(jī)使用技巧,幫助大家更好地應(yīng)對(duì)相關(guān)問(wèn)題。在移動(dòng)硬盤里編譯
    的頭像 發(fā)表于 04-11 11:36 ?773次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>編譯失敗?移動(dòng)硬盤和虛擬機(jī)的那些事兒

    樹(shù)莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測(cè)試

    使用的是raspberrypi/linux倉(cāng)庫(kù)的rpi-4.19.y-rt分支。同樣,在測(cè)試,我使用了實(shí)時(shí)Linux項(xiàng)目中的cyclictest程序。Cyclictest程序
    的頭像 發(fā)表于 03-25 09:39 ?678次閱讀
    樹(shù)莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測(cè)試

    如何降低顛轉(zhuǎn)儀在運(yùn)行過(guò)程中的能耗

    要降低顛轉(zhuǎn)儀在運(yùn)行過(guò)程中的能耗,可從電機(jī)選型、傳動(dòng)系統(tǒng)優(yōu)化以及控制系統(tǒng)設(shè)計(jì)這幾個(gè)關(guān)鍵維度入手。 在電機(jī)選型方面,永磁同步電機(jī)是極具優(yōu)勢(shì)的選擇。相較于普通異步電機(jī),永磁同步電機(jī)的效率明顯更高。這主要
    的頭像 發(fā)表于 02-13 09:26 ?627次閱讀
    如何降低顛轉(zhuǎn)儀在<b class='flag-5'>運(yùn)行</b><b class='flag-5'>過(guò)程中</b>的能耗

    基于OpenSBI的linux nommu實(shí)現(xiàn)

    :SupervisorSoftwareBinaryInterface軟件二進(jìn)制接口Linux內(nèi)核工作在S模式下時(shí),不能直接訪問(wèn)機(jī)器定時(shí)器。而系統(tǒng)的運(yùn)行依賴于定時(shí)器,為了解決這個(gè)問(wèn)
    的頭像 發(fā)表于 02-08 13:43 ?1099次閱讀
    基于OpenSBI的<b class='flag-5'>linux</b> nommu實(shí)現(xiàn)

    騰訊云內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug

    Maintainer深感棘手的關(guān)鍵內(nèi)核bug。 這一改進(jìn)方案經(jīng)過(guò)嚴(yán)格評(píng)審和測(cè)試,最終被合并進(jìn)入后續(xù)的Linux LTS(長(zhǎng)期支持)版本,標(biāo)志著騰訊云在操作系統(tǒng)內(nèi)核領(lǐng)域的技術(shù)實(shí)力得到了
    的頭像 發(fā)表于 12-31 10:58 ?941次閱讀