Linux服務(wù)器性能調(diào)整教學(xué)提綱_第1頁
Linux服務(wù)器性能調(diào)整教學(xué)提綱_第2頁
Linux服務(wù)器性能調(diào)整教學(xué)提綱_第3頁
Linux服務(wù)器性能調(diào)整教學(xué)提綱_第4頁
Linux服務(wù)器性能調(diào)整教學(xué)提綱_第5頁
已閱讀5頁,還剩145頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Good is good, but better carries it.精益求精,善益求善。Linux服務(wù)器性能調(diào)整Linux服務(wù)器性能調(diào)整(美)SandraK.JohnsonGerritHuizengaBadariPulavarty著韓智文譯北京AuthorizedtranslationfromtheEnglishlanguageedition,entitledPerformanceTuningforLinuxServers,9780137136285bySandraK.Johnson,GerritHuizenga,BadariPulavarty,publishedbyPearsonEduc

2、ation,Inc,publishingasIBMPress,Copyright2005.Allrightsreserved.Nopartofthisbookmaybereproducedortransmittedinanyformorbyanymeans,electronicormechanical,includingphotocopying,recordingorbyanyinformationstorageretrievalsystem,withoutpermissionfromPearsonEducation,Inc.CHINESESIMPLIFIEDlanguageeditionpu

3、blishedbyPEARSONEDUCATIONASIALTD.,andTSINGHUAUNIVERSITYPRESSCopyright2009.北京市版權(quán)局著作權(quán)合同登記號圖字:01-本書封面貼有PearsonEducation(培生教育出版集團(tuán))防偽標(biāo)簽,無標(biāo)簽者不得銷售。版權(quán)所有,侵權(quán)必究。侵權(quán)舉報電話:010-6278298913701121933圖書在版編目(CIP)數(shù)據(jù)Linux服務(wù)器性能調(diào)整/(美)約翰遜(Johnson,S.K.),(美)威曾格(HuizengaG.),(美)普拉瓦提(Pulavarty,B.)著;韓智文譯.北京:清華大學(xué)出版社,2009.8書名原文:Perf

4、ormanceTuningforLinuxServersISBN978-7-302-20739-9I.L.約威普韓.Linux操作系統(tǒng).TP316.89中國版本圖書館CIP數(shù)據(jù)核字(2009)第111077號責(zé)任編輯:王軍于平裝幀設(shè)計:孔祥豐責(zé)任校對:成鳳進(jìn)責(zé)任印制:出版發(fā)行:清華大學(xué)出版社地址:北京清華大學(xué)學(xué)研大廈A座郵編:100084社總機(jī)購稿與讀者服務(wù)c-service質(zhì)量反饋zhiliang印刷者:裝訂者:經(jīng)銷:全國新華書店開本:185260印張:27.5字?jǐn)?shù):669千字版次

5、:2009年8月第1版印次:2009年8月第1次印刷印數(shù):14000定價:58.00元本書如存在文字不清、漏印、缺頁、倒頁、脫頁等印裝質(zhì)量問題,請與清華大學(xué)出版社出版部聯(lián)系調(diào)換。聯(lián)系電話3103產(chǎn)品編號:主要內(nèi)容:本書是優(yōu)化Linux系統(tǒng)和應(yīng)用程序性能的必備指南。從華爾街到好萊塢,在Linux操作系統(tǒng)上運行著世界上大量最重要的商業(yè)系統(tǒng)。Linux的性能現(xiàn)在會對整個企業(yè)產(chǎn)生影響。在本書中,IBM公司經(jīng)驗最豐富的Linux性能專家團(tuán)隊將介紹如何發(fā)現(xiàn)瓶頸、測量性能并確定有效的優(yōu)化措施。本書不僅涉及到內(nèi)核調(diào)整,還展示對運行于Linux之上的真實應(yīng)用程序和數(shù)據(jù)庫的端到端性能加

6、以優(yōu)化的技術(shù)。在全書中,作者給出了建立在當(dāng)今最流行的企業(yè)級Linux平臺基于Intel的RedHatEnterpriseLinux以及NovellSUSELinuxEnterpriseServer之上的真實示例。這些示例簡單明晰,易改編用于當(dāng)代的各種Linux環(huán)境。通過本書,將可以學(xué)習(xí)以下內(nèi)容:安裝和配置Linux以便達(dá)到最高性能為用戶的Linux環(huán)境評估并選擇適當(dāng)?shù)挠布w系結(jié)構(gòu)理解Linux2.4至2.6版本的內(nèi)核:組件、性能問題以及優(yōu)化可能性掌握Linux性能調(diào)整的核心原則和策略利用免費的開源工具進(jìn)行測量、監(jiān)控、系統(tǒng)跟蹤以及基準(zhǔn)測試對性能數(shù)據(jù)加以解讀,以便分析Linux服務(wù)器的真實行為優(yōu)化

7、Linux系統(tǒng)的調(diào)度器、內(nèi)存、I/O、文件系統(tǒng)和網(wǎng)絡(luò)對運行商業(yè)工作負(fù)荷的Web、文件、數(shù)據(jù)庫,及應(yīng)用服務(wù)器進(jìn)行調(diào)優(yōu)預(yù)測調(diào)整參數(shù)或配置信息的變化所產(chǎn)生的影響調(diào)整Linux代碼:對設(shè)計、定時、套接字、線程、同步等問題加以優(yōu)化針對最高性能設(shè)計系統(tǒng)架構(gòu):SMP擴(kuò)展、集群方法及拓?fù)浣Y(jié)構(gòu)將內(nèi)核與應(yīng)用的調(diào)整集成到端到端的系統(tǒng)優(yōu)化方案之中無論對于管理員、開發(fā)人員、集成人員還是咨詢顧問來說,本書都有助于最大化所運行的每個Linux系統(tǒng)和應(yīng)用程序的性能及價值。作者簡介SandraK.Johnson博士是一名擁有16年經(jīng)驗的高級技術(shù)人員。她的研究領(lǐng)域涉及cache一致性協(xié)議、存儲子系統(tǒng)、并行I/O子系統(tǒng)、Java服

8、務(wù)器以及Linux領(lǐng)域的工作負(fù)荷描述與性能分析。她是IBMLinux技術(shù)中心的Linux性能架構(gòu)師,目前是IBM系統(tǒng)與技術(shù)事業(yè)部的全球中小型企業(yè)部門的首席技術(shù)官。GerritHuizenga是IBM俄勒岡州比弗頓Linux技術(shù)中心的Linux基礎(chǔ)技術(shù)(LinuxBaseTechnologies)的軟件工程師和架構(gòu)師。Gerrit已經(jīng)致力于架構(gòu)、設(shè)計和實現(xiàn)操作系統(tǒng)的能力達(dá)20余年,重點關(guān)注性能、可擴(kuò)展性、標(biāo)準(zhǔn)和安全。在為IBMLinux技術(shù)中心工作之前,Gerrit是SequentComputerSystems公司的操作系統(tǒng)首席專家。BadariPulavarty是IBM俄勒岡州比弗頓Linux

