【云駐共創】 深入理解基于華為鯤鵬處理器的極致性能優化

      網友投稿 1697 2025-03-31

      鯤鵬處理器為核心的華為TaiShan服務器在國產服務器中可以說是名列前茅的。不僅僅是其高效的處理性能,還有針對鯤鵬處理器進行深度優化的原生應用以及不斷壯大的共建鯤鵬社區。下面以鯤鵬處理器的軟硬件性能優化為例,深入理解更為底層的技術方案,給你一個選擇它的理由。


      1. 以一個4800*4800矩陣乘法為例闡述性能調優的重要性

      為了實現4800*4800的矩陣乘法,我們有多種方式,例如可以使用python實現,可以使用C語言實現,進一步地,還可以使用C語言中的多線程并行運算來實現。當然,不同方式實現的方法在計算性能上也是不一樣的。使用python這樣的解釋性語言,其大概需要耗費61162秒;使用C語言大概需要耗費757秒;而將原始矩陣進行拆分,使用C語言的并行計算,則可以將計算時間縮短到47秒。如果單從實現方式上來看的話,這個47秒相較于61162秒已經是縮短了1300多倍了,但是如果我們在硬件設施層面進行有針對地優化,我們會發現另一個世界。在將C語言并行計算與高效緩存優化結合之后,該計算時間可節省至6.02秒。而如果使用鯤鵬的NEON向量指令進行計算優化,可縮短至1.99秒,這就是鯤鵬的極致性能優化。

      2. 從馮諾依曼架構看性能調優

      在馮諾依曼架構下,計算機可以抽象為存儲器、控制器、輸入以及輸出設備。存儲器分為內部存儲器和外部存儲器,程序在未運行時存儲在外部存儲器中,而在運行時則是加載到內部存儲器中進行各種運算和處理。簡單地,我們可以將計算機調優抽象為四個部分,分別為:CPU/內存、網卡、磁盤、應用。

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

      鯤鵬處理器可針對應用實現軟加速和硬加速。其中,軟加速包括單核加速和多核加速;硬加速則包括芯片級別的加速引擎。

      3.1. 從編譯器和JDK的優化看鯤鵬的單核軟加速能力

      當前市面上常見的CPU架構是多流水線架構,其CPU指令是并發執行的。在這種情況下,某兩條執行流水線存在相互依賴關系,那么一條流水線出現阻塞,另一條流水線則也有可能出現阻塞。針對上述問題,華為編譯器進行了多種優化,其中包括:

      指令布局優化:拆分函數代碼,按照冷熱指令重新排序,提升指令Cache命中率

      內存布局優化:按照內存數據訪問頻度,組合熱數據區域,提升數據Cache命中率

      循環優化:分析循環迭代間數據訪存依賴關系,對無依賴的循環并行到多核執行,無依賴的數據自動矢量化計算,加速程序運行。

      對于Java開發者來說,JDK是再熟悉不過了。華為針對鯤鵬服務器推出的畢昇JDK也進行了如下優化:

      JIT編譯優化,GC內存回收管理優化提升內存管理性能

      JVM循環、向量化、序列化技術,提升程序執行性能

      3.2. 基于NUMA的多核性能優化

      2006年之后,CPU開始邁進多核的時代,剛開始的時候核數還比較少,采用的是SMP(對稱多處理器)架構。在第一代CPU架構下,多核心可在系統層面做均衡調度,也就是多個核心都可以訪問所有內存區域,具體如下圖所示:

      由上圖我們也發現了一個問題,CPU核心在訪問內存區域時,都是通過單一的內存控制器去做的控制。顯然,當核心數多了之后,單一控制器必然制約CPU的性能。

      那么針對上述問題,NUMA架構便應運而生,其架構如下圖所示:

      在NUMA架構下,將多核分為不同的NUMA節點,各個節點有自己的內存控制器。CPU核心通過NUMA節點內的內存控制器訪問屬于該節點的內存區域,當然也可以通過總線訪問其他NUMA節點的內存區域。在這種情況下,隨著核數增多,內存控制器也隨之增多,從而很好解決內存訪問瓶頸問題。

      然而,從上圖我們也會發現NUMA架構的一個問題,由于內存在物理上是分布式的,不同的核心訪問不同內存的時間是不同的。如果核心訪問的是最近的內存,那么其效率必然是最高的,如下圖所示,Core0訪問內存區域1的成本是低于內存區域2、3、4的。

      當然,鯤鵬處理器也完成了內存訪問最短路徑的方法。利用NUMA-Aware親和性資源規劃實現進程與內存之間的距離更短,具體如圖所示。

      3.3. 以Nginx為例展示NUMA的優化效果

      NGINX 是用于 Web 服務、反向代理、緩存、負載平衡、媒體流等的開源軟件。 它最初是為實現最高性能和穩定性而設計的 Web 服務器。 除了 HTTP 服務器功能,NGINX 還可以用作電子郵件(IMAP、POP3 和 SMTP)的代理服務器以及 HTTP、TCP 和 UDP 服務器的反向代理和負載平衡器。

      從數據傳輸角度來說,數據到達業務進程中需要進行兩次拷貝,第一次是通過網口拷貝到內核進程,第二次是將內核進程中的的數據再拷貝的業務進程中,由上圖可見,兩階段的數據拷貝是離散的。而在NUMA優化情況下,可將網口、內核進程以及Nginx業務進程進行綁定。經實驗驗證,經過優化的Nginx端到端的時延可以有15%左右的提升。

      具體來說,可通過如下三種方式實現NUMA綁核配置方法:

      使用系統工具numactl設置:numactl -C 0-15 process name -C: Core scope

      在代碼中調用親和性設置參數:int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t*mask)

      多數開源軟件中提供了配置接口:nginx中可在其配置文件nginx.conf中調整worker_cpu_affinity參數

      3.4. 基于鯤鵬技術優勢構建加速庫

      除了上述描述的軟加速能力之外,鯤鵬還提供了硬加速能力,針對基礎加速、壓縮加速、加解密加速、多媒體加速四類業務提供了9大加速庫,典型場景達到了10%-100#的性能提升,具體如下圖所示。

      3.5. 以OpenSSL和壓縮算法為例介紹加速庫實現原理

      如下圖所示,當Web調用OpenSSL時,在不修改代碼的情況下,通過路徑2加載硬件加速庫將計算卸載到芯片中做計算。

      在壓縮算法中,鯤鵬支持gzip/zlib、ZSTD以及snappy壓縮算法,基于高效的壓縮引擎,鯤鵬處理器可大幅縮短文件的壓縮時間,具體如下圖所示:

      3.6. 京東以鯤鵬RSA加密加速引擎,提升Web應用Https性能

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

      4. 優化磁盤與網卡,給鯤鵬處理器一個更好的運行環境

      在前面提到的馮諾依曼架構中我們說到,除了CPU/內存以外,磁盤加載到內存過程的快慢也會影響業務的性能。下圖展示了磁盤數據加載到應用內存中的流程。可以通過選用XFS文件系統、設置文件預讀、臟數據刷新以及IO優化提高內存讀取速度。

      網卡中斷產生頻率也會影響應用的吞吐和延遲。下圖展示了數據包請求到來之后的抽象邏輯圖。簡單來說,當數據到達網卡時,網卡會通知CPU其接收到了數據包,同時產生中斷。

      而通過調整網卡中斷策略,可以在低時延和高吞吐之間取更好的平衡點。

      5. 通過應用調優充分發揮硬件性能

      從一般的應用調優角度來說,我們可以通過提高并發、數據緩存以及異步讀寫的方式來提高應用的性能。然而我們也會發現一個問題,如果我們CPU核心很多,那是不是并發越多越好,如果我們內存很大,那是不是數據緩存越多越好呢?其實不一定,軟件在適配硬件的同時,也要注意幾點細節,比如說,鎖機制以及Cache機制。

      在多線程中,多個線程在訪問一些公共變量時會出現搶鎖的情況,而搶鎖則會帶來CPU時間片消耗。當線程數越來越多時,搶鎖可能帶來的CPU時間片消耗也越多,從而導致性能下降。針對該情況,我們需要通過無鎖編程、大鎖變小鎖或者高性能原子操作指令等方式來優化并發性能。

      在鎖與內存優化中,Tcmalloc通過減少內存分配中的鎖以提升高并發下的性能。

      再來說一下針對鯤鵬的Cache機制優化來避免內存中偽共享的訪問。CPU在將數據讀取到CPU內存中時是以CacheLine大小進行讀取的。在鯤鵬CPU中,CacheLine大小為128字節。在該128字節中,任何一個數據發生變化,那么整個CacheLine都會被置為無效。以下圖為例,當有一個寫頻繁的變量和一個讀頻繁的變量放在一個CacheLine中,當寫頻繁的變量發生變化,會導致整個CacheLine失效,使得需要讀取讀頻繁的變量時不得不再從外部區域進行加載。

      以MySQL 5.7.12為例,我們發現其內存對CacheLine進行硬編碼,并設置為64,在進行調優并將其設置為鯤鵬的CacheLine大小之后,整體性能提升了5%。

      6. 鯤鵬性能調優十板斧

      鯤鵬社區根據使用經驗,總結了性能調優十板斧。

      在CPU和內存方面,可針對如下方面進行調整:

      調整內存頁大小

      CPU預取

      修改線程調度策略

      在磁盤方面可針對如下方面進行調整:

      臟數據刷新

      異步文件操作(libaio)

      文件系統參數

      在網卡方面可針對如下方面進行調整:

      網卡多隊列

      開啟網卡TSO

      開啟網卡CSUM

      在應用方面,可針對如下方面進行調整:

      優化編譯選項

      文件緩存機制

      緩存執行結果

      NENO指令加速

      當然,上述僅僅是粗略概括性能調優經驗,詳細可參考官方社區鯤鵬調優十板斧指南,鏈接為:https://bbs.huaweicloud.com/blogs/126788

      7. 以MariaDB為例看性能調優流程

      7.1. 性能調優三步法

      通常來說,性能調優可以分為三個步驟:監控、分析以及優化。在優化之后,如果未達預期,那么我們還需要再進行監控、分析以及優化,如此反復。具體如下圖所示:

      在監控階段,我們需要使用監控工具針對CPU、內存、磁盤以及網卡各項指標進行記錄。CPU的記錄指標包括硬中斷、軟中斷以及動態的CPU時間片占比;內存的記錄指標包括numa內存訪問命中率,內存是否足夠;磁盤的記錄包括iowait以及磁盤使用率等;網卡則需記錄其傳輸帶寬等。通過上述收集的指標分析判斷優化方向。

      在優化階段,CPU方面可通過提高并發和線程綁核的方式,內存方面可通過減少跨numa訪問、大頁內存的方式,磁盤方面可通過I/O調度策略以及異步I/O的方式,而網卡方面則可通過中斷聚合、網卡中斷綁核的方式進行。

      7.2. MariaDB性能優化-監控

      sysbench壓測MariDB 10.3.8數據庫,OLTP模型讀寫比例為1:1。下圖為監控示意圖:

      基于上圖,我們可以發現一個問題,當線程數增多時,CPU使用率越來越高,而TPS在到達頂點之后反而下降了。在綜合磁盤和網卡未到達性能瓶頸的情況下,我們可以得出CPU的使用瓶頸。

      7.3. MariaDB性能優化-分析

      當CPU時業務的性能瓶頸時,可通過分析進程熱點函數來尋找優化空間,使用perf工具對本測試用例中的熱點函數分析如下:隨著并發線程數的增多,CPU的時間片集中在了鎖的爭搶中,這部分無用功造成了CPU資源的浪費。

      7.4. MariaDB性能優化-優化

      通過查閱MariaDB資料,我們可以通過調整一下參數提高性能。

      innodb_thread_concurrency:控制并發線程數,默認值0表示,不限制并發

      【云駐共創】 深入理解基于華為鯤鵬處理器的極致性能優化

      innodb_sync_spin_loops:減少原子操作輪休次數

      innodb_spin_wait_delay:增加原子操作輪休間隔時間

      8. 總結

      CPU/內存、磁盤、網卡、應用,是我們性能調優的四個主要方向

      采集性能指標、分析性能瓶頸、優化相關參數代碼,是調優的基本思路

      充分利用硬件資源才能發揮軟件的最優性能

      時延、吞吐、并發需要尋找一個均衡點

      本文參考HDZ研習社學習視頻《HDZ研習社07 發揮鯤鵬極致性能的軟件優化》,鏈接為:https://bbs.huaweicloud.com/videos/102811

      本文整理自華為云社區【內容共創】活動第13期。https://bbs.huaweicloud.com/blogs/330939 任務8. 游走在冰與火之間:發揮鯤鵬極致性能的軟件優化

      MySQL Nginx 鯤鵬

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格中怎樣用mdeterm函數計算矩陣行列式值(excel mdeterm函數)
      下一篇:wps表格怎樣制作多級下拉列表(wps多級下拉列表設置)
      相關文章
      国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲成人免费电影| 亚洲理论电影在线观看| 亚洲AV无码乱码国产麻豆| 亚洲精品无码不卡在线播放HE| 国产亚洲精品自在线观看| 亚洲伊人久久综合影院| 亚洲精品综合久久| 亚洲一区二区三区乱码A| 亚洲一区二区三区乱码A| 久久久亚洲精品蜜桃臀| 亚洲女久久久噜噜噜熟女 | 亚洲白嫩在线观看| 亚洲福利视频一区二区三区| 91亚洲导航深夜福利| 亚洲精品美女视频| 亚洲婷婷第一狠人综合精品| 亚洲一区在线视频| 亚洲videos| 亚洲va在线va天堂va四虎| 亚洲AV第一页国产精品| 久久久久久亚洲精品成人| 亚洲国产福利精品一区二区| 亚洲乱码一二三四五六区| 在线综合亚洲欧洲综合网站| 亚洲欧美国产国产综合一区| 日本亚洲高清乱码中文在线观看| 噜噜综合亚洲AV中文无码| 亚洲国产天堂久久久久久| 中文字幕中韩乱码亚洲大片| 久久精品国产亚洲网站| 亚洲高清中文字幕| 亚洲已满18点击进入在线观看| 国产精品亚洲αv天堂无码| 国产亚洲综合一区柠檬导航| 午夜亚洲国产理论秋霞| 亚洲欧洲国产精品久久| 亚洲精品理论电影在线观看| 国产一区二区三区亚洲综合| 夜夜春亚洲嫩草影院| 亚洲va在线va天堂va不卡下载|