導航:首頁 > 編程系統 > linux幾核幾線程

linux幾核幾線程

發布時間:2023-09-07 21:14:24

A. 怎麼查看linux的cpu核數

|1.查看邏輯CPU個數:
#cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
24
2.由於有超線程技術有必要查看一下物理CPU個數:
#grep "physical id" /proc/cpuinfo|sort -u|wc -l
2
#grep "physical id" /proc/cpuinfo|sort -u
physical id : 0
physical id : 1
查看每個物理CPU內核個數:
#grep "cpu cores" /proc/cpuinfo|uniq
cpu cores : 6
每個物理CPU上邏輯CPU個數:
#grep "siblings" /proc/cpuinfo|uniq
siblings : 12

B. 現在的多核CPU,Linux操作系統是否能夠實現單個進程(多線程)的多核調度(跨CPU核心調度)

現在的技術,還是一個線程只能運行在一個 CPU 上。多核心,必須用多線程/進程來運行才能實現最大化。當然,你可以單個線程不停的在所有的 CPU 上來回跳。但是效率會很低很低。
因為 CPU 有寄存器和緩存的問題。如果你切換 CPU 運行,所有的數據都要進行一次傳遞。非常浪費時鍾(在 CPU 上,程序執行不是一個時鍾馬上就能任意執行一個指令,而是流水線作業,一個指令需要很多個時鍾才能處理完,數據存取也都要等)。

這也因為程序原本就都是順序執行的。你沒辦法讓一個程序的後面的結果可以跳過前面的結果而得出。
當然,現在 CPU 確實有這種技術,叫做亂序執行。也就是當前面的過程還沒有計算時,後面的指令先計算。但是這種事情是要靠猜測的,而且這也僅僅是分支預測,依然不能預測某個計算的結果。即便猜的再准確,也有錯的時候。奔騰4 最老的版本就有這個問題,流水線太長。計算後發現錯了。整條流水線需要清空重新計算。有嚴重性能問題的奔騰4 CPU ,流水線長度是 31 級。也就是一個程序至少 31 個時鍾周期才能從推到流水線後到真正執行。直接浪費了 31 個時鍾周期。

所以目前的技術來說,單線程多核新協同計算,技術上不可能實現。
提高性能,就是整理數據處理的演算法,把多次重復計算的過程,拆成多條線程分別計算。從而保證 CPU 多核新的效率最大化。每個線程可以共享同一塊數據,自己讀取自己的數據計算使可以的。不過,這時候就有另外一個問題,數據定址和傳遞的性能問題。

C. Linux 進程、線程和CPU的關系,cpu親和性

1、物理CPU數:機器主板上實際插入的cpu數量,比如說你的主板上安裝了一塊8核CPU,那麼物理CPU個數就是1個,所以物理CPU個數就是主板上安裝的CPU個數。

2、物理CPU核數:單個物理CPU上面有多個核,物理CPU核數=物理CPU數✖️單個物理CPU的核
3、邏輯CPU核數:一般情況,我們認為一顆CPU可以有多個核,加上intel的超線程技術(HT), 可以在邏輯上再分一倍數量的CPU core出來。邏輯CPU核數=物理CPU數✖️單個物理CPU的核*2
4、超線程技術(Hyper-Threading):就是利用特殊的硬體指令,把兩個邏輯CPU模擬成兩個物理CPU,實現多核多線程。我們常聽到的雙核四線程/四核八線程指的就是支持超線程技術的CPU。

1、並行:兩件(多件)事情在同一時刻一起發生。
2、並發:兩件(多件)事情在同一時刻只能有一個發生,由於CPU快速切換,從而給人的感覺是同時進行。
3、進程和線程
進程是資源分配的最小單位,一個程序有至少一個進程。線程是程序執行的最小單位。一個進程有至少一個線程。
線程之間的通信更方便,同一進程下的線程共享全局變數、靜態變數等數據,而進程之間的通信需要以通信的方式(IPC)進行。多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因為進程有自己獨立的地址空間。
4、單核多線程:單核CPU上運行多線程, 同一時刻只有一個線程在跑,系統進行線程切換,系統給每個線程分配時間片來執行,看起來就像是同時在跑, 但實際上是每個線程跑一點點就換到其它線程繼續跑。
5、多核多線程:每個核上各自運行線程,同一時刻可以有多個線程同時在跑。

1、對於單核:多線程和多進程的多任務是在單cpu交替執行(時間片輪轉調度,優先順序調度等),屬於並發
2、對於多核:同一個時間多個進程運行在不同的CPU核上,或者是同一個時間多個線程能分布在不同的CPU核上(線程數小於內核數),屬於並行。
3、上下文切換:上下文切換指的是內核(操作系統的核心)在CPU上對進程或者線程進行切換。上下文切換過程中的信息被保存在進程式控制制塊(PCB-Process Control Block)中。PCB又被稱作切換幀(SwitchFrame)。上下文切換的信息會一直被保存在CPU的內存中,直到被再次使用。