9、技術(shù)中心的高級工程師;具有15年開發(fā)UNIX操作系統(tǒng)的經(jīng)驗;主要研究領(lǐng)域是Linux在VM、I/O、文件系統(tǒng)和存儲子系統(tǒng)方面的性能問題。前言廉價的硬件、運行的高穩(wěn)定性以及不懈的技術(shù)開發(fā)造就了Linux(開源)操作系統(tǒng)的不斷發(fā)展。Linux最常見的用途是充當(dāng)Web服務(wù)器。當(dāng)前,它可以提供眾多企業(yè)級服務(wù),如電子郵件、防火墻、代理、網(wǎng)關(guān)、數(shù)據(jù)庫、應(yīng)用程序、文件服務(wù)器、打印等。在更高端的企業(yè)服務(wù)器領(lǐng)域,Linux也即將成為一種具有競爭力的操作系統(tǒng)。主要的華爾街公司、電影制作公司以及其他眾多企業(yè)都在轉(zhuǎn)向使用Linux以滿足其對企業(yè)服務(wù)器的需求。隨著服務(wù)器的部署日益增多,服務(wù)器操作系統(tǒng)的性能已成為系統(tǒng)整體

10、效率的決定因素,并將會影響到所有用戶。雖然使用更新更快的服務(wù)器來替換整個服務(wù)器也是一種解決方案,但更合適的辦法常常是只替換或添加必需的組件而使其他組件保持不變。系統(tǒng)性能低下的原因多源于個別硬件子系統(tǒng)中存在著瓶頸、操作系統(tǒng)配置不當(dāng)或者應(yīng)用程序缺少性能優(yōu)化等問題。提高性能的關(guān)鍵是要理解系統(tǒng)中有哪些可用的軟硬件配置選項,理解性能工具及其用法,對利用這些工具獲取的結(jié)果進(jìn)行分析并對系統(tǒng)進(jìn)行適當(dāng)調(diào)整,從而對服務(wù)器性能產(chǎn)生正面影響。本書提供了理解和改善Linux服務(wù)器性能所需的基本知識和技能。由Linux專業(yè)人員編寫,并基于大家共同的實際經(jīng)驗,描述了Linux性能監(jiān)控、評估、測量和分析的方法以及Linux服

11、務(wù)器的調(diào)優(yōu)方法。還討論了對基于Intel硬件平臺以及Linux操作系統(tǒng)運行的商業(yè)服務(wù)器應(yīng)用程序的性能加以改進(jìn)和優(yōu)化的方法。本書中采用的是簡單易懂的漸進(jìn)式性能調(diào)優(yōu)方法。首先介紹Linux內(nèi)核的有關(guān)知識,然后討論Linux服務(wù)器、性能工具和調(diào)優(yōu)技術(shù),之后介紹Linux服務(wù)器的性能特征,并給出稍加改動就可適用于各種情形的調(diào)優(yōu)示例。本書中的論述主要基于兩種Linux版本:RedHatEnterpriseLinux和NovelSUSELinuxEnterpriseServer。另外,假定服務(wù)器基礎(chǔ)硬件為基于Intel的平臺,這是因為這種硬件平臺在Linux社區(qū)中得到普遍使用。但Linux服務(wù)器的性能調(diào)優(yōu)

12、機(jī)制也很容易移植到其他平臺上。服務(wù)器的具體應(yīng)用包括Web服務(wù)器、文件和打印服務(wù)器、數(shù)據(jù)庫服務(wù)器、網(wǎng)絡(luò)管理服務(wù)器以及Web應(yīng)用服務(wù)器等。本書中涉及到的相關(guān)討論和示例都基于Linux2.4、2.5和2.6內(nèi)核。本書由5部分構(gòu)成:“Linux概述”、“性能分析工具”、“系統(tǒng)調(diào)優(yōu)”、“Linux服務(wù)器應(yīng)用的性能特征”與“調(diào)優(yōu)案例分析”。第部分“Linux概述”簡述了與Linux安裝以及Linux內(nèi)核和服務(wù)器體系結(jié)構(gòu)相關(guān)的問題。第部分“性能分析工具”詳細(xì)介紹了與3個領(lǐng)域相關(guān)的性能工具:系統(tǒng)性能和監(jiān)控、系統(tǒng)跟蹤以及基準(zhǔn)測試。第部分“系統(tǒng)調(diào)優(yōu)”討論了性能調(diào)優(yōu)的原則與策略,還討論了調(diào)度器、內(nèi)存、I/O、文件系

13、統(tǒng)以及網(wǎng)絡(luò)和代碼的調(diào)優(yōu)機(jī)制。第部分“Linux服務(wù)器應(yīng)用的性能特征”描述了服務(wù)器應(yīng)用程序的性能特征,包括影響其性能的潛在因素。還給出了關(guān)于Web、文件、數(shù)據(jù)庫和應(yīng)用程序服務(wù)器的討論。第部分“調(diào)優(yōu)案例分析”給出了大量示例來闡釋如何將前述各部分中的所有工作加以集成,從而實施一個包含各種場景的調(diào)優(yōu)方案。所提供的案例分析包括調(diào)度器、I/O、文件系統(tǒng)以及網(wǎng)絡(luò)和商業(yè)工作負(fù)荷的調(diào)優(yōu)。本書的附錄中討論了許多可調(diào)優(yōu)的內(nèi)核參數(shù),并闡述了使用sysctl、/proc和sysfs接口來調(diào)優(yōu)Linux內(nèi)核的方法。目錄第部分Linux概述第1章Linux系統(tǒng)安裝的性能問題31.1引言31.2安裝前的規(guī)劃31.2.1選擇分

14、區(qū)位置41.2.2使用多個硬盤驅(qū)動器41.2.3選擇文件系統(tǒng)41.2.4轉(zhuǎn)換文件系統(tǒng)51.2.5配置RAID61.3Linux2.6內(nèi)核的可配置屬性81.3.1I/O提升器81.3.2超大TLB頁面支持81.4Linux日志工具91.4.1/var/log/messages文件91.4.2/var/log/XFree86.0.log文件91.4.3日志輪轉(zhuǎn)101.4.4日志工具101.4.5日志定制101.5BSD與系統(tǒng)V的初始化機(jī)制111.5.1初始化表(/etc/inittab)111.5.2BSD的初始化表(Slackware)121.5.3系統(tǒng)V的初始化表(RedHat)131.6小結(jié)

15、141.7參考文獻(xiàn)14第2章Linux內(nèi)核機(jī)制152.1引言152.2Linux的發(fā)展歷程152.3Linux內(nèi)核體系結(jié)構(gòu)152.3.1內(nèi)核的職能162.3.2內(nèi)核組織結(jié)構(gòu)與模塊162.3.3內(nèi)核服務(wù)162.3.4/proc文件系統(tǒng)的外部性能視圖162.3.5內(nèi)存管理172.4進(jìn)程管理182.4.1進(jìn)程、任務(wù)與內(nèi)核線程192.4.2調(diào)度與上下文切換192.5進(jìn)程間通信202.5.1信號202.5.2管道202.5.3系統(tǒng)V的IPC機(jī)制212.6Linux對稱多處理(SMP)模型222.6.1多處理系統(tǒng)類型222.6.2同步與數(shù)據(jù)串行化222.6.3鎖、鎖粒度與鎖開銷222.6.4cache一致

