小編從事分佈式文件系統相關的工作。經常需要進行性能測試。性能測試並不是簡單的執行幾個腳本,還需要掌握一些基礎知識,否則,可能導致最終得出的測試結果毫無及價值。
小編將從如上6個方面來介紹文件系統測試過程中涉及到的基礎知識。知識點包括並不限於上圖。本文先介紹CPU相關的知識。
CPU架構介紹
多CPU
多個物理CPU,CPU通過總線進行通信,效率比較低,如下:
多核
多核CPU,不同的核通過L2 cache進行通信,存儲和外設通過總線與CPU通信,如下:
多核超線程
每個CPU擁有多個核,每個核資源使用不會衝突,各個核有獨立的L1 Cache,共享L2 Cache,加速核與核之間的訪問,Cache、存儲器、外設通過CPU內部總線進行。如下:(最新的CPU已經是三級緩存的架構,下文中會提及)
CPU信息的查看方法
我們通常關心的是邏輯CPU數,使用top命令顯示的cpu數就是邏輯cpu:
邏輯CPU數 = 物理CPU個數 * 每顆物理CPU的核數 * 超線程數
1查看CPU信息(型號)
2[root@AAA ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
3 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
4
5# 查看物理CPU個數
6[root@AAA ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
7
8# 查看每個物理CPU中core的個數(即核數)
9[root@AAA ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
10cpu cores : 6
11
12# 查看邏輯CPU的個數
13[root@AAA ~]# cat /proc/cpuinfo| grep "processor"| wc -l
1424
從上面的結果可以看出,小編的服務器有2個物理cpu,每個cpu有6核,每核有2個超線程,因此有24個邏輯cpu。
CPU高速緩存
目前的CPU有三級高速緩存,如下:
CPU高速緩存的作用:
- 更高的緩存命中率
- 減少BUS通信
- 不存在Memory的競爭,每個核擁有更大的緩存帶寬
- 更低的數據延遲
智能內存訪問
內存消歧
加載數據和存儲數據解耦,分析內存讀取順序,智能預測和裝載下一條指令所需要的數據,減少內存讀取的延遲
如上圖,指令自下而上執行,其中Load4指令需要讀取磁盤,左側沒有內存消歧,指令按順序執行,當執行到Load4時,需要等待加載數據。右側經過內存消歧,提前加載Load4需要的數據,加載數據過程中執行其他指令,減少了內存讀取的延遲。Store1和Load2之間讀寫同一塊內存,需要保證先後順序,因此並未將Load2的數據加載提前進行。
內存預取
預取器負責“預取”內存內容,並將其放入高速緩存中
增加高速緩存的裝載量,從高速緩存而非內存讀取數據將縮短內存延遲並提高性能
每兩個核心有8個預取器,其中每個核心有2個數據預取器和1個指令預取器,L2高速緩存配置2個預取器
CPU的工藝演進
CPU的代號、工藝及年代
對於CPU的主頻、高速緩存大小,不同型號的芯片之間各不相同,在此不再贅述。
CPU性能影響分析
CPU性能主次排序
總結
以上知識,除了輔助我們對服務器選型外,還提醒我們,在併發要求高的情況下,後臺開發綁定CPU時應注意以下三點:
- CPU密集型線程不要綁定在處於同一個核的兩個超線程上
- 同一組線程儘量綁定到同一個物理CPU
- 根據線程佔用CPU分配邏輯CPU,儘量保證均衡併發使用所有邏輯CPU
歡迎關注我們的同名微信公眾號“麻辣軟硬件”,與我們一起交流技術話題!