CPU 親和性(affinity)就是進程要在某個給定的 CPU 上盡量長時間地運行而不被遷移到其他處理器的傾向性。這樣可以減少上下文切換的次數,提高程序運行性能。可分為:自然親和性和硬親和性
1、自然親和性:就是進程要在指定的 CPU 上盡量長時間地運行而不被遷移到其他處理器,Linux 內核進程調度器天生就具有被稱為 軟 CPU 親和性(affinity) 的特性,這意味著進程通常不會在處理器之間頻繁遷移。這種狀態正是我們希望的,因為進程遷移的頻率小就意味著產生的負載小。Linux調度器預設就支持自然CPU親和性(natural CPU affinity): 調度器會試圖保持進程在相同的CPU上運行。
2、硬親和性:簡單來說就是利用linux內核提供給用戶的API,強行將進程或者線程綁定到某一個指定的cpu核運行。Linux硬親和性指定API:taskset .

taskset [options] mask command [arg]...
taskset [options] -p [mask] pid

taskset 命令用於設置或者獲取一直指定的 PID 對於 CPU 核的運行依賴關系。也可以用 taskset 啟動一個命令,直接設置它的 CPU 核的運行依賴關系。

CPU 核依賴關系是指,命令會被在指定的 CPU 核中運行,而不會再其他 CPU 核中運行的一種調度關系。需要說明的是,在正常情況下,為了系統性能的原因,調度器會盡可能的在一個 CPU 核中維持一個進程的執行。強制指定特殊的 CPU 核依賴關系對於特殊的應用是有意義的
CPU 核的定義採用位定義的方式進行,最低位代表 CPU0,然後依次排序。這種位定義可以超過系統實際的 CPU 總數,並不會存在問題。通過命令獲得的這種 CPU 位標記,只會包含系統實際 CPU 的數目。如果設定的位標記少於系統 CPU 的實際數目,那麼命令會產生一個錯誤。當然這種給定的和獲取的位標記採用 16 進制標識。
0x00000001
代表 #0 CPU
0x00000003
代表 #0 和 #1 CPU
0xFFFFFFFF
代表 #0 到 #31 CPU

-p, --pid
對一個現有的進程進行操作,而不是啟動一個新的進程
-c, --cpu-list
使用 CPU 編號替代位標記,這可以是一個列表,列表中可以使用逗號分隔,或者使用 "-" 進行范圍標記,例如:0,5,7,9
-h, --help
列印幫助信息
-V, --version
列印版本信息

如果需要設定,那麼需要擁有 CAP_SYS_NICE 的許可權;如果要獲取設定信息,沒有任何許可權要求。

taskset 命令屬於 util-linux-ng 包,可以使用 yum 直接安裝。

D. linux查看cpu核數和內存大小

linux查看cpu核數和內存大小命令分別為:

1、查看CPU個數*核心數:

cat /proc/cpuinfo |grep「physical id」 | uniq | wc -l

96 #一共96核

2、查看內存總數

#cat /proc/meminfo | grep MemTotal

MemTotal: 230993600 kB

Linux下查看CPU型號,內存大小,硬碟空間的命令:

1、查看CPU核數

cat /proc/cpuinfo | grep 「cpu cores」 | uniq

cpu cores : 12 #12是單顆CPU的核心數

2、查看CPU型號

cat /proc/cpuinfo | grep 『model name』 |uniq

model name : Intel® Xeon® CPU E7-4830 v3 @ 2.10GHz

3、查看linux物理內存數量及大小

dmidecode -t memory | grep Size: | grep -v 「No Mole Installed」

E. linux下判斷cpu物理個數,幾核,是超線程還是多核心

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數
# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

F. linux單進程如何實現多核cpu多線程分配

linux下的單進程多線程的程序,要實現每個線程平均分配到多核cpu,主要有2個方法


1:利用linux系統自己的線程切換機制,有一個服務叫做irqbalance,這個服務是linux系統自帶的,默認會啟動,這個服務的作用就是把多線程平均分配到CPU的每個核上面,只要這個服務不停止,多線程分配就可以自己實現。但是要注意,如果線程函數內部的有某個循環,且該循環內沒有任何系統調用的話,可能會導致這個線程的CPU時間無法被切換出去。也就是占滿CPU現象,此時加個系統調用,例如sleep,線程所佔的CPU時間就可以切換出去了。


2:利用pthread庫自帶的線程親和性設置函數,來設置線程在某個CPU核心上跑,這個需要在程序內部實現。同時注意不要和進程親和性設置搞混淆了

