Linux2.6對(duì)新型CPU的支持
更新時(shí)間:2006年10月24日 00:00:00 作者:
文章分析了在 Linux 2.6 中引入的對(duì) Intel CPU 快速系統(tǒng)調(diào)用指令 SYSENTER/SYSEXIT 支持的實(shí)現(xiàn)。Linux 驅(qū)動(dòng)及內(nèi)核開發(fā)者通過(guò)了解快速系統(tǒng)調(diào)用指令的機(jī)制,可以在自己的代碼中通過(guò)利用這一機(jī)制,提高系統(tǒng)性能,并避開由快速系統(tǒng)調(diào)用方式帶來(lái)的一些局限(如系統(tǒng)調(diào)用中嵌套系統(tǒng)調(diào)用)。 前言 在 Linux 2.4 內(nèi)核中,用戶態(tài) Ring3 代碼請(qǐng)求內(nèi)核態(tài) Ring0 代碼完成某些功能是通過(guò)系統(tǒng)調(diào)用完成的,而系統(tǒng)調(diào)用的是通過(guò)軟中斷指令(int 0x80)實(shí)現(xiàn)的。在 x86 保護(hù)模式中,處理 INT 中斷指令時(shí),CPU 首先從中斷描述表 IDT 取出對(duì)應(yīng)的門描述符,判斷門描述符的種類,然后檢查門描述符的級(jí)別 DPL 和 INT 指令調(diào)用者的級(jí)別 CPL,當(dāng) CPL<=DPL 也就是說(shuō) INT 調(diào)用者級(jí)別高于描述符指定級(jí)別時(shí),才能成功調(diào)用,最后再根據(jù)描述符的內(nèi)容,進(jìn)行壓棧、跳轉(zhuǎn)、權(quán)限級(jí)別提升。內(nèi)核代碼執(zhí)行完畢之后,調(diào)用 IRET 指令返回,IRET 指令恢復(fù)用戶棧,并跳轉(zhuǎn)會(huì)低級(jí)別的代碼。 其實(shí),在發(fā)生系統(tǒng)調(diào)用,由 Ring3 進(jìn)入 Ring0 的這個(gè)過(guò)程浪費(fèi)了不少的 CPU 周期,例如,系統(tǒng)調(diào)用必然需要由 Ring3 進(jìn)入 Ring0(由內(nèi)核調(diào)用 INT 指令的方式除外,這多半屬于 Hacker 的內(nèi)核模塊所為),權(quán)限提升之前和之后的級(jí)別是固定的,CPL 肯定是 3,而 INT 80 的 DPL 肯定也是 3,這樣 CPU 檢查門描述符的 DPL 和調(diào)用者的 CPL 就是完全沒必要。正是由于如此,Intel x86 CPU 從 PII 300(Family 6,Model 3,Stepping 3)之后,開始支持新的系統(tǒng)調(diào)用指令 sysenter/sysexit。sysenter 指令用于由 Ring3 進(jìn)入 Ring0,SYSEXIT 指令用于由 Ring0 返回 Ring3。由于沒有特權(quán)級(jí)別檢查的處理,也沒有壓棧的操作,所以執(zhí)行速度比 INT n/IRET 快了不少。 不同系統(tǒng)調(diào)用方式的性能比較: 下面是一些來(lái)自互聯(lián)網(wǎng)的有關(guān) sysenter/sysexit 指令和 INT n/IRET 指令在 Intel Pentium CPU 上的性能對(duì)比:
1:系統(tǒng)調(diào)用性能測(cè)試測(cè)試硬件:
Intel? Pentium? III CPU, 450 MHz Processor Family: 6 Model: 7 Stepping: 2 用戶模式花費(fèi)的時(shí)間核心模式花費(fèi)的時(shí)間
基于 sysenter/sysexit 指令的系統(tǒng)調(diào)用9.833 microseconds6.833 microseconds
基于中斷 INT n 指令的系統(tǒng)調(diào)用 17.500 microseconds 7.000 microseconds 2:各種 CPU 上 INT 0x80 和 SYSENTER 執(zhí)行速度的比較 CPU Int0x80 sysenter
Athlon XP 1600+ 277 169
800MHz mode 1 athlon279 170
2.8GHz p4 northwood ht1152442 上述數(shù)據(jù)為對(duì) 100000 次 getppid() 系統(tǒng)調(diào)用所花費(fèi)的 CPU 時(shí)鐘周期取的平均值 自這種技術(shù)推出之后,人們一直在考慮在 Linux 中加入對(duì)這種指令的支持,在 Kernel.org 的郵件列表中,主題為 "Intel P6 vs P7 system call performance" 的大量郵件討論了采用這種指令的必要性,郵件中列舉的理由主要是 Intel 在 Pentium 4 的設(shè)計(jì)上存在問(wèn)題,造成 Pentium 4 使用中斷方式執(zhí)行的系統(tǒng)調(diào)用比 Pentium 3 以及 AMD Athlon 所耗費(fèi)的 CPU 時(shí)鐘周期多上 5~10 倍。因此,在 Pentium 4 平臺(tái)上,通過(guò) sysenter/sysexit 指令來(lái)執(zhí)行系統(tǒng)調(diào)用已經(jīng)是刻不容緩的需求。
您可能感興趣的文章:
- linux查看cpu是否支持64位的方法
- linux php-cgi.exe占用cpu 100%的一次排障之旅
- Linux shell腳本實(shí)現(xiàn)CPU預(yù)警
- Linux中使用Shell腳本查看Java線程的CPU使用情況
- linux vps服務(wù)器進(jìn)程kswapd0與events/0消耗大量CPU的問(wèn)題
- linux使用管道命令執(zhí)行ps獲取cpu與內(nèi)存占用率
- linux系統(tǒng)使用python獲取cpu信息腳本分享
- 使用python獲取CPU和內(nèi)存信息的思路與實(shí)現(xiàn)(linux系統(tǒng))
- Linux 查看cpu 信息的命令及簡(jiǎn)單實(shí)例
相關(guān)文章
linux入門教程 第5章:網(wǎng)絡(luò)應(yīng)用
linux入門教程 第5章:網(wǎng)絡(luò)應(yīng)用...2006-10-10
簡(jiǎn)述Linux下Samba服務(wù)的安裝與配置
組成Samba運(yùn)行的有兩個(gè)服務(wù),一個(gè)是SMB,另一個(gè)是NMB;接下來(lái)通過(guò)本文重點(diǎn)給大家介紹Linux下Samba服務(wù)的安裝與配置方法,需要的的朋友參考下吧2017-05-05
mac 系統(tǒng)下使用 chmod 命令修改文件權(quán)限
這篇文章主要介紹了mac 系統(tǒng)下使用 chmod 命令修改文件權(quán)限的相關(guān)資料,需要的朋友可以參考下2017-10-10
學(xué)習(xí)手冊(cè)--Linux基礎(chǔ)篇
Linux是一個(gè)非常優(yōu)秀的操作系統(tǒng),與MS-WINDOWS相比具有可靠、 穩(wěn)定、速度快等優(yōu)點(diǎn),且擁有豐富的根據(jù)UNIX版本改進(jìn)的強(qiáng)大功能。下面,作為一個(gè)典型的DOS 和WINDOWS用戶,讓我們一起來(lái)學(xué)習(xí)Linux的一些主要命令2021-07-07
淺談:什么是數(shù)據(jù)驅(qū)動(dòng)編程的詳解
本篇文章是對(duì)什么是數(shù)據(jù)驅(qū)動(dòng)編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

