王俊杰
【摘 要】服務(wù)器CPU優(yōu)化是以提高應(yīng)用程序、服務(wù)或系統(tǒng)能力為目的。那么如何才能實(shí)現(xiàn)對(duì)應(yīng)用程序的性能調(diào)優(yōu)呢?這里涉及到很多的內(nèi)容,包括Linux內(nèi)核、CPU架構(gòu)以及內(nèi)核對(duì)資源的分配以及管理。本文從CPU架構(gòu)入手,對(duì)CPU優(yōu)化進(jìn)行探討。
【關(guān)鍵詞】CPU;性能優(yōu)化;架構(gòu)
一、架構(gòu)結(jié)構(gòu)介紹
在現(xiàn)行計(jì)算機(jī)硬件中,多核CPU或者多顆CPU共存以提高系統(tǒng)性能的性能情況非常常見。
SMP的全稱是"對(duì)稱多處理"(Symmetrical Multi-Processing)技術(shù),是指在一個(gè)計(jì)算機(jī)上匯集了一組處理器(多CPU),各CPU之間共享內(nèi)存子系統(tǒng)以及總線結(jié)構(gòu)。是一種常見的并行技術(shù)。這種架構(gòu)對(duì)內(nèi)存的要求就更高了,也就是說(shuō),不是CPU數(shù)量越多,性能提升就越快。
NUMA: 非一致性內(nèi)存訪問(wèn)架構(gòu) Non Uniform Memory Access Architecture。概念:現(xiàn)代計(jì)算機(jī)的處理速度比它的主存速度快不少。而在早期的計(jì)算和數(shù)據(jù)處理中,CPU通常比它的主存慢。但是隨著超級(jí)計(jì)算機(jī)的到來(lái),處理器和存儲(chǔ)器的性能在二十世紀(jì)六十年代達(dá)到平衡。自從那個(gè)時(shí)候,CPU常常對(duì)數(shù)據(jù)感到饑餓而且必須等待存儲(chǔ)器的數(shù)據(jù)到來(lái)。為了解決這個(gè)問(wèn)題,很多在80和90年代的超級(jí)計(jì)算機(jī)設(shè)計(jì)專注于提供高速的存儲(chǔ)器訪問(wèn),使得計(jì)算機(jī)能夠高速地處理其他系統(tǒng)不能處理的大數(shù)據(jù)集。
限制訪問(wèn)存儲(chǔ)器的次數(shù)是現(xiàn)代計(jì)算機(jī)提高性能的要點(diǎn)。對(duì)于商品化的處理器,這意味著設(shè)置數(shù)量不斷增長(zhǎng)的高速緩存和使用不斷變得精巧復(fù)雜的算法以防止“緩存數(shù)據(jù)缺失(cache missed)”。但是操作系統(tǒng)和應(yīng)用程序大小的明顯增長(zhǎng)壓制了前述的緩存技術(shù)造成的提升。沒有使用NUMA的多處理器系統(tǒng)使得問(wèn)題更糟糕。因?yàn)橥粫r(shí)間只能有一個(gè)處理器訪問(wèn)計(jì)算機(jī)的存儲(chǔ)器,所以在一個(gè)系統(tǒng)中可能存在多個(gè)處理器在等待訪問(wèn)存儲(chǔ)器。
NUMA通過(guò)提供分離的存儲(chǔ)器給各個(gè)處理器,避免當(dāng)多個(gè)處理器訪問(wèn)同一個(gè)存儲(chǔ)器產(chǎn)生的性能損失來(lái)試圖解決這個(gè)問(wèn)題。對(duì)于涉及到分散的數(shù)據(jù)的應(yīng)用(在服務(wù)器和類似于服務(wù)器的應(yīng)用中很常見),NUMA可以通過(guò)一個(gè)共享的存儲(chǔ)器提高性能至n倍,而n大約是處理器(或者分離的存儲(chǔ)器)的個(gè)數(shù)。
當(dāng)然,不是所有數(shù)據(jù)都局限于一個(gè)任務(wù),所以多個(gè)處理器可能需要同一個(gè)數(shù)據(jù)。為了處理這種情況,NUMA系統(tǒng)包含了附加的軟件或者硬件來(lái)移動(dòng)不同存儲(chǔ)器的數(shù)據(jù)。這個(gè)操作降低了對(duì)應(yīng)于這些存儲(chǔ)器的處理器的性能,所以總體的速度提升受制于運(yùn)行任務(wù)的特點(diǎn)。
NUMA最初是用于將單一處理器連接到多個(gè)內(nèi)存條中。因?yàn)镃PU 制造商改進(jìn)了其工藝并縮小了芯片尺寸,因此可在一個(gè)包裝中包括多個(gè) CPU核。這些CPU核以集群形式尋址以便每個(gè)核都有相同的訪問(wèn)本地內(nèi)存條的時(shí)間,同時(shí)可在核之間共享緩存。
每個(gè)動(dòng)作都需要通過(guò)多個(gè)內(nèi)存控制器,這樣訪問(wèn)在嘗試訪問(wèn)遠(yuǎn)程內(nèi)存地址時(shí),時(shí)間會(huì)延長(zhǎng)兩倍以上。因此多核系統(tǒng)中主要性能考量是保證以最有效的方式進(jìn)行信息傳遞,即通過(guò)最短最迅速的路徑。
二、優(yōu)化方法簡(jiǎn)介
要為優(yōu)化CPU性能配置程序,需要了解:
1、系統(tǒng)的拓?fù)?,?zhí)行程序的核,以及最接近的內(nèi)存條位置。
2、換一句話來(lái)講,如果指定某CPU就之訪問(wèn)自己的內(nèi)存塊,效率將提高。
CPU affinity CPU姻親關(guān)系 CPU綁定
將某些進(jìn)程啟動(dòng)起來(lái)之后直接綁定在某顆CPU上(或某個(gè)CPU的某些核上),讓該進(jìn)程只能在該CPU上運(yùn)行,不會(huì)被調(diào)度到其他CPU上,從而不會(huì)發(fā)生交叉內(nèi)存訪問(wèn)的情況,提高內(nèi)存使用率。但這么做有可能會(huì)使得某一個(gè)CPU很忙而其他的CPU很閑,也會(huì)降低資源的使用率,那么此時(shí),需要有一個(gè)平衡點(diǎn)。
在numa架構(gòu)中,同一物理內(nèi)存會(huì)被區(qū)分成為多個(gè)node,每個(gè)CPU對(duì)應(yīng)著一個(gè)專屬的node。
[root@localhost tftpboot]# numastat
node0
numa_hit 2071673
numa_miss 0
numa_foreign 0
interleave_hit 14414
local_node 2071673
other_node 0
numa_hit 表示該段內(nèi)存的數(shù)據(jù)命中總數(shù);numa_miss表示該段內(nèi)存數(shù)據(jù)未命中總數(shù);當(dāng)numa_miss出現(xiàn)次數(shù)過(guò)多,這個(gè)時(shí)候需要進(jìn)行進(jìn)程和CPU進(jìn)行綁定。numa_foreign表示當(dāng)前結(jié)點(diǎn)被其他(非本地)cpu訪問(wèn)的次數(shù),若過(guò)高,可想像為提高本地CPU訪問(wèn)效率,也可進(jìn)行綁定;
CPU隔離:為了讓沒綁定到指定CPU上的進(jìn)程不再被調(diào)度到該CPU上,盡量減少或者隔絕進(jìn)程切換帶來(lái)的系統(tǒng)消耗,從而提高系統(tǒng)效率,把這個(gè)指定的CPU從所有進(jìn)程中能被調(diào)度到的一堆CPU中隔離開來(lái).可以向/etc/grub.conf配置文件中,傳遞內(nèi)核啟動(dòng)參數(shù):
isolcpus= cpu number,…,cpu number
當(dāng)系統(tǒng)啟動(dòng)時(shí),ioslcpu參數(shù)設(shè)定某些CPU隔離之后,內(nèi)核將不會(huì)使已經(jīng)啟動(dòng)了的某些進(jìn)程被調(diào)度到隔離的CPU上,那么這樣做就能夠?qū)⑽覀兯枰綦x的CPU預(yù)留起來(lái),以供某些特殊進(jìn)程綁定使用。
其他的進(jìn)程不再被調(diào)度到該CPU上,但不經(jīng)過(guò)設(shè)置無(wú)法不處理外設(shè)的中斷請(qǐng)求,此時(shí),為了讓該CPU要么處理綁定的進(jìn)程,要么只切換到內(nèi)核模式,考慮將該CPU上將中斷處理的功能屏蔽。
應(yīng)該將中斷綁定至那些非隔離的CPU上,從而避免那些隔離的CPU處理中斷進(jìn)程(程序)。
調(diào)度域
將所有CPU放到(組織)一個(gè)所謂的根域下,然后根據(jù)需求,將根域劃分為若干個(gè)子域,不管是根域還是子域,劃分的標(biāo)準(zhǔn)均以cpu本身來(lái)進(jìn)行劃分。
將進(jìn)程和某個(gè)子域進(jìn)行綁定,當(dāng)進(jìn)程與某子域綁定之后,進(jìn)程只能在子域中的CPU內(nèi)進(jìn)行調(diào)度。
若某進(jìn)程綁定的是根域,那么表示該進(jìn)程可在當(dāng)前所有的CPU上進(jìn)行調(diào)度。而對(duì)于進(jìn)程運(yùn)行所需資源而言,除了CPU更關(guān)鍵的就是內(nèi)存了。在非numa結(jié)構(gòu)下,內(nèi)存段對(duì)于所有CPU而言就只有一段,通過(guò)這個(gè)調(diào)度域本身也能簡(jiǎn)單的將內(nèi)存段進(jìn)行管理。
【參考文獻(xiàn)】
[1]崔連和.Linux系統(tǒng)與網(wǎng)絡(luò)管理[M].機(jī)械工業(yè)出版社,2014.3.
[2]錢峰, 許斗. linux網(wǎng)絡(luò)操作系統(tǒng)配置與管理[M].高等教育出版社,2015.1
[3]何明.linux系統(tǒng)管理[M].清華大學(xué)出版社, 2013.4
[4]沈健,王夢(mèng)龍.linux系統(tǒng)管理[M].華東理工大學(xué)出版社,2014.8
[5]朱龍,賈如春.linux系統(tǒng)管理[M].人民郵電出版社,2015.8