16、性232.6.5處理器親和度232.7文件系統(tǒng)232.7.1虛擬文件系統(tǒng)(VFS)232.7.2ext2fs232.7.3LVM與RAID242.7.4磁盤卷組242.7.5設(shè)備相關(guān)文件252.7.6devfs252.8Linux2.6內(nèi)核的新特性262.9小結(jié)262.10參考文獻(xiàn)27第3章服務(wù)器體系結(jié)構(gòu)293.1引言293.2Linux服務(wù)器293.3多處理器與多處理機(jī)制303.3.1服務(wù)器拓?fù)浣Y(jié)構(gòu)303.3.2處理器的混用機(jī)制313.4內(nèi)存323.5I/O333.6Linux企業(yè)級服務(wù)器343.7Linux集群353.7.1高性能集群353.7.2高可用集群363.8服務(wù)器系統(tǒng)示例363.

17、8.1IBMzSeries大型機(jī)363.8.2刀片服務(wù)器393.8.3NUMA393.9小結(jié)44第部分性能分析工具第4章系統(tǒng)性能監(jiān)控474.1引言474.2Linux與性能分析的背景知識474.3CPU利用率494.3.1vmstat514.3.2top與gtop工具534.3.3sar544.4內(nèi)存利用率564.4.1/proc/meminfo與/proc/slabinfo564.4.2ps574.4.3vmstat594.5I/O利用率594.5.1iostat614.5.2sar624.6網(wǎng)絡(luò)利用率634.6.1網(wǎng)絡(luò)統(tǒng)計信息644.6.2接口信息664.6.3TCP/IP協(xié)議統(tǒng)計數(shù)據(jù)66

18、4.6.4nfsstat674.7小結(jié)674.8參考文獻(xiàn)67第5章系統(tǒng)跟蹤工具695.1引言695.2系統(tǒng)跟蹤機(jī)制的需求695.3top705.4strace725.5OProfile745.5.1opcontrol755.5.2數(shù)據(jù)概況描述工具765.6PerformanceInspector825.6.1AboveIdle835.6.2Per-ThreadTime845.6.3TraceProfiling865.6.4指令跟蹤895.6.5JavaProfiler915.6.6JavaLockMonitor1035.6.7PerformanceInspector的執(zhí)行工具1065.7小結(jié)1

19、075.8參考文獻(xiàn)107第6章工作負(fù)荷的性能基準(zhǔn)測試1096.1引言1096.2改進(jìn)工作負(fù)荷的基準(zhǔn)測試方法1106.3基準(zhǔn)測試的類型1116.4微基準(zhǔn)測試1116.4.1操作系統(tǒng)基準(zhǔn)測試1116.4.2磁盤基準(zhǔn)測試1246.4.3網(wǎng)絡(luò)基準(zhǔn)測試1326.4.4應(yīng)用基準(zhǔn)測試1336.5Web服務(wù)器基準(zhǔn)測試1376.5.1SPECweb、SPECwebSSL與TPC-W1376.5.2SPECjAppServer與ECPerf1386.5.3其他應(yīng)用基準(zhǔn)測試1396.6小結(jié)139第部分系統(tǒng)調(diào)優(yōu)第7章系統(tǒng)性能原理和策略:基準(zhǔn)測試方法的案例分析1437.1引言1437.2性能評價方法1437.2.1跟蹤

20、機(jī)制1437.2.2工作負(fù)荷特征描述1447.2.3數(shù)值分析1447.2.4模擬方法1447.3基準(zhǔn)測試案例分析1447.4分析方法1457.4.1軟硬件配置1457.4.2運行規(guī)則1467.4.3設(shè)置目標(biāo)1467.4.4測量、分析與調(diào)優(yōu)1467.4.5退出策略1477.5基準(zhǔn)測試程序1487.5.1基準(zhǔn)測試程序介紹1487.5.2性能結(jié)果1497.6小結(jié)1517.7致謝1527.8參考文獻(xiàn)152第8章調(diào)度器調(diào)優(yōu)1538.1引言1538.2單處理器系統(tǒng)1538.3對稱多處理1548.4非一致內(nèi)存訪問1548.5對稱多線程1558.6Linux2.6內(nèi)核調(diào)度器1558.7負(fù)載平衡1568.8調(diào)度

21、器的可調(diào)參數(shù)1578.8.1*CHILD_PENALTY1578.8.2*CREDIT_LIMIT1578.8.3*EXIT_WEIGHT1578.8.4*INTERACTIVE_DELTA1578.8.5*MAX_SLEEP_AVG1588.8.6*MAX_TIMESLICE1588.8.7*MIN_TIMESLICE1588.8.8*PARENT_PENALTY1588.8.9*PRIO_BONUS_RATIO1588.8.10*STARVATION_LIMIT1588.9小結(jié)1598.10參考文獻(xiàn)159第9章Linux虛存的性能問題1619.1引言1619.2內(nèi)存與地址空間1629.2.

22、1地址空間1629.2.2用戶地址空間1629.2.3VM區(qū)域1639.2.4內(nèi)核地址空間1649.3高端內(nèi)存支持1659.4分頁與交換機(jī)制1659.4.1替換策略1669.4.2頁面替換與內(nèi)存平衡1679.5Linux頁表1679.6Linux2.6內(nèi)核中的新特性1699.6.1rmap與objrmap1699.6.2大型頁面的支持1699.6.3頁面分配與替換1709.6.4Slab分配器1719.6.5VM的可調(diào)參數(shù)1719.6.6CPU調(diào)度器1739.7小結(jié)1759.8參考文獻(xiàn)175第10章I/O子系統(tǒng)的性能問題17710.1引言17710.2I/O調(diào)度與塊I/O(BIO)層17710

23、.2.1Linux2.6內(nèi)核的I/O調(diào)度器17810.2.2Linux2.4內(nèi)核的I/O調(diào)度器17910.2.3Linux2.6內(nèi)核的最終期限I/O調(diào)度器17910.2.4調(diào)度器的可調(diào)參數(shù)18010.2.5Linux2.6內(nèi)核的AnticipatoryI/O調(diào)度器18110.2.6Linux2.6內(nèi)核的CFQ調(diào)度器18310.2.7Linux2.6內(nèi)核的noopI/O調(diào)度器18310.2.8I/O調(diào)度器的性能含義18310.3批量讀寫請求18410.4讀預(yù)測啟發(fā)算法18410.5影響性能的I/O部件18510.6I/O設(shè)備尋址18610.7小結(jié)18610.8參考文獻(xiàn)186第11章文件系統(tǒng)調(diào)優(yōu)1

24、8911.1引言18911.2文件系統(tǒng)基本知識18911.2.1文件系統(tǒng)的實現(xiàn)考慮18911.2.2創(chuàng)建優(yōu)化的文件系統(tǒng)19011.2.3文件系統(tǒng)基本術(shù)語19011.3日志型文件系統(tǒng)19211.3.1文件系統(tǒng)的故障處理機(jī)制19311.3.2事務(wù)機(jī)制19311.3.3選項19411.4影響文件系統(tǒng)性能的磁盤因素19511.4.1物理磁盤存儲器的考慮事項19511.4.2磁盤的性能特征19611.4.3傳輸速率19611.4.4hdparm19711.5文件系統(tǒng)的碎片整理19911.6文件同步19911.6.1確保數(shù)據(jù)或文件完整性20011.6.2使用函數(shù)調(diào)用20011.6.3使用文件描述符2001

