作業系統 了解CPU cache

2021-08-16 17:33:13 字數 1757 閱讀 9655

cache一詞源自法語,其原意為"藏匿處,隱藏的地方". cache被應用於電腦科學之後,專指cpu與主記憶體之間的儲存器高速緩衝器

,cache的出現

是為了緩解cpu的儲存需求與主記憶體的訪問效能之間越來越大的差距.

現代cpu的cache都是整合在片內的,越靠近cpu

流水線的cache由於需要極其快

速的訪問速度,只能保持越小的容量,並且單位容量的成本越高.

因此,為了進一步緩解需求與效能

之間的差距,並應對不斷增大的主記憶體,最新的

cpu都採用了**cache結構.

1.靠近cpu流水線的l1 cache速度最快,容量最小

2.l2 cache速度與容量都居中

3.靠近主記憶體的l3 cache則是容量最大,但速度相對最慢(仍然比主記憶體快很多).

區域性性原理

一般的電腦程式對儲存器的訪問行為,存在很大的區域性性,主要分為兩個方面:

時間區域性性:既程式會在乙個比較短的時間視窗內頻繁訪問同乙個記憶體位址.

空間區域性性:既程式會傾向於訪問一組資料或者乙個資料相鄰的資料.

cache正是利用了程式訪存的這兩個區域性性特點,將程式最常使用的指令與資料放在離cpu流水線最近的地方,以便在需要時最快獲

取這部分指令與

資料.當我們了解到區域性性原理後,我們就會有乙個新的概念,有的時候,我們需要將程序執行在指定的cpu核心當中. 為什麼? 因為當

你上乙個程序運

行完,如果當前程序需要上乙個程序的資料,這個時候該cpu當中cache中擁有上乙個程序的熱資料,當前程序可

以直接拿起來使用. 所以當你持續

在"多核cpu調優"章節,提到"我們不能任由作業系統負載均衡,因為我們自己更加了解自己的程式,所以,我們可以手動為其分配

cpu核,而不會過

多的占用cpu0,或者是讓我們關鍵程序和一堆別的程序擠在一起" 上一段說到的就是原因.

1.taskset

taskset是linux提供的乙個命令,他可以讓某個程式執行在某個某些cpu上.

1)顯示程序執行的cpu

命令: taskset -p 21184

2)指定程序執行在某個特定的cpu上

命令:taskset -pc 3 21184

3)程序啟動時指定cpu

命令:taskset -c 1 ./a.out

2.sched_setaffinity系統呼叫

sched_setaffinity可以將某個程序繫結在乙個特定的cpu. 你比作業系統跟了解你自己的程式,為了避免排程器愚蠢的排程你的程

序,或者是為了

在多執行緒程式中避免快取失效造成的開銷,你可能會希望這樣做.

name

sched_setaffinity, sched_getaffinity - set and get a process』s cpu affinity mask

synopsis

#define _gnu_source

#include int sched_setaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask);

int sched_getaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask);

父程序和子程序之間會繼承對affinity的設定,因此,大膽猜測,taskset實際上是首先執行了sched_setaffinity系統呼叫,然後

fork+exec使用者

指定的程序.

了解作業系統

發行版其實就是在核心的基礎上,新增特定的桌面環境和常用的軟體。最大的好處就是省去了組裝的麻煩。安裝virtualbox 安裝centos 6.8 網路配置 1.切換目錄 cd etc sysconfig network scripts 2.備份檔案 cp ifcfg eth0 ifcfg eth0 ...

了解FreeRTOS作業系統

1 與freertos核心有關的檔案數量為3個,分別是list.c queue.c tasks.c 該檔案位於freertos source 2 與記憶體分配有關的檔案共有5個,分別是heap 1.c,heap 2.c,heap 3.c,heap 4.c,heap 5.c。5個檔案只需選擇其中的1個...

1作業系統了解

1.1作業系統做什麼 作業系統負責程式的啟動過程,負責程式的執行過程,同時在執行過程中不斷為使用者程式的執行提供各種各樣的支援。比如說建立程序,分配記憶體,執行程序等。1.2作業系統是什麼 作業系統是計算機系統中的乙個系統軟體,是一些程式模組的集合 1 組織和管理計算機的軟硬體資源 2 組織計算機的...