intpthread_setaffinity_np(pthread_tthread,size_tcpusetsize,
constcpu_set_t*cpuset);
intpthread_getaffinity_np(pthread_tthread,size_tcpusetsize,
cpu_set_t*cpuset);
從函數名以及參數名都很明了,唯一需要點解釋下的可能就是cpu_set_t這個結構體了。這個結構體的理解類似於select中的fd_set,可以理解為cpu集,也是通過約定好的宏來進行清除、設置以及判斷:
//初始化,設為空
voidCPU_ZERO(cpu_set_t*set);
//將某個cpu加入cpu集中
voidCPU_SET(intcpu,cpu_set_t*set);
//將某個cpu從cpu集中移出
voidCPU_CLR(intcpu,cpu_set_t*set);
//判斷某個cpu是否已在cpu集中設置了
intCPU_ISSET(intcpu,constcpu_set_t*set);

G. linux下如何看有幾個cpu

cat /proc/cpuinfo中的信息

processor 邏輯處理器的id。
physical id 物理封裝的處理器的id。
core id 每個核心的id。
cpu cores 位於相同物理封裝的處理器中的內核數量。
siblings 位於相同物理封裝的處理器中的邏輯處理器的數量。

1 查看物理CPU的個數
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
2、 查看邏輯CPU的個數
#cat /proc/cpuinfo |grep "processor"|wc –l
3、 查看CPU是幾核
#cat /proc/cpuinfo |grep "cores"|uniq
4、 查看CPU的主頻
#cat /proc/cpuinfo |grep MHz|uniq
5、 # uname -a
6、 Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看當前操作系統內核信息)
7、 # cat /etc/issue | grep Linux
8、 Red Hat Enterprise Linux AS release 4 (Nahant Update 5(查看當前操作系統發行版信息)
9、 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8個邏輯CPU, 也知道了CPU型號)
9 # cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(說明實際上是兩顆4核的CPU)

10、# getconf LONG_BIT
32
(說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)

11、# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc –l
8(結果大於0, 說明支持64bit計算. lm指long mode, 支持lm則是64bit)

12、如何獲得CPU的詳細信息:
linux命令:cat /proc/cpuinfo
13、用命令判斷幾個物理CPU,幾個核等:
邏輯CPU個數:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU個數:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
14、每個物理CPU中Core的個數:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
15、是否為超線程?如果有兩個邏輯CPU具有相同的」core id」,那麼超線程是打開的。每個物理CPU中邏輯CPU(可能是core, threads或both)的個數:
# cat /proc/cpuinfo | grep "siblings"

1.查看CPU信息命令
cat /proc/cpuinfo
2.查看內存信息命令
cat /proc/meminfo
3.查看硬碟信息命令
fdisk -l

查看CPU信息(型號)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8個邏輯CPU, 也知道了CPU型號)

# cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(說明實際上是兩顆4核的CPU)
PS:Jay added on 10th, May, 2011
# 其實是可能有超線程HT技術,不一定是有4核,也可能是2核4線程;當時還理解不清楚

# getconf LONG_BIT
32
(說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)

# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
8
(結果大於0, 說明支持64bit計算. lm指long mode, 支持lm則是64bit)

再完整看cpu詳細信息, 不過大部分我們都不關心而已.
# dmidecode | grep 'Processor Information'

查看內 存信息
# cat /proc/meminfo

# uname -a
Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看當前操作系統內核信息)

# cat /etc/issue | grep Linux
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
(查看當前操作系統發行版信息)

查看機器型號
# dmidecode | grep "Proct Name"

查看網卡信息
# dmesg | grep -i eth

H. linux cpu使用率是單核還是多核的

這個是要看抄具體你的襲機器配置的
1、使用top命令查看
top運行後,按1,即可看到幾核
2、看cpuinfo 信息
cat /proc/cpuinfo |grep "cores"|uniq

3、關於cpu使用率,可以看每核心的佔比,然後算一下平均值

閱讀全文

與linux幾核幾線程相關的資料

熱點內容
位位用車app在哪裡下載 瀏覽:427
格式工廠iphone鈴聲 瀏覽:171
linux設置字元編碼 瀏覽:15
帝王世紀升級哪個兵種 瀏覽:409
c編程開發軟體是什麼 瀏覽:334
二的大寫怎麼寫app 瀏覽:612
樂視數據刪除了怎麼找回來 瀏覽:651
ug編程初始化怎麼辦 瀏覽:295
nginxajax配置文件 瀏覽:467
小程序獲取二進制圖片 瀏覽:206
為什麼有的數控車編程有百分號 瀏覽:425
m文件有什麼用 瀏覽:359
宜昌做投標文件多少錢 瀏覽:166
uc瀏覽器小說下載那個文件夾 瀏覽:908
qq和手機 瀏覽:238
ps備份文件教程 瀏覽:306
資料庫原理嵌套查詢 瀏覽:679
為什麼文件只解壓了一部分 瀏覽:728
c語言課程教學視頻java源碼下載 瀏覽:444
老毛桃2014u盤啟動盤製作教程 瀏覽:53

友情鏈接