25、1.6.4sync/fsync的性能含義20111.7bdflush參數(shù)20111.8異步輸入與輸出20211.8.1使用異步I/O20211.8.2異步I/O函數(shù)20211.9原始磁盤I/O20311.9.1在Linux上設(shè)置原始I/O20311.9.2示例20311.10Ext2與Ext3文件系統(tǒng)20411.10.1Ext2的組織結(jié)構(gòu)20411.10.2Ext2文件系統(tǒng)中的塊分配方式20611.10.3創(chuàng)建Ext2文件系統(tǒng)20611.10.4Ext2文件系統(tǒng)的Ext3擴(kuò)展機(jī)制20711.10.5Ext3的內(nèi)核配置支持20711.10.6Ext3文件系統(tǒng)調(diào)優(yōu)方法20811.10.7創(chuàng)建Ext

26、3分區(qū)20811.10.8Ext2與Ext3的轉(zhuǎn)換20911.10.9建立外部日志20911.10.10Ext2/Ext3工具20911.11ReiserFS21011.11.1ReiserFS的內(nèi)核配置支持21111.11.2ReiserFS文件系統(tǒng)調(diào)優(yōu)方法21111.11.3創(chuàng)建ReiserFS文件系統(tǒng)21111.11.4建立外部日志21211.11.5掛接ReiserFS文件系統(tǒng)21211.11.6掛接選項21311.11.7調(diào)優(yōu)ReiserFS21311.11.8ReiserFS文件系統(tǒng)實用工具21411.12日志式文件系統(tǒng)21411.12.1JFS的內(nèi)核配置支持21511.12.2J

27、FS文件系統(tǒng)的調(diào)優(yōu)方法21511.12.3創(chuàng)建JFS文件系統(tǒng)21611.12.4建立外部日志21611.12.5掛接文件系統(tǒng)21611.12.6掛接選項21611.12.7調(diào)優(yōu)JFS21711.12.8JFS文件系統(tǒng)實用工具21711.13下一代文件系統(tǒng)21711.13.1XFS的內(nèi)核配置支持21811.13.2XFS文件系統(tǒng)的調(diào)優(yōu)方法21811.13.3創(chuàng)建XFS文件系統(tǒng)21911.13.4容量飽和時的文件系統(tǒng)行為21911.13.5建立外部日志21911.13.6掛接文件系統(tǒng)22011.13.7掛接選項22011.13.8調(diào)優(yōu)XFS22011.13.9XFS文件系統(tǒng)實用工具22111.14

28、小結(jié)22211.15參考文獻(xiàn)223第12章網(wǎng)絡(luò)調(diào)優(yōu)22512.1引言22512.2網(wǎng)絡(luò)協(xié)議棧22512.3內(nèi)核參數(shù)調(diào)優(yōu)機(jī)制22612.4內(nèi)核自動調(diào)優(yōu)機(jī)制22612.5核心內(nèi)核參數(shù)22712.6TCP/IPv4協(xié)議內(nèi)核參數(shù)22812.6.1TCP緩沖區(qū)與內(nèi)存管理22812.6.2TCP選項23012.6.3TCP連接管理23112.6.4TCP連接保持管理23212.6.5IP端口范圍23312.7小結(jié)23312.8參考文獻(xiàn)233第13章進(jìn)程間通信23513.1引言23513.2進(jìn)程間通信的定義23513.3LinuxSysV的IPC資源與ipcs命令23613.3.1ipcs命令23613.3

29、.2IPC標(biāo)識符及其限制23713.4信號量參數(shù)23813.4.1semmni23813.4.2semmns23913.4.3semmsl23913.4.4semopm23913.4.5semvmx23913.4.6未用的信號量參數(shù)23913.5消息隊列參數(shù)24013.5.1msgmni24013.5.2msgmax24013.5.3msgmnb24113.5.4未用的消息隊列參數(shù)24113.6共享內(nèi)存段參數(shù)24113.6.1shmmni24213.6.2shmmax24213.6.3shmmin24213.6.4shmall24213.7可配置IPC參數(shù)的動態(tài)修改機(jī)制24213.7.1使用/

30、proc24213.7.2使用sysctl24313.8IPC參數(shù)的靜態(tài)配置24313.9管道機(jī)制24313.10小結(jié)244第14章代碼調(diào)優(yōu)24514.1引言24514.2一般原則24514.3應(yīng)用的概要描述工具24614.4編譯器選項調(diào)優(yōu)24614.4.1性能調(diào)優(yōu)的基本步驟24714.4.2編譯器優(yōu)化的問題24714.5代碼調(diào)優(yōu)24714.6算法設(shè)計調(diào)優(yōu)24814.6.1問題與解決方案的可能性24814.6.2問題描述24814.6.3程序24914.6.4設(shè)計代碼25114.6.5服務(wù)器25114.6.6計時25214.6.7Socket25314.6.8線程25614.6.9同步2591

31、4.6.10文件I/O26214.6.11客戶端26414.6.12代碼討論26614.6.13編譯選項26614.6.14鏈接庫26714.7小結(jié)268第部分Linux服務(wù)器應(yīng)用的性能特征第15章Web服務(wù)器的性能調(diào)優(yōu)27115.1引言27115.2HTTP請求與響應(yīng)27215.3Web服務(wù)器的網(wǎng)絡(luò)行為27315.4Web服務(wù)器事務(wù)27515.5Web服務(wù)器模型27515.6Web服務(wù)器的調(diào)優(yōu)方法27615.6.1Web服務(wù)器的通用調(diào)優(yōu)機(jī)制27715.6.2Apache服務(wù)器的調(diào)優(yōu)機(jī)制27715.6.3Flash與事件驅(qū)動的其他服務(wù)器的調(diào)優(yōu)機(jī)制27815.6.4Tux的調(diào)優(yōu)機(jī)制27815.6

32、.5Web服務(wù)器的性能評價工具27815.7小結(jié)27915.8參考文獻(xiàn)279第16章文件與打印服務(wù)器的性能調(diào)優(yōu)28116.1引言28116.2專用網(wǎng)絡(luò)存儲服務(wù)器的類型28216.3網(wǎng)絡(luò)存儲性能的優(yōu)化方法28216.3.1確定遠(yuǎn)程存儲的數(shù)據(jù)28216.3.2SAN與網(wǎng)絡(luò)文件系統(tǒng)/NAS28216.3.3網(wǎng)絡(luò)文件系統(tǒng)協(xié)議28316.3.4客戶與服務(wù)器的實現(xiàn)選擇28616.3.5Linux客戶端調(diào)優(yōu)的關(guān)鍵概念28716.3.6Linux文件服務(wù)器的調(diào)優(yōu)機(jī)制29016.3.7性能測量29216.3.8改進(jìn)容量規(guī)劃的負(fù)荷測量方法29216.3.9打印服務(wù)器的性能因素29316.4參考文獻(xiàn)293第17章數(shù)

