最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

自編教材分享:第四章—系統(tǒng)配置優(yōu)化(一)

2023-09-11 20:26 作者:先進(jìn)編譯實驗室  | 我要投稿


系統(tǒng)性能優(yōu)化的目的就是在一定范圍內(nèi)使得系統(tǒng)中的各個資源的使用去向合理,并保持必要的平衡。系統(tǒng)的運(yùn)行良好時的各類資源可以達(dá)到一個平衡的狀態(tài)。本期分享的是系統(tǒng)配置優(yōu)化第一部分。

處理器

配置檢查

處理器是操作系統(tǒng)穩(wěn)定運(yùn)行的根本,處理器的速度與性能在很大程度上決定了系統(tǒng)整體的性能,因而處理器通常是系統(tǒng)性能分析的首要目標(biāo)。為了提高性能,優(yōu)化人員可以通過配置檢查來查看處理器的相關(guān)信息,以尋找性能改進(jìn)的空間,明確消耗時間的位置和原因,再通過參數(shù)調(diào)整來進(jìn)行調(diào)優(yōu)。本節(jié)將分為以下兩個部分進(jìn)行描述:

  1. 配置檢查

  2. 參數(shù)調(diào)整

可以從以下角度檢查處理器的當(dāng)前配置,例如當(dāng)前可用的處理器數(shù)量、是否支持超線程、每個核上運(yùn)行的線程數(shù)、當(dāng)前處理器的模式以及架構(gòu)、緩存大小、是否支持硬件虛擬化、處理器的時鐘頻率、基本輸入輸出系統(tǒng)BIOS已啟用或者禁用的其它處理器相關(guān)特性等。優(yōu)化系統(tǒng)配置的目的是使程序在系統(tǒng)上以最優(yōu)的狀態(tài)運(yùn)行。而如何定位性能瓶頸所在是性能優(yōu)化的一大難題。其中siblings和cpu cores值之間有對應(yīng)關(guān)系,如果siblings是cpu cores的兩倍,則說明系統(tǒng)支持超線程,并且超線程已打開;如果siblings和cpu cores一致,則說明系統(tǒng)不支持超線程,或者超線程未打開。

使用命令查看處理器信息

輸出字段釋義如下:

如需查看系統(tǒng)物理處理器的個數(shù),可通過如下命令查看:

查看每個物理處理器中內(nèi)核的個數(shù),可通過如下命令查看:

查看系統(tǒng)所有邏輯處理器個數(shù),可通過如下命令查看:

若進(jìn)程的時間花費在內(nèi)核空間或者用戶空間下,可以用gprof工具來確定某應(yīng)用程序或者進(jìn)程是否在內(nèi)核或用戶模式下消耗了時間,進(jìn)而可以更進(jìn)一步分析函數(shù)調(diào)用次數(shù)與程序熱點。若分析一個或者多個進(jìn)程是否占用了單個CPU的多數(shù)時間,可以先確定是否有特定應(yīng)用程序或應(yīng)用程序組使用了單顆CPU??梢詤⒖紙D1調(diào)查進(jìn)程處理器使用情況的分析檢查過程,通過查出某特定進(jìn)程或應(yīng)用程序所在處理器瓶頸,進(jìn)而查明其消耗時間的位置和原因。


圖1 調(diào)查進(jìn)程處理器使用情況的分析檢查過程

參數(shù)調(diào)整

優(yōu)先級調(diào)整

使用nice或renice命令設(shè)置nice值可以調(diào)整進(jìn)程優(yōu)先級。Linux支持的nice值范圍為-20到19,nice值越大表示進(jìn)程優(yōu)先級越低,而nice值越小表示優(yōu)先級越高,負(fù)nice值僅能由超級管理員設(shè)置。nice命令可以指定nice值并啟動程序,renice命令用來調(diào)整已經(jīng)在運(yùn)行的進(jìn)程。

查看進(jìn)程號為12345的進(jìn)程的調(diào)度策略:

使用chrt命令還可以修改調(diào)度策略,例如超級管理員賬戶下可調(diào)整為先到先服務(wù),使用參數(shù)-f表示,優(yōu)先級為10:

進(jìn)程綁定

進(jìn)程綁定是把一個或多個進(jìn)程綁定到某個或多個處理器上,這樣可以增加進(jìn)程的處理器緩存,提高它的內(nèi)存I/O性能。

在Linux上可以通過taskset命令實現(xiàn)進(jìn)程綁定的,此方法可以使用處理器掩碼或者范圍設(shè)置處理器與進(jìn)程的關(guān)聯(lián)性。例如:

對于非一致內(nèi)存訪問系統(tǒng)來說,進(jìn)程綁定可以限制處理器和內(nèi)存區(qū)域,確保一個進(jìn)程總是可以盡快地訪問到內(nèi)存,從而提高性能。但是該進(jìn)程不能指定多個處理器,如果想要達(dá)到此功能,需要使用獨占處理器組。例如,限制一個內(nèi)存密集型進(jìn)程僅用1個或2個處理器,以增加緩存命中的機(jī)會從而提升性能。

