<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          深入理解基于鯤鵬處理器的極致性能優(yōu)化

          共 7359字,需瀏覽 15分鐘

           ·

          2024-07-13 15:21

          更多內(nèi)容請(qǐng)參考“鯤鵬CPU軟件性能調(diào)優(yōu)(精編版)”,從硬件特點(diǎn)分析如何進(jìn)行性能調(diào)優(yōu),同時(shí)還介紹了項(xiàng)目中性能調(diào)優(yōu)的思路和常用性能采集工具。終極版:服務(wù)器基礎(chǔ)知識(shí)全解(182頁(yè)P(yáng)PT)和“2024中國(guó)服務(wù)器CPU行業(yè)概覽:信創(chuàng)帶動(dòng)服務(wù)器CPU國(guó)產(chǎn)化”。


          鯤鵬處理器為核心的華為TaiShan服務(wù)器在國(guó)產(chǎn)服務(wù)器中可以說(shuō)是名列前茅的。不僅僅是其高效的處理性能,還有針對(duì)鯤鵬處理器進(jìn)行深度優(yōu)化的原生應(yīng)用以及不斷壯大的共建鯤鵬社區(qū)。下面以鯤鵬處理器的軟硬件性能優(yōu)化為例,深入理解更為底層的技術(shù)方案。

          以一個(gè)4800*4800矩陣乘法為例闡述性能調(diào)優(yōu)的重要性

          為了實(shí)現(xiàn)4800*4800的矩陣乘法,我們有多種方式,例如可以使用python實(shí)現(xiàn),可以使用C語(yǔ)言實(shí)現(xiàn),進(jìn)一步地,還可以使用C語(yǔ)言中的多線程并行運(yùn)算來(lái)實(shí)現(xiàn)。當(dāng)然,不同方式實(shí)現(xiàn)的方法在計(jì)算性能上也是不一樣的。使用python這樣的解釋性語(yǔ)言,其大概需要耗費(fèi)61162秒;使用C語(yǔ)言大概需要耗費(fèi)757秒;而將原始矩陣進(jìn)行拆分,使用C語(yǔ)言的并行計(jì)算,則可以將計(jì)算時(shí)間縮短到47秒。如果單從實(shí)現(xiàn)方式上來(lái)看的話,這個(gè)47秒相較于61162秒已經(jīng)是縮短了1300多倍了,但是如果我們?cè)谟布O(shè)施層面進(jìn)行有針對(duì)地優(yōu)化,我們會(huì)發(fā)現(xiàn)另一個(gè)世界。在將C語(yǔ)言并行計(jì)算與高效緩存優(yōu)化結(jié)合之后,該計(jì)算時(shí)間可節(jié)省至6.02秒。而如果使用鯤鵬的NEON向量指令進(jìn)行計(jì)算優(yōu)化,可縮短至1.99秒,這就是鯤鵬的極致性能優(yōu)化。

          從馮諾依曼架構(gòu)看性能調(diào)優(yōu)

          在馮諾依曼架構(gòu)下,計(jì)算機(jī)可以抽象為存儲(chǔ)器、控制器、輸入以及輸出設(shè)備。存儲(chǔ)器分為內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器,程序在未運(yùn)行時(shí)存儲(chǔ)在外部存儲(chǔ)器中,而在運(yùn)行時(shí)則是加載到內(nèi)部存儲(chǔ)器中進(jìn)行各種運(yùn)算和處理。簡(jiǎn)單地,我們可以將計(jì)算機(jī)調(diào)優(yōu)抽象為四個(gè)部分,分別為:CPU/內(nèi)存、網(wǎng)卡、磁盤、應(yīng)用。

          基于鯤鵬處理器的軟硬加速能力概覽

          鯤鵬處理器可針對(duì)應(yīng)用實(shí)現(xiàn)軟加速和硬加速。其中,軟加速包括單核加速和多核加速;硬加速則包括芯片級(jí)別的加速引擎。

          從編譯器和JDK的優(yōu)化看鯤鵬的單核軟加速能力

          當(dāng)前市面上常見(jiàn)的CPU架構(gòu)是多流水線架構(gòu),其CPU指令是并發(fā)執(zhí)行的。在這種情況下,某兩條執(zhí)行流水線存在相互依賴關(guān)系,那么一條流水線出現(xiàn)阻塞,另一條流水線則也有可能出現(xiàn)阻塞。針對(duì)上述問(wèn)題,華為編譯器進(jìn)行了多種優(yōu)化,其中包括:
          1. 指令布局優(yōu)化:拆分函數(shù)代碼,按照冷熱指令重新排序,提升指令Cache命中率
          2. 內(nèi)存布局優(yōu)化:按照內(nèi)存數(shù)據(jù)訪問(wèn)頻度,組合熱數(shù)據(jù)區(qū)域,提升數(shù)據(jù)Cache命中率
          3. 循環(huán)優(yōu)化:分析循環(huán)迭代間數(shù)據(jù)訪存依賴關(guān)系,對(duì)無(wú)依賴的循環(huán)并行到多核執(zhí)行,無(wú)依賴的數(shù)據(jù)自動(dòng)矢量化計(jì)算,加速程序運(yùn)行。
          對(duì)于Java開發(fā)者來(lái)說(shuō),JDK是再熟悉不過(guò)了。華為針對(duì)鯤鵬服務(wù)器推出的畢昇JDK也進(jìn)行了如下優(yōu)化:
          1. JIT編譯優(yōu)化,GC內(nèi)存回收管理優(yōu)化提升內(nèi)存管理性能
          2. JVM循環(huán)、向量化、序列化技術(shù),提升程序執(zhí)行性能

          基于NUMA的多核性能優(yōu)化

          2006年之后,CPU開始邁進(jìn)多核的時(shí)代,剛開始的時(shí)候核數(shù)還比較少,采用的是SMP(對(duì)稱多處理器)架構(gòu)。在第一代CPU架構(gòu)下,多核心可在系統(tǒng)層面做均衡調(diào)度,也就是多個(gè)核心都可以訪問(wèn)所有內(nèi)存區(qū)域,具體如下圖所示:
          由上圖我們也發(fā)現(xiàn)了一個(gè)問(wèn)題,CPU核心在訪問(wèn)內(nèi)存區(qū)域時(shí),都是通過(guò)單一的內(nèi)存控制器去做的控制。顯然,當(dāng)核心數(shù)多了之后,單一控制器必然制約CPU的性能。

          那么針對(duì)上述問(wèn)題,NUMA架構(gòu)便應(yīng)運(yùn)而生,其架構(gòu)如下圖所示:
          在NUMA架構(gòu)下,將多核分為不同的NUMA節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)有自己的內(nèi)存控制器。CPU核心通過(guò)NUMA節(jié)點(diǎn)內(nèi)的內(nèi)存控制器訪問(wèn)屬于該節(jié)點(diǎn)的內(nèi)存區(qū)域,當(dāng)然也可以通過(guò)總線訪問(wèn)其他NUMA節(jié)點(diǎn)的內(nèi)存區(qū)域。在這種情況下,隨著核數(shù)增多,內(nèi)存控制器也隨之增多,從而很好解決內(nèi)存訪問(wèn)瓶頸問(wèn)題。

          然而,從上圖我們也會(huì)發(fā)現(xiàn)NUMA架構(gòu)的一個(gè)問(wèn)題,由于內(nèi)存在物理上是分布式的,不同的核心訪問(wèn)不同內(nèi)存的時(shí)間是不同的。如果核心訪問(wèn)的是最近的內(nèi)存,那么其效率必然是最高的,如下圖所示,Core0訪問(wèn)內(nèi)存區(qū)域1的成本是低于內(nèi)存區(qū)域2、3、4的。
          當(dāng)然,鯤鵬處理器也完成了內(nèi)存訪問(wèn)最短路徑的方法。利用NUMA-Aware親和性資源規(guī)劃實(shí)現(xiàn)進(jìn)程與內(nèi)存之間的距離更短,具體如圖所示。

          以Nginx為例展示NUMA的優(yōu)化效果

          NGINX 是用于 Web 服務(wù)、反向代理、緩存、負(fù)載平衡、媒體流等的開源軟件。它最初是為實(shí)現(xiàn)最高性能和穩(wěn)定性而設(shè)計(jì)的 Web 服務(wù)器。除了 HTTP 服務(wù)器功能,NGINX 還可以用作電子郵件(IMAP、POP3 和 SMTP)的代理服務(wù)器以及 HTTP、TCP 和 UDP 服務(wù)器的反向代理和負(fù)載平衡器。
          從數(shù)據(jù)傳輸角度來(lái)說(shuō),數(shù)據(jù)到達(dá)業(yè)務(wù)進(jìn)程中需要進(jìn)行兩次拷貝,第一次是通過(guò)網(wǎng)口拷貝到內(nèi)核進(jìn)程,第二次是將內(nèi)核進(jìn)程中的的數(shù)據(jù)再拷貝的業(yè)務(wù)進(jìn)程中,由上圖可見(jiàn),兩階段的數(shù)據(jù)拷貝是離散的。而在NUMA優(yōu)化情況下,可將網(wǎng)口、內(nèi)核進(jìn)程以及Nginx業(yè)務(wù)進(jìn)程進(jìn)行綁定。經(jīng)實(shí)驗(yàn)驗(yàn)證,經(jīng)過(guò)優(yōu)化的Nginx端到端的時(shí)延可以有15%左右的提升。

          具體來(lái)說(shuō),可通過(guò)如下三種方式實(shí)現(xiàn)NUMA綁核配置方法:

          • 使用系統(tǒng)工具numactl設(shè)置:numactl -C 0-15 process name -C: Core scope
          • 在代碼中調(diào)用親和性設(shè)置參數(shù):int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t*mask)
          • 多數(shù)開源軟件中提供了配置接口:nginx中可在其配置文件nginx.conf中調(diào)整worker_cpu_affinity參數(shù)
          基于鯤鵬技術(shù)優(yōu)勢(shì)構(gòu)建加速庫(kù)

          除了上述描述的軟加速能力之外,鯤鵬還提供了硬加速能力,針對(duì)基礎(chǔ)加速、壓縮加速、加解密加速、多媒體加速四類業(yè)務(wù)提供了9大加速庫(kù),典型場(chǎng)景達(dá)到了10%-100#的性能提升,具體如下圖所示。

          以O(shè)penSSL和壓縮算法為例介紹加速庫(kù)實(shí)現(xiàn)原理

          如下圖所示,當(dāng)Web調(diào)用OpenSSL時(shí),在不修改代碼的情況下,通過(guò)路徑2加載硬件加速庫(kù)將計(jì)算卸載到芯片中做計(jì)算。
          在壓縮算法中,鯤鵬支持gzip/zlib、ZSTD以及snappy壓縮算法,基于高效的壓縮引擎,鯤鵬處理器可大幅縮短文件的壓縮時(shí)間,具體如下圖所示:

          京東以鯤鵬RSA加密加速引擎,提升Web應(yīng)用Https性能

          京東的Web應(yīng)用在未切換到鯤鵬加速方案之前,其使用的是傳統(tǒng)的加速方案,通過(guò)QAT卡進(jìn)行加密加速,其性能是相對(duì)較低的。而在使用鯤鵬加速方案之后,其HTTPS短連接性能提升了33%,具體如下圖所示:

          優(yōu)化磁盤與網(wǎng)卡,給鯤鵬處理器一個(gè)更好的運(yùn)行環(huán)境

          在前面提到的馮諾依曼架構(gòu)中我們說(shuō)到,除了CPU/內(nèi)存以外,磁盤加載到內(nèi)存過(guò)程的快慢也會(huì)影響業(yè)務(wù)的性能。下圖展示了磁盤數(shù)據(jù)加載到應(yīng)用內(nèi)存中的流程。可以通過(guò)選用XFS文件系統(tǒng)、設(shè)置文件預(yù)讀、臟數(shù)據(jù)刷新以及IO優(yōu)化提高內(nèi)存讀取速度。
          網(wǎng)卡中斷產(chǎn)生頻率也會(huì)影響應(yīng)用的吞吐和延遲。下圖展示了數(shù)據(jù)包請(qǐng)求到來(lái)之后的抽象邏輯圖。簡(jiǎn)單來(lái)說(shuō),當(dāng)數(shù)據(jù)到達(dá)網(wǎng)卡時(shí),網(wǎng)卡會(huì)通知CPU其接收到了數(shù)據(jù)包,同時(shí)產(chǎn)生中斷。
          而通過(guò)調(diào)整網(wǎng)卡中斷策略,可以在低時(shí)延和高吞吐之間取更好的平衡點(diǎn)。

          通過(guò)應(yīng)用調(diào)優(yōu)充分發(fā)揮硬件性能

          從一般的應(yīng)用調(diào)優(yōu)角度來(lái)說(shuō),我們可以通過(guò)提高并發(fā)、數(shù)據(jù)緩存以及異步讀寫的方式來(lái)提高應(yīng)用的性能。然而我們也會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,如果我們CPU核心很多,那是不是并發(fā)越多越好,如果我們內(nèi)存很大,那是不是數(shù)據(jù)緩存越多越好呢?其實(shí)不一定,軟件在適配硬件的同時(shí),也要注意幾點(diǎn)細(xì)節(jié),比如說(shuō),鎖機(jī)制以及Cache機(jī)制。

          在多線程中,多個(gè)線程在訪問(wèn)一些公共變量時(shí)會(huì)出現(xiàn)搶鎖的情況,而搶鎖則會(huì)帶來(lái)CPU時(shí)間片消耗。當(dāng)線程數(shù)越來(lái)越多時(shí),搶鎖可能帶來(lái)的CPU時(shí)間片消耗也越多,從而導(dǎo)致性能下降。針對(duì)該情況,我們需要通過(guò)無(wú)鎖編程、大鎖變小鎖或者高性能原子操作指令等方式來(lái)優(yōu)化并發(fā)性能。

          在鎖與內(nèi)存優(yōu)化中,Tcmalloc通過(guò)減少內(nèi)存分配中的鎖以提升高并發(fā)下的性能。
          再來(lái)說(shuō)一下針對(duì)鯤鵬的Cache機(jī)制優(yōu)化來(lái)避免內(nèi)存中偽共享的訪問(wèn)。CPU在將數(shù)據(jù)讀取到CPU內(nèi)存中時(shí)是以CacheLine大小進(jìn)行讀取的。在鯤鵬CPU中,CacheLine大小為128字節(jié)。在該128字節(jié)中,任何一個(gè)數(shù)據(jù)發(fā)生變化,那么整個(gè)CacheLine都會(huì)被置為無(wú)效。以下圖為例,當(dāng)有一個(gè)寫頻繁的變量和一個(gè)讀頻繁的變量放在一個(gè)CacheLine中,當(dāng)寫頻繁的變量發(fā)生變化,會(huì)導(dǎo)致整個(gè)CacheLine失效,使得需要讀取讀頻繁的變量時(shí)不得不再?gòu)耐獠繀^(qū)域進(jìn)行加載。
          以MySQL 5.7.12為例,我們發(fā)現(xiàn)其內(nèi)存對(duì)CacheLine進(jìn)行硬編碼,并設(shè)置為64,在進(jìn)行調(diào)優(yōu)并將其設(shè)置為鯤鵬的CacheLine大小之后,整體性能提升了5%。

          鯤鵬性能調(diào)優(yōu)十板斧

          鯤鵬社區(qū)根據(jù)使用經(jīng)驗(yàn),總結(jié)了性能調(diào)優(yōu)十板斧。
          在CPU和內(nèi)存方面,可針對(duì)如下方面進(jìn)行調(diào)整:
          1. 調(diào)整內(nèi)存頁(yè)大小
          2. CPU預(yù)取
          3. 修改線程調(diào)度策略
          在磁盤方面可針對(duì)如下方面進(jìn)行調(diào)整:
          1. 臟數(shù)據(jù)刷新
          2. 異步文件操作(libaio)
          3. 文件系統(tǒng)參數(shù)
          在網(wǎng)卡方面可針對(duì)如下方面進(jìn)行調(diào)整:
          1. 網(wǎng)卡多隊(duì)列
          2. 開啟網(wǎng)卡TSO
          3. 開啟網(wǎng)卡CSUM
          在應(yīng)用方面,可針對(duì)如下方面進(jìn)行調(diào)整:
          1. 優(yōu)化編譯選項(xiàng)
          2. 文件緩存機(jī)制
          3. 緩存執(zhí)行結(jié)果
          4. NENO指令加速

          以MariaDB為例看性能調(diào)優(yōu)流程

          通常來(lái)說(shuō),性能調(diào)優(yōu)可以分為三個(gè)步驟:監(jiān)控、分析以及優(yōu)化。在優(yōu)化之后,如果未達(dá)預(yù)期,那么我們還需要再進(jìn)行監(jiān)控、分析以及優(yōu)化,如此反復(fù)。具體如下圖所示:
          在監(jiān)控階段,我們需要使用監(jiān)控工具針對(duì)CPU、內(nèi)存、磁盤以及網(wǎng)卡各項(xiàng)指標(biāo)進(jìn)行記錄。CPU的記錄指標(biāo)包括硬中斷、軟中斷以及動(dòng)態(tài)的CPU時(shí)間片占比;內(nèi)存的記錄指標(biāo)包括numa內(nèi)存訪問(wèn)命中率,內(nèi)存是否足夠;磁盤的記錄包括iowait以及磁盤使用率等;網(wǎng)卡則需記錄其傳輸帶寬等。通過(guò)上述收集的指標(biāo)分析判斷優(yōu)化方向。

          在優(yōu)化階段,CPU方面可通過(guò)提高并發(fā)和線程綁核的方式,內(nèi)存方面可通過(guò)減少跨numa訪問(wèn)、大頁(yè)內(nèi)存的方式,磁盤方面可通過(guò)I/O調(diào)度策略以及異步I/O的方式,而網(wǎng)卡方面則可通過(guò)中斷聚合、網(wǎng)卡中斷綁核的方式進(jìn)行。

          MariaDB性能優(yōu)化-監(jiān)控

          sysbench壓測(cè)MariDB 10.3.8數(shù)據(jù)庫(kù),OLTP模型讀寫比例為1:1。下圖為監(jiān)控示意圖:
          基于上圖,我們可以發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)線程數(shù)增多時(shí),CPU使用率越來(lái)越高,而TPS在到達(dá)頂點(diǎn)之后反而下降了。在綜合磁盤和網(wǎng)卡未到達(dá)性能瓶頸的情況下,我們可以得出CPU的使用瓶頸。

          MariaDB性能優(yōu)化-分析

          當(dāng)CPU時(shí)業(yè)務(wù)的性能瓶頸時(shí),可通過(guò)分析進(jìn)程熱點(diǎn)函數(shù)來(lái)尋找優(yōu)化空間,使用perf工具對(duì)本測(cè)試用例中的熱點(diǎn)函數(shù)分析如下:隨著并發(fā)線程數(shù)的增多,CPU的時(shí)間片集中在了鎖的爭(zhēng)搶中,這部分無(wú)用功造成了CPU資源的浪費(fèi)。

          MariaDB性能優(yōu)化-優(yōu)化

          通過(guò)查閱MariaDB資料,我們可以通過(guò)調(diào)整一下參數(shù)提高性能。
          1. innodb_thread_concurrency:控制并發(fā)線程數(shù),默認(rèn)值0表示,不限制并發(fā)
          2. innodb_sync_spin_loops:減少原子操作輪休次數(shù)
          3. innodb_spin_wait_delay:增加原子操作輪休間隔時(shí)間

          總結(jié)

          1. CPU/內(nèi)存、磁盤、網(wǎng)卡、應(yīng)用,是我們性能調(diào)優(yōu)的四個(gè)主要方向
          2. 采集性能指標(biāo)、分析性能瓶頸、優(yōu)化相關(guān)參數(shù)代碼,是調(diào)優(yōu)的基本思路
          3. 充分利用硬件資源才能發(fā)揮軟件的最優(yōu)性能
          4. 時(shí)延、吞吐、并發(fā)需要尋找一個(gè)均衡點(diǎn)
          來(lái)源:https://lrting.top/backend/4046/

          CPU技術(shù)篇



          免責(zé)申明:本號(hào)聚焦相關(guān)技術(shù)分享,內(nèi)容觀點(diǎn)不代表本號(hào)立場(chǎng),可追溯內(nèi)容均注明來(lái)源,發(fā)布文章若存在版權(quán)等問(wèn)題,請(qǐng)留言聯(lián)系刪除,謝謝。

          推薦閱讀
          更多架構(gòu)相關(guān)技術(shù)知識(shí)總結(jié)請(qǐng)參考“架構(gòu)師全店鋪技術(shù)資料打包(全)”相關(guān)電子書(41本技術(shù)資料打包匯總詳情可通過(guò)“閱讀原文”獲取)。
          全店內(nèi)容持續(xù)更新,現(xiàn)下單“架構(gòu)師技術(shù)全店資料打包匯總(全)”一起發(fā)送“服務(wù)器基礎(chǔ)知識(shí)全解(終極版)和“存儲(chǔ)系統(tǒng)基礎(chǔ)知識(shí)全解(終極版)pdf及ppt版本,后續(xù)可享全店內(nèi)容更新“免費(fèi)”贈(zèng)閱,價(jià)格僅收249元(原總價(jià)339元)。

          溫馨提示:

          掃描二維碼關(guān)注公眾號(hào),點(diǎn)擊閱讀原文鏈接獲取架構(gòu)師技術(shù)全店資料打包匯總(全)電子書資料詳情



          瀏覽 247
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷色无码 | 亚洲男女操逼 | 奇米伊人精品在线 | 俺去俺来也www色视频 | av有码第一页 |