33、據(jù)庫服務(wù)器的性能調(diào)優(yōu)29517.1引言29517.2數(shù)據(jù)庫體系結(jié)構(gòu)29517.3數(shù)據(jù)庫的性能調(diào)優(yōu)領(lǐng)域29617.3.1I/O調(diào)優(yōu)29617.3.2隊列長度與響應(yīng)時間29617.3.3負(fù)載平衡29717.3.4全局內(nèi)存29817.3.5日志設(shè)備29917.3.6典型的數(shù)據(jù)庫工作負(fù)荷30017.4進(jìn)程管理30017.5內(nèi)存管理30117.6I/O管理30217.6.1回彈緩沖區(qū)30217.6.2原始I/O30217.6.3向量I/O30317.6.4異步I/O30317.6.5直接I/O30317.6.6塊I/O30417.6.7I/O請求鎖30417.7小結(jié)304第18章應(yīng)用服務(wù)器的性能調(diào)優(yōu)30

34、518.1引言30518.2應(yīng)用服務(wù)器概念30518.3Java、J2EE與應(yīng)用服務(wù)器30518.4應(yīng)用服務(wù)器的性能特征30718.4.1應(yīng)用服務(wù)器的特征30818.4.2Linux上的應(yīng)用服務(wù)器30818.5性能與高可用性的改進(jìn)31618.5.1SMP擴(kuò)展性31618.5.2集群31718.5.3拓?fù)浣Y(jié)構(gòu)31918.5.4性能調(diào)優(yōu)32218.6小結(jié)32418.7參考文獻(xiàn)325第部分調(diào)優(yōu)案例分析第19章Linux2.6內(nèi)核I/O調(diào)度器調(diào)優(yōu)案例分析32919.1引言32919.2基準(zhǔn)測試環(huán)境與工作負(fù)荷概況33019.3I/O調(diào)度器與性能33119.4單CPU單磁盤配置33119.58路RAID-

35、5配置33219.616路RAID-0配置33519.7AS串行讀性能33519.8AS與Deadline的性能33619.9CFQ性能33719.10小結(jié)33919.11參考文獻(xiàn)339第20章文件系統(tǒng)調(diào)優(yōu)實例分析34120.1引言34120.2文件布局分析34120.2.1Ext2/Ext3文件系統(tǒng)布局34120.2.2日志文件系統(tǒng)(JFS)布局34720.2.3ReiserFS文件系統(tǒng)布局34920.2.4XFS文件系統(tǒng)布局35120.3文件系統(tǒng)的調(diào)優(yōu)機(jī)制35320.3.1Ext3的外部日志調(diào)優(yōu)選項35320.3.2ReiserFS的外部日志調(diào)優(yōu)選項35720.3.3JFS的外部日志調(diào)優(yōu)選

36、項35820.3.4XFS的調(diào)優(yōu)選項35920.4I/O的測量方法36120.4.1iostat36120.4.2iostat與sar工具36220.5小結(jié)36720.6參考文獻(xiàn)367第21章Linux系統(tǒng)網(wǎng)絡(luò)性能實例分析36921.1引言36921.2實例分析中使用的基準(zhǔn)測試36921.2.1NetBench37021.2.2Netperf337021.2.3VolanoMark37021.2.4SPECWeb9937021.3Linux2.4與2.6內(nèi)核中的增強(qiáng)機(jī)制37121.3.1SendFile37121.3.2TCP分段卸載37321.3.3網(wǎng)絡(luò)負(fù)荷中的進(jìn)程與IRQ親合性37521.

37、3.4NAPI37621.3.5TCP卸載引擎37821.4示例分析37921.4.1NetBench38021.4.2Netperf3(千兆位以太網(wǎng)調(diào)優(yōu)實例分析)38121.4.3VolanoMark38321.4.4SPECWeb9938421.5小結(jié)38621.6參考文獻(xiàn)387第22章商用負(fù)載調(diào)優(yōu)實例分析38922.1引言38922.2商用負(fù)載調(diào)優(yōu)概述38922.3J2EE的標(biāo)準(zhǔn)商用負(fù)載模型39022.4商用負(fù)載模型實例:股票交易39022.4.1系統(tǒng)配置39122.4.2Trade3的詳細(xì)信息39222.4.3性能分析方法39522.5性能分析試驗39722.5.1Web服務(wù)器3982

38、2.5.2數(shù)據(jù)庫后端程序39922.5.3Java虛擬機(jī)40422.5.4應(yīng)用服務(wù)器40622.5.5超線程40822.6小結(jié)40922.7參考文獻(xiàn)410附錄A內(nèi)核參數(shù)調(diào)優(yōu)411A.1引言411A.2sysctl接口411A.3procfs接口412A.4sysfs(只針對Linux2.6內(nèi)核)413A.5通用內(nèi)核參數(shù)413A.5.1共享內(nèi)存413A.5.2進(jìn)程414A.5.3信號414A.5.4概要分析/調(diào)試414A.5.5系統(tǒng)414A.6虛存參數(shù)415A.7文件系統(tǒng)參數(shù)416A.8網(wǎng)絡(luò)內(nèi)核參數(shù)417A.8.1網(wǎng)絡(luò)核心參數(shù)418A.8.2ICMP418A.8.3鄰居419A.8.4配置419

39、A.8.5路由420A.8.6TCP420A.8.7IP分段421第2章作者:BadriPulavartiLinux內(nèi)核機(jī)制2.1引言雖然讀者已經(jīng)對如何在硬件系統(tǒng)上安裝Linux做出了一些重要決策,但還需要了解更多關(guān)于Linux內(nèi)核的知識,這樣才能制定出重要的調(diào)優(yōu)決策。本章將討論Linux的發(fā)展歷程,然后研究其體系結(jié)構(gòu)。還將介紹關(guān)于內(nèi)核組織結(jié)構(gòu)、內(nèi)核職責(zé)以及如何實施內(nèi)存管理的知識,討論進(jìn)程管理和進(jìn)程間通信的機(jī)制,然后簡要說明Linux對稱多處理模型。最后分析Linux的文件系統(tǒng)。2.2Linux的發(fā)展歷程Linux是LinusTorvalds于1991年開發(fā)的一種個人計算機(jī)操作系統(tǒng)。最初,Li

40、nux只支持Intel80 x86處理器。但這些年來,通過添加大量支持功能,Linux已可以在其他處理器上運行。目前,Linux是極少數(shù)能夠在眾多類型的處理器上運行的操作系統(tǒng)之一,支持的處理器包括IntelIA-32、IntelIA-64、AMD、DEC、PowerPC、Motorola、SPARC和IBMS/390等。Linux借鑒了UNIX的許多思想,并實現(xiàn)了UNIX的API函數(shù),因此這兩種操作系統(tǒng)有很多相似之處,但Linux并不是任何特定UNIX版本的直接衍生品。Linux無疑是當(dāng)今發(fā)展最快的操作系統(tǒng),其應(yīng)用領(lǐng)域從嵌入式設(shè)備直至大型機(jī)。關(guān)于Linux的一個有趣且最重要的事實是其開源性。L