平衡中斷

中斷是一種來自硬件或者軟件的信號之一,表明這里有項工作現(xiàn)在就要做。當(dāng)一個中斷信號達(dá)到操作系統(tǒng)內(nèi)核的時候,內(nèi)核必須從當(dāng)前執(zhí)行的進(jìn)程切換到一個新的進(jìn)程,以處理這個中斷。中斷會導(dǎo)致進(jìn)程的上下文切換,大量的中斷將導(dǎo)致系統(tǒng)性能下降,因此中斷對于系統(tǒng)的穩(wěn)定性至關(guān)重要。在單處理器系統(tǒng)上中斷處理是簡單的,但是當(dāng)系統(tǒng)中有多個有效處理器時,就需要指定在哪個處理器上處理特定的中斷,這種將一個或多個中斷源綁定到特定處理器上運(yùn)行的稱為中斷綁定。

如需確定內(nèi)核在哪個處理器上執(zhí)行特定的中斷處理程序,可以查看/proc/irq/number文件夾下的smp_affinity文件,該文件中的數(shù)據(jù)表示處理器位掩碼,以十六進(jìn)制數(shù)表示。當(dāng)一個中斷被允許在某處理器上處理,則將相應(yīng)的比特位設(shè)置為1,否則設(shè)為0。

假如想設(shè)置中斷50僅在處理器0、2、7上處理,則計算方法為:2^0 +2^2 +2^7 =133=0x85,將從shell計算得到的結(jié)果直接設(shè)置為affinity-mask命令如下:

多核優(yōu)化

關(guān)于多核技術(shù),處理器0是很關(guān)鍵的,如果0號處理器使用過度,則別的處理器性能也會下降。這是因為處理器0具有調(diào)整功能,所以不能任由操作系統(tǒng)對其進(jìn)行負(fù)載均衡,可以手動地為其分配處理器核,從而不會過多地占用0號處理器,或是讓關(guān)鍵進(jìn)程和一堆別的進(jìn)程擠在一起。

傳統(tǒng)的多核運(yùn)算是使用對稱多處理模式,多個處理器共享一個集中的存儲器和I/O總線。于是就會出現(xiàn)一致存儲器訪問的問題,一致性通常意味著性能的損失。而在非一致內(nèi)存訪問模式下,處理器被劃分成多個節(jié)點,每個節(jié)點有自己的本地存儲器空間。如需只讓進(jìn)程訪問當(dāng)前運(yùn)行節(jié)點,可使用如下命令:

內(nèi)存

內(nèi)存是連接處理器和其它設(shè)備的通道,起到緩沖和數(shù)據(jù)的交換作用。內(nèi)存包括物理內(nèi)存和虛擬內(nèi)存swap,內(nèi)存資源的充足與否直接影響到系統(tǒng)性能,因此內(nèi)存的管理和優(yōu)化是系統(tǒng)性能優(yōu)化的重要組成部分。本節(jié)仍從以下兩個部分討論:

  1. 配置檢查

  2. 參數(shù)調(diào)整

配置檢查

查找內(nèi)存可以優(yōu)化的空間首先需要進(jìn)行內(nèi)存配置檢查,可以從以下幾個方面展開,如內(nèi)存空間大小、硬件允許的最大內(nèi)存數(shù)量、是否支持非統(tǒng)一內(nèi)存訪問、主存的訪存速度、內(nèi)存總線數(shù)量、是否使用了大頁面、是否有其它內(nèi)存可調(diào)參數(shù)等。

在Linux下查看內(nèi)存信息可以使用/proc/meminfo文件查看操作系統(tǒng)內(nèi)存的使用狀態(tài),使用命令:

查看內(nèi)存硬件信息可以使用命令:

查看現(xiàn)有的內(nèi)存硬件信息可以使用命令:

圖2顯示了在配置檢查時分析內(nèi)存數(shù)據(jù)的策略。當(dāng)系統(tǒng)的內(nèi)存使用量快速增加時,需要分析清楚是何原因造成了系統(tǒng)內(nèi)存需求的增長。若特定進(jìn)程的駐留集大小在增加,可以追蹤是哪個進(jìn)程該為內(nèi)存使用量的增加負(fù)責(zé)。一般而言,使用大量內(nèi)存的應(yīng)用程序通常會導(dǎo)致其它的一些性能問題,比如緩存缺失、轉(zhuǎn)換后援緩沖器(TLB)缺失以及緩存交換變慢等問題。就需要弄清楚它用的內(nèi)存類型是什么以及造成內(nèi)存使用增長的原因。哪些函數(shù)分配了大量的棧,可以使用gdb工具。

圖2 配置檢查時分析內(nèi)存數(shù)據(jù)的策略

參數(shù)調(diào)整

大頁配置

