CPU架構分類
從CPU發(fā)明到現(xiàn)在技掏,有非常多種架構铃将,從我們熟悉的X86,ARM哑梳,到不太熟悉的MIPS劲阎,IA64等
X86 | ARM | |
---|---|---|
指令集 | 復雜指令集(CISC) | 精簡指令集(RISC) |
功耗 | 高 | 低 |
性能 | 高 | 低 |
擴展能力 | X86結構的電腦采用“橋”的方式與擴展設備(如:硬盤、內存等)進行連接鸠真,其配套擴展的設備種類多悯仙、價格也比較便宜,所以x86結構的電腦能很容易進行性能擴展 | ARM結構的電腦是通過專用的數(shù)據(jù)接口使CPU與數(shù)據(jù)存儲設備進行連接吠卷,所以ARM的存儲锡垄、內存等性能擴展難以進行 |
操作系統(tǒng)的兼容性 | 兼容Windows、Linux | Linux |
X86架構來由
IBM 開始做 IBM PC 時祭隔,一開始并沒有讓最牛的華生實驗室去研發(fā)货岭,而是交給另一個團隊。一年時間疾渴,軟硬件全部自研根本不可能完成千贯,于是他們采用了英特爾的 8088 芯片作為 CPU,使用微軟的 MS-DOS 做操作系統(tǒng)搞坝。
誰能想到 IBM PC 賣的超級好搔谴,好到因為壟斷市場而被起訴。IBM 就在被逼的情況下公開了一些技術桩撮,使得后來無數(shù) IBM-PC 兼容機公司的出現(xiàn)己沛,也就有了后來占據(jù)市場的惠普、康柏距境、戴爾等等申尼。
英特爾的技術因此成為了行業(yè)的開放事實標準。由于這個系列開端于 8086垫桂,因此稱為 x86 架構师幕。
X86架構組成
先看下計算機的工作模式
對于一個計算機來講,最核心的就是CPU(Central Processing Unit,中央處理器)霹粥。這是這臺計算機的大腦灭将,所有的設備都圍繞它展開。
CPU 和其他設備連接后控,要靠一種叫作總線(Bus)的東西庙曙,其實就是主板上密密麻麻的集成電路,這些東西組成了 CPU 和其他設備的高速通道浩淘。
CPU組件圖
運算單元
只管算捌朴,例如做加法、做位移等等张抄。但是砂蔽,它不知道應該算哪些數(shù)據(jù),運算結果應該放在哪里署惯。
數(shù)據(jù)單元
包括 CPU 內部的緩存和寄存器組左驾,空間很小,但是速度飛快极谊,可以暫時存放數(shù)據(jù)和運算結果诡右。
- 通用寄存器
AX、BX轻猖、CX稻爬、DX、SP蜕依、BP桅锄、SI、DI样眠。8個通用寄存器友瘤,用于在計算過程中暫存數(shù)據(jù)。
控制單元
控制單元是一個統(tǒng)一的指揮中心檐束,它可以獲得下一條指令辫秧,然后執(zhí)行這條指令。這個指令會指導運算單元取出數(shù)據(jù)單元中的某幾個數(shù)據(jù)被丧,計算出個結果盟戏,然后放在數(shù)據(jù)單元的某個地方。
- 指令指針寄存器IP(Instruction Pointer Register)
指向代碼段中下一條指令的位置甥桂。CPU 會根據(jù)它來不斷地將指令從內存的代碼段中柿究,加載到 CPU 的指令隊列中,然后交給運算單元去執(zhí)行黄选。 - 代碼段寄存器(Code Segment Register)
存放代碼段的起始地址蝇摸。代碼段的偏移量在 IP 寄存器中。通過它們可以找到代碼在內存中的位置 - 數(shù)據(jù)段的寄存器(Data Segment Register)
存放數(shù)據(jù)段的起始地址。數(shù)據(jù)段的偏移量會放在通用寄存器中貌夕。通過它們可以找到數(shù)據(jù)在內存中的位置 - 棧寄存器(Stack Register)
- 擴展段寄存器(extend Segment Register)
相關術語
地址總線
地址總線的位數(shù)律歼,決定了能訪問的地址范圍到底有多廣。例如只有兩位啡专,那 CPU 就只能認 00险毁,01,10们童,11 四個位置畔况,超過四個位置,就區(qū)分不出來了病附。位數(shù)越多,能夠訪問的位置就越多亥鬓,能管理的內存的范圍也就越廣完沪。
數(shù)據(jù)總線
數(shù)據(jù)總線的位數(shù),決定了一次能拿多少個數(shù)據(jù)進來嵌戈。例如只有兩位覆积,那 CPU 一次只能從內存拿兩位數(shù)。要想拿八位熟呛,就要拿四次宽档。位數(shù)越多,一次拿的數(shù)據(jù)就越多庵朝,訪問速度也就越快吗冤。
CPU 各種性能指標
CPU使用率
CPU 使用率描述了非空閑時間占總 CPU 時間的百分比
- 用戶 CPU 使用率,包括用戶態(tài) CPU 使用(user和低優(yōu)先級用戶態(tài) CPU 使用率(nice)九府,表示 CPU 在用戶態(tài)運行的時間百分比椎瘟。用戶 CPU 使用率高,通常說明有應用程序比較繁忙侄旬。
- 系統(tǒng) CPU 使用率肺蔚,表示 CPU 在內核態(tài)運行的時間百分比(不包括中斷)。系統(tǒng) CPU使用率高儡羔,說明內核比較繁忙宣羊。
- 等待 I/O 的 CPU 使用率,通常也稱為 iowait汰蜘,表示等待 I/O 的時間百分比仇冯。iowait高,通常說明系統(tǒng)與硬件設備的 I/O 交互時間比較長族操。
- 軟中斷和硬中斷的 CPU 使用率赞枕,分別表示內核調用軟中斷處理程序、硬中斷處理程序的時間百分比。它們的使用率高炕婶,通常說明系統(tǒng)發(fā)生了大量的中斷姐赡。
- steal(通常縮寫為 st)柠掂,代表當系統(tǒng)運行在虛擬機中的時候项滑,被其他虛擬機占用的CPU 時間
常用工具: top
平均負載
平均負載是指單位時間內,系統(tǒng)處于可運行狀態(tài)和不可中斷狀態(tài)的平均進程數(shù)涯贞,也就是平均活躍進程數(shù)枪狂,它和 CPU 使用率并沒有直接關系。
理想情況下宋渔,平均負載等于邏輯 CPU 個數(shù)州疾,這表示每個 CPU 都恰好被充分利用。如果平均負載大于邏輯 CPU 個數(shù)皇拣,就表示負載比較重了严蓖。
常用工具: top uptime
上下文切換
上下文切換,本身是保證 Linux 正常運行的一項核心功能氧急。但過多的上下文切換颗胡,會將原本運行進程的 CPU 時間,消耗在寄存器吩坝、內核棧以及虛擬內存等數(shù)據(jù)的保存和恢復上毒姨,縮短進程真正運行的時間,成為性能瓶頸
- 自愿上下文切換
是指進程無法獲取所需資源钉寝,導致的上下文切換弧呐。比如說,I/O嵌纲、內存等系統(tǒng)資源不足時泉懦,就會發(fā)生自愿上下文切換。 - 非自愿上下文切換
是指進程由于時間片已到等原因疹瘦,被系統(tǒng)強制調度崩哩,進而發(fā)生的上下文切換。比如說言沐,大量進程都在爭搶 CPU 時邓嘹,就容易發(fā)生非自愿上下文切換。
常用工具
- vmstat 查看系統(tǒng)整體的上下文切換數(shù) (cpu-cs context switch)
[work@ros-dev-29 ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 740092 325876 1174820 0 0 1 7 0 0 0 0 100 0 0
- pidstat -w
cswch
表示每秒自愿上下文切換(voluntary context switches)的次數(shù)
nvcswch
表示每秒非自愿上下文切換(non voluntary context switches)的次數(shù)
[work@ros-dev-29 ~]$ pidstat -w
Linux 2.6.32-573.22.1.el6.x86_64 (ros-dev-29) 09/20/2019 _x86_64_ (4 CPU)
11:17:19 AM PID cswch/s nvcswch/s Command
11:17:19 AM 1 0.00 0.00 init
11:17:19 AM 2 0.00 0.00 kthreadd
11:17:19 AM 3 0.00 0.00 migration/0
11:17:19 AM 4 0.17 0.00 ksoftirqd/0
11:17:19 AM 5 0.00 0.00 stopper/0
11:17:19 AM 6 0.08 0.00 watchdog/0
11:17:19 AM 7 0.07 0.00 migration/1