41、inux內(nèi)核使用的是GNU通用公共許可證(GeneralPublicLicense,GPL),因此用戶可以免費獲取其內(nèi)核源碼并根據(jù)實際需求對其進(jìn)行修改。下一節(jié)將全面介紹Linux內(nèi)核的體系結(jié)構(gòu)。2.3Linux內(nèi)核體系結(jié)構(gòu)本節(jié)首先討論Linux內(nèi)核的體系結(jié)構(gòu),包括內(nèi)核的職能、內(nèi)核的組織結(jié)構(gòu)和模塊、內(nèi)核提供的服務(wù)以及進(jìn)程管理等。2.3.1內(nèi)核的職能內(nèi)核(也稱為操作系統(tǒng))有如下兩個主要作用:與系統(tǒng)的硬件設(shè)備進(jìn)行交互并對其加以控制。為應(yīng)用程序提供運行環(huán)境。某些操作系統(tǒng)允許應(yīng)用程序直接訪問硬件設(shè)備,但這種能力目前已經(jīng)很少見。類UNIX操作系統(tǒng)向應(yīng)用程序隱藏了所有的低層硬件細(xì)節(jié)。應(yīng)用程序如果希望使用某個

42、硬件資源,就必須向操作系統(tǒng)發(fā)出請求。操作系統(tǒng)對該請求進(jìn)行評估,并在請求有效時代表應(yīng)用程序與硬件設(shè)備進(jìn)行交互。為了實施這種機(jī)制,操作系統(tǒng)依賴于硬件設(shè)備禁止與應(yīng)用程序直接交互的能力。2.3.2內(nèi)核組織結(jié)構(gòu)與模塊與其他許多類UNIX操作系統(tǒng)相似,Linux是單內(nèi)核(monolithic)結(jié)構(gòu)。這意味著雖然Linux被劃分成控制系統(tǒng)各種組件(例如內(nèi)存管理和進(jìn)程管理)的多個子系統(tǒng),但所有的子系統(tǒng)都緊密集成在一起,從而構(gòu)成整個內(nèi)核。與之相反,微內(nèi)核(microkernel)操作系統(tǒng)提供了最少量的功能集合,而所有其他的操作系統(tǒng)層次都在微內(nèi)核之上以進(jìn)程方式執(zhí)行。由于各個層次之間存在著消息傳遞,微內(nèi)核操作系統(tǒng)的

43、效率通常較低,但這類操作系統(tǒng)非常便于擴(kuò)展。Linux內(nèi)核可通過模塊方式進(jìn)行擴(kuò)展。模塊具有既提供了微內(nèi)核的優(yōu)點卻又沒有額外開銷的內(nèi)核特性。模塊是一種可以在系統(tǒng)運行時鏈接到內(nèi)核的對象。2.3.3內(nèi)核服務(wù)內(nèi)核為在用戶模式中運行的應(yīng)用程序提供了一組與系統(tǒng)進(jìn)行交互的接口。這些接口也稱為系統(tǒng)調(diào)用,應(yīng)用程序可以通過接口訪問硬件和其他內(nèi)核資源。系統(tǒng)調(diào)用不僅為應(yīng)用程序提供了抽象化的硬件層次,還確保了系統(tǒng)的安全和穩(wěn)定性。大多數(shù)應(yīng)用程序并不直接使用系統(tǒng)調(diào)用。相反,在編程時采用了應(yīng)用程序接口(API)。需要注意的是,在API和系統(tǒng)調(diào)用之間不存在關(guān)聯(lián)。API是作為庫文件的組成部分提供給應(yīng)用程序使用的,這些API一般通過

44、一個或多個系統(tǒng)調(diào)用來實現(xiàn)。2.3.4/proc文件系統(tǒng)的外部性能視圖/proc文件系統(tǒng)為用戶提供了關(guān)于內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)的視圖??梢岳盟榭春托薷膬?nèi)核的某些內(nèi)部數(shù)據(jù)結(jié)構(gòu),從而改變內(nèi)核(原文錯誤:kernal)的行為。/proc文件系統(tǒng)提供了一種通過微調(diào)系統(tǒng)資源來改善應(yīng)用程序以及系統(tǒng)整體性能的簡單方法。/proc文件系統(tǒng)是一種由內(nèi)核以動態(tài)創(chuàng)建方式生成數(shù)據(jù)的虛擬文件系統(tǒng)。它被組織成多種目錄形式,其中每個目錄都對應(yīng)于特定子系統(tǒng)的可調(diào)選項。附錄A詳細(xì)闡述了使用/proc文件系統(tǒng)對系統(tǒng)進(jìn)行微調(diào)的方法。Linux的另一個要素是內(nèi)存管理。下一節(jié)將從5個方面介紹Linux的內(nèi)存管理。2.3.5內(nèi)存管理Linu

45、x的內(nèi)存管理問題包括地址空間、物理內(nèi)存、內(nèi)存映射、分頁機(jī)制及交換機(jī)制。1.地址空間虛存的優(yōu)點之一是每個進(jìn)程都認(rèn)為自己擁有所需的全部地址空間。虛存的大小可以是系統(tǒng)中物理內(nèi)存大小的許多倍。系統(tǒng)中的每個進(jìn)程都有自己的虛址空間,這些虛址空間相互之間完全獨立。運行某個應(yīng)用程序的進(jìn)程不會影響到其他進(jìn)程,應(yīng)用程序之間也是相互保護(hù)的。虛址空間由操作系統(tǒng)映射至物理內(nèi)存。從應(yīng)用程序的角度來說,這個地址空間是一個線性的平面地址空間;但內(nèi)核對用戶虛址空間的處理則有很大的不同。線性地址空間被劃分為兩部分:用戶地址空間和內(nèi)核地址空間。用戶地址空間不會在每次發(fā)生上下文切換時都改變,而內(nèi)核地址空間則始終保持不變。為用戶空間和

46、內(nèi)核空間分配的空間容量主要取決于系統(tǒng)是32位還是64位的體系結(jié)構(gòu)。例如,x86是32位的體系結(jié)構(gòu),它只支持4GB的地址空間,其中3GB為用戶空間保留,1GB分配給內(nèi)核地址空間。具體的劃分大小由內(nèi)核配置變量PAGE_OFFSET決定。2.物理內(nèi)存為了支持多種體系結(jié)構(gòu),Linux使用與體系結(jié)構(gòu)無關(guān)的方式來描述物理內(nèi)存。物理內(nèi)存可以組織成內(nèi)存體(bank)的結(jié)構(gòu),每個內(nèi)存體與處理器的距離都是特定的。隨著越來越多的機(jī)器采用非一致性內(nèi)存訪問(NonuniformMemoryAccess,NUMA)技術(shù),這種類型的內(nèi)存布局已非常普遍。LinuxVM以節(jié)點來表示這種排列方式。每個節(jié)點劃分為許多稱為管理區(qū)(z

47、one)的內(nèi)存塊,它們代表了內(nèi)存中的地址范圍。有三種不同的管理區(qū):ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。例如,x86具有以下內(nèi)存管理區(qū):ZONE_DMA內(nèi)存地址的前16MBZONE_NORMAL16MB896MBZONE_HIGHMEM896MB內(nèi)存結(jié)束地址每個管理區(qū)都有各自的用途。從前的一些ISA設(shè)備對于可以在哪些地址上執(zhí)行I/O操作具有限制條件,而ZONE_DMA可以消除這些限制。ZONE_NORMAL用于所有的內(nèi)核操作和分配。它對于系統(tǒng)性能是極為重要的。ZONE_HIGHMEM是系統(tǒng)中其余的內(nèi)存。需要注意的是,ZONE_HIGHMEM無法用于內(nèi)核的分配和數(shù)據(jù)