分頁是將程序分配到磁盤的過程,頁面空間是操作系統(tǒng)在磁盤分區(qū)上創(chuàng)建的文件,用于存儲當(dāng)前未使用的用戶程序。當(dāng)存在內(nèi)存瓶頸時,可考慮執(zhí)行調(diào)整內(nèi)存大小、資源控制等進(jìn)行調(diào)優(yōu),其中重要的內(nèi)存調(diào)優(yōu)原則是,保證程序保留在主存中并且避免換頁和交換經(jīng)常發(fā)生。在Linux中,頁面大小通常為4KB或8KB,頁面大小是通過/usr/src/kernels/3.10.0-1160.el7.x86_64/arch/x86/include/asm/elf.h目錄下內(nèi)核頭文件中的變量EXEC_P AGESIZE定義的。

在Linux中有許多設(shè)置大頁面的方法,通常用于創(chuàng)建巨頁面。

調(diào)整swap

當(dāng)物理內(nèi)存完全被使用或系統(tǒng)需要額外內(nèi)存時,此時需要使用虛擬內(nèi)存swap設(shè)備。當(dāng)系統(tǒng)上沒有空閑內(nèi)存可用的時候,操作系統(tǒng)開始將內(nèi)存中最少被使用的數(shù)據(jù)分頁調(diào)度到磁盤的swap區(qū)域。

改進(jìn)活躍和非活躍內(nèi)存的處理。當(dāng)內(nèi)核想釋放內(nèi)存中的一個分頁時,它需要在兩種選擇之間作出權(quán)衡:一種是從進(jìn)程的內(nèi)存中換出一個分頁,另一種則是它能從分頁Cache中丟棄一個分頁。為了做出這個決定,內(nèi)核將執(zhí)行下面的計算:

swap_tendency%20%3D%20mapped_ratio%2F2%20%2B%20distress%20%2B%20vm_swapiness

如果swap_tendency低于100,內(nèi)核將從分頁中回收一個分頁;如果大于等于100,一個進(jìn)程內(nèi)存空間的一部分將有資格獲得交換。

內(nèi)存同頁合并

當(dāng)虛擬機(jī)運(yùn)行完全相同的操作系統(tǒng)或工作量的時候,一些內(nèi)存分頁將大概率有相同的內(nèi)容。使用內(nèi)核同頁合并(Kernel Samepage Merging,KSM)功能可使總共的內(nèi)存使用減少,因為它可以將那些完全相同的分頁合并到一個內(nèi)存分頁中。

KSM將使用兩個服務(wù):ksm服務(wù)實際地掃描內(nèi)存和合并分頁,ksmtuned服務(wù)控制ksm是否掃描內(nèi)存及如何積極掃描內(nèi)存。使用ksmtuned服務(wù)手段調(diào)整ksm通常更為有用,配置ksmtuned服務(wù)可以使用/etc/ksmtuned.conf文件。

當(dāng)虛擬機(jī)運(yùn)行完全相同的操作系統(tǒng)或工作量的時候,一些內(nèi)存分頁將大概率有相同的內(nèi)容。使用內(nèi)核同頁合并(Kernel Samepage Merging,KSM)功能可使總共的內(nèi)存使用減少,因為它可以將那些完全相同的分頁合并到一個內(nèi)存分頁中。

KSM將使用兩個服務(wù):ksm服務(wù)實際地掃描內(nèi)存和合并分頁,ksmtuned服務(wù)控制ksm是否掃描內(nèi)存及如何積極掃描內(nèi)存。使用ksmtuned服務(wù)手段調(diào)整ksm通常更為有用,配置ksmtuned服務(wù)可以使用/etc/ksmtuned.conf文件。

資源控制

基礎(chǔ)的資源控制包括設(shè)置主存限制和虛擬內(nèi)存限制,可以用ulimit命令實現(xiàn)。Linux中,控制組cgroup的內(nèi)存子系統(tǒng)可提供多種附加控制,如下:

  • Memory.memsw.limit_in_bytes :允許的最大內(nèi)存和交換空間,單位是字節(jié)

  • Memory.limit_in_bytes:允許的最大用戶內(nèi)存,包括文件緩存,單位是字節(jié)

  • Memory.swappiness:類似之前描述的vm.swappiness,差別是可以設(shè)置于cgroup

  • Memory.oom_contro1:設(shè)置為0,允許內(nèi)存溢出終結(jié)者運(yùn)用于這個cgroup,或者設(shè)置為1,禁用


自編教材分享:第四章—系統(tǒng)配置優(yōu)化(一)的評論 (共 條)

分享到微博請遵守國家法律
海晏县| 如皋市| 赣州市| 玛曲县| 松溪县| 赤峰市| 腾冲县| 武陟县| 房山区| 乳山市| 七台河市| 东港市| 科尔| 开化县| 金寨县| 新安县| 准格尔旗| 赤壁市| 高尔夫| 鲁山县| 陆河县| 绥芬河市| 佳木斯市| 宿迁市| 保靖县| 来宾市| 拜泉县| 西丰县| 博爱县| 胶南市| 昌吉市| 武冈市| 吉林省| 京山县| 房产| 马关县| 贺兰县| 安阳市| 呈贡县| 富民县| 阳西县|