48、結(jié)構(gòu),只能用于保存用戶數(shù)據(jù)。3.內(nèi)存映射為了更好地理解內(nèi)核內(nèi)存的映射機(jī)制,下面以x86為例加以說明。前文提過,內(nèi)核只有1GB的虛址空間可用,其他3GB保留給用戶空間(原文為kernel,疑是錯誤?)。內(nèi)核將ZONE_DMA和ZONE_NORMAL中的物理內(nèi)存直接映射到其地址空間。這意味著系統(tǒng)中最前面的896MB物理內(nèi)存被映射到內(nèi)核虛址空間,從而只剩下128MB的虛址空間。這128MB的虛址空間用于諸如vmalloc和kmap等操作。如果物理內(nèi)存容量較小(少于1GB),這種映射機(jī)制運作良好。然而,目前的所有服務(wù)器都支持?jǐn)?shù)十千兆字節(jié)的內(nèi)存。Intel公司在其Pentium處理器中引入了物理地址擴(kuò)展

49、(PhysicalAddressExtension,PAE)機(jī)制,能夠支持最多64GB物理內(nèi)存。前述的內(nèi)存映射機(jī)制使得如何處理高達(dá)數(shù)十千兆字節(jié)的物理內(nèi)存成為x86Linux的一個主要問題來源。Linux內(nèi)核按照如下方式處理高端內(nèi)存(896MB以上的所有內(nèi)存)原文錯:about似應(yīng)為above):當(dāng)Linux內(nèi)核需要尋址高端內(nèi)存中的某個頁面時,通過kmap操作將該頁面映射到一個小的虛址空間窗口中,在該頁面上執(zhí)行操作,然后解除對該頁面的映射。64位體系結(jié)構(gòu)的地址空間非常巨大,因此這類系統(tǒng)不存在這個問題。4.分頁機(jī)制虛存可以有多種實現(xiàn)方式,其中最有效的方式是基于硬件的方案。虛址空間被劃分成固定大小的

50、內(nèi)存塊,稱之為頁面。虛存訪問通過頁表被轉(zhuǎn)換成物理內(nèi)存地址。為了支持各種體系結(jié)構(gòu)和頁面尺寸,Linux采用了三級分頁機(jī)制。它提供了如下三種頁表類型:頁面全局目錄(PageGlobalDirectory,PGD)頁面中層目錄(PageMiddleDirectory,PMD)頁表(PageTable,PTE)地址轉(zhuǎn)換提供了一種將進(jìn)程的虛址空間與物理地址空間分離的方法。每個虛存頁面都可以在主內(nèi)存中標(biāo)記為“存在”或“不存在”。如果進(jìn)程訪問某個不存在的虛存地址,硬件就會產(chǎn)生一個頁面錯誤,并由內(nèi)核對其進(jìn)行處理。內(nèi)核處理該錯誤時將該頁面置于主內(nèi)存中。在這個過程中,系統(tǒng)可能需要將現(xiàn)有的某個頁面替換掉,以便為新頁

51、面提供空間。替換策略是分頁系統(tǒng)最關(guān)鍵的內(nèi)容之一。Linux2.6版本修補(bǔ)了以前Linux版本中關(guān)于各種頁面選擇和替換的問題。5.交換機(jī)制交換是當(dāng)主存容量不足時將整個進(jìn)程移入或移出輔助存儲器的過程。由于上下文切換的開銷非常大,許多現(xiàn)代的操作系統(tǒng),包括Linux,都不采用這種方法,而是采用分頁機(jī)制。在Linux中,交換是在頁面層次而不是在進(jìn)程層次上執(zhí)行的。交換的主要優(yōu)點是擴(kuò)展了進(jìn)程可用的地址空間。當(dāng)內(nèi)核需要釋放內(nèi)存以便為新頁面提供空間時,可能需要丟棄一些較少使用的或未用的頁面。某些頁面因為未被磁盤備份而不容易釋放,需要被復(fù)制到后備存儲器(交換區(qū))中,在必要時還要從后備存儲器中讀回。交換機(jī)制的主要缺

52、點是速度慢。磁盤的讀寫速度通常都非常緩慢,因此應(yīng)該盡量消除交換操作。2.4進(jìn)程管理本節(jié)討論Linux中的進(jìn)程管理,包括進(jìn)程、任務(wù)、內(nèi)核線程、調(diào)度以及上下文切換。2.4.1進(jìn)程、任務(wù)與內(nèi)核線程任務(wù)只是一種“需要完成的工作的一般性描述”,可以是一個輕權(quán)的線程,也可以是一個完整的進(jìn)程。線程是最輕權(quán)的任務(wù)實例。在內(nèi)核中創(chuàng)建線程的成本可能很高,也可能較低,這取決于線程需要擁有的特征。最簡單的情形是線程與其父線程共享所有資源,包括代碼、數(shù)據(jù)以及許多內(nèi)部數(shù)據(jù)結(jié)構(gòu),而僅在區(qū)分該線程與其他線程上有一點點差異。Linux中的進(jìn)程是一個“重權(quán)的”數(shù)據(jù)結(jié)構(gòu)。如果有必要的話,多個線程可以在單個進(jìn)程中運行(并共享該進(jìn)程的

53、一些資源)。在Linux中,進(jìn)程只是一個擁有全部重權(quán)特征的線程。線程和進(jìn)程由調(diào)度器以相同方式進(jìn)行調(diào)度。內(nèi)核線程是始終在內(nèi)核模式中運行且沒有用戶上下文的線程。內(nèi)核線程通常針對某個特定功能而存在,很容易在內(nèi)核中處理它。內(nèi)核線程經(jīng)常具有所期望的作用:能夠像其他任何進(jìn)程一樣進(jìn)行調(diào)度;當(dāng)其他進(jìn)程需要該功能發(fā)揮作用時,為這些進(jìn)程提供實現(xiàn)該功能的目標(biāo)線程(通過發(fā)送信號)。2.4.2調(diào)度與上下文切換進(jìn)程調(diào)度是確保每個進(jìn)程能公平分享CPU的一門科學(xué)(有人稱之為藝術(shù))。對于“公平”的定義,人們總是存在著不同的看法,因為調(diào)度器往往根據(jù)并不明顯的可見的信息來做出選擇。本書后面幾章中將更深入地闡述進(jìn)程調(diào)度。需要注意的是

54、,許多Linux用戶都認(rèn)為,一個在所有時候大部分正確的調(diào)度器要比一個在大多數(shù)時候完全正確的調(diào)度器更為重要,即緩慢運行的進(jìn)程要優(yōu)于因過于精心選擇調(diào)度策略或錯誤而停止運行的進(jìn)程。Linux當(dāng)前的調(diào)度器程序就遵循了這個原則。當(dāng)一個進(jìn)程停止運行,被另一個進(jìn)程替換時,稱為上下文切換。通常,這個操作的開銷是很高的,內(nèi)核程序員和應(yīng)用程序員總是試圖盡量減少系統(tǒng)執(zhí)行上下文切換的數(shù)量。進(jìn)程可以因為等待某個事件或資源而主動停止運行,或者因為系統(tǒng)決定應(yīng)將CPU分配給另一個進(jìn)程而被動地放棄運行。對于第一種情況,如果沒有其他進(jìn)程等待執(zhí)行,CPU實際上可能進(jìn)入空閑狀態(tài)。在第二種情況下,該進(jìn)程或者被另一個等待進(jìn)程所替換,或者

55、分配到一個新的運行時間片或時間周期繼續(xù)執(zhí)行。即使在某個進(jìn)程正按照有序的方式調(diào)度和執(zhí)行時,也可以被其他更高優(yōu)先級的任務(wù)中斷。例如,假若磁盤為磁盤讀操作準(zhǔn)備好了數(shù)據(jù)后,就向CPU發(fā)送信號,并期望CPU從磁盤上獲取數(shù)據(jù)。內(nèi)核必須及時地處理這個情況,否則就會降低磁盤的傳輸率。信號、中斷和異常是不同的異步事件,但在許多方面卻類似,并且即使CPU已處于忙狀態(tài),它們也都必須被迅速處理。例如,準(zhǔn)備好了數(shù)據(jù)的磁盤會導(dǎo)致一個中斷。內(nèi)核調(diào)用該特定設(shè)備的中斷處理程序,中斷當(dāng)前運行的進(jìn)程并使用其眾多資源。當(dāng)中斷處理程序執(zhí)行結(jié)束后,當(dāng)前運行的進(jìn)程恢復(fù)執(zhí)行。這實際上是侵占當(dāng)前運行進(jìn)程的CPU時間,因為當(dāng)前版本的內(nèi)核只測量自

56、從該進(jìn)程進(jìn)入CPU之后所經(jīng)過的時間,卻忽略了中斷會耗用該進(jìn)程的寶貴時間這一事實。中斷處理程序通常是非??焖俸秃啙嵉?,因而能夠快速處理和清除以便使后續(xù)數(shù)據(jù)能夠進(jìn)入。但有時一個中斷可能需要處理的工作比在中斷處理程序中所期望的短時間內(nèi)完成的工作更多。中斷也需要一個定義良好的環(huán)境來完成其工作(要記住,中斷利用了某個隨機(jī)進(jìn)程的資源)。在這種情況下,要收集足夠信息,將工作延遲提交至bottomhalf處理程序進(jìn)行處理。bottomhalf處理程序會不時地被調(diào)度執(zhí)行。盡管在Linux早期版本中普遍使用了bottomhalf機(jī)制,但當(dāng)前的Linux版本中不鼓勵使用這種機(jī)制。2.5進(jìn)程間通信為了允許進(jìn)程間可以互

57、相進(jìn)行通信,Linux支持許多進(jìn)程間通信(InterProcessCommunication,IPC)機(jī)制。信號(signal)和管道(pipe)是兩種基本機(jī)制,但Linux也支持系統(tǒng)V的IPC機(jī)制。2.5.1信號信號用于將事件通知給一個或多個進(jìn)程,是用戶進(jìn)程間一種原始的通信和同步方式。信號也可用于作業(yè)控制。內(nèi)核能夠產(chǎn)生一組已定義的信號,系統(tǒng)中的其他進(jìn)程如果擁有適當(dāng)?shù)臋?quán)限,也可以產(chǎn)生信號。進(jìn)程可以忽略所生成的大多數(shù)信號,但有兩個例外:SIGSTOP和SIGKILL。SIGSTOP信號導(dǎo)致進(jìn)程終止執(zhí)行,而SIGKILL信號導(dǎo)致進(jìn)程退出并被忽略掉。除了SIGSTOP和SIGKILL信號之外,進(jìn)程可

58、以決定如何處理其他各種信號。例如,進(jìn)程可以阻塞信號,也可以自已處理信號或允許內(nèi)核處理信號。如果由內(nèi)核處理信號的話,那么內(nèi)核執(zhí)行該信號的默認(rèn)動作。Linux保存了關(guān)于每個進(jìn)程如何處理各種可能信號的信息。信號并不是在生成之后就會立即傳遞給進(jìn)程,而是當(dāng)該進(jìn)程恢復(fù)運行時才被傳遞。每當(dāng)進(jìn)程退出一個系統(tǒng)調(diào)用時,如果存在著任何未被阻塞的信號,這些信號都會被傳遞。Linux與POSIX標(biāo)準(zhǔn)兼容,因此進(jìn)程可以指定當(dāng)調(diào)用特定的信號處理例程時需要阻塞哪些信號。2.5.2管道管道是未結(jié)構(gòu)化的先進(jìn)先出(first-infirst-out,F(xiàn)IFO)單向數(shù)據(jù)流。寫入者向管道的一端添加數(shù)據(jù),讀取者從管道的另一端獲取數(shù)據(jù),而

59、已讀取的數(shù)據(jù)會從管道中刪除。管道提供了簡單的流控制機(jī)制。例如,以下命令將ls命令(列出目錄中的文件)的輸出結(jié)果通過管道連至less命令(標(biāo)記文件的頁碼)的標(biāo)準(zhǔn)輸入中:$ls|lessLinux還支持命名管道(namedpipe)。與管道不同,命名管道不是臨時對象,而是文件系統(tǒng)中可以通過mkfifo命令創(chuàng)建的實體。2.5.3系統(tǒng)V的IPC機(jī)制Linux支持的3種進(jìn)程間通信機(jī)制,最初出現(xiàn)在UNIX系統(tǒng)V(1983年)中。這3種機(jī)制是消息隊列、信號量(semaphore)和共享內(nèi)存。這些機(jī)制都共享通用的認(rèn)證方法。進(jìn)程只需通過系統(tǒng)調(diào)用將唯一的訪問標(biāo)識符傳遞給內(nèi)核,就可以訪問這些資源。對這些系統(tǒng)VIPC

60、對象的訪問要通過訪問許可檢查,這非常類似檢查文件訪問的方式。系統(tǒng)VIPC對象的訪問權(quán)限由該對象的創(chuàng)建者通過系統(tǒng)調(diào)用進(jìn)行設(shè)置。1.消息隊列消息隊列允許一個或多個進(jìn)程向其中寫入消息,然后這些消息將由一個或多個讀出進(jìn)程讀取。消息隊列在功能上等同于管道,但與管道相比,消息隊列更為通用,并有多方面的優(yōu)勢。消息隊列通過消息而不是未格式化的字節(jié)流形式來傳遞數(shù)據(jù),從而更易于處理數(shù)據(jù);消息可以與類型相關(guān)聯(lián),因此接收者可以在處理非緊急消息之前檢查緊急消息;當(dāng)多個進(jìn)程共享同一個消息隊列時,類型域也可用于指定具體接收者。2.信號量信號量是支持原子操作set和test的一些對象,用于實現(xiàn)各種同步協(xié)議。信號量最適于被描述

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論