判斷 Linux 程式執行在哪個 CPU 核心上的 4 個方法
問題:我有個 Linux 程式執行在多核處理器系統上。怎樣才能找出哪個 CPU 核心正在執行該程式?
當你在 多核 NUMA 處理器上執行需要較高效能的 HPC(高效能運算)程式或非常消耗網路資源的程式時,CPU/memory 的親和力是限度其發揮最大效能的重要因素之一。在同一 NUMA 節點上排程最相關的程式可以減少緩慢的遠端記憶體訪問。像英特爾 Sandy Bridge 處理器,該處理器有一個整合的 PCIe 控制器,你可以在同一 NUMA 節點上排程網路 I/O 負載(如網路卡)來突破 PCI 到 CPU 親和力限制。
作為效能優化和故障排除的一部分,你可能想知道特定的程式被排程到哪個 CPU 核心(或 NUMA 節點)上執行。
這裡有幾種方法可以 找出哪個 CPU 核心被排程來執行給定的 Linux 程式或執行緒。
方法一
如果一個程式使用 taskset 命令明確的被固定(pinned)到 CPU 的特定核心上,你可以使用 taskset 命令找出被固定的 CPU 核心:
$ taskset -c -p <pid>
例如, 如果你對 PID 5357 這個程式有興趣:
$ taskset -c -p 5357 pid 5357's current affinity list: 5
輸出顯示這個過程被固定在 CPU 核心 5上。
但是,如果你沒有明確固定程式到任何 CPU 核心,你會得到類似下面的親和力列表。
pid 5357's current affinity list: 0-11
輸出表明該程式可能會被安排在從0到11中的任何一個 CPU 核心。在這種情況下,taskset 不能識別該程式當前被分配給哪個 CPU 核心,你應該使用如下所述的方法。
方法二
ps 命令可以告訴你每個程式/執行緒目前分配到的 (在“PSR”列)CPU ID。
$ ps -o pid,psr,comm -p <pid> PID PSR COMMAND 5357 10 prog
輸出表示程式的 PID 為 5357(名為”prog”)目前在CPU 核心 10 上執行著。如果該過程沒有被固定,PSR 列會根據核心可能排程該程式到不同核心而改變顯示。
方法三
top 命令也可以顯示 CPU 被分配給哪個程式。首先,在top 命令中使用“P”選項。然後按“f”鍵,顯示中會出現 “Last used CPU” 列。目前使用的 CPU 核心將出現在 “P”(或“PSR”)列下。
$ top -p 5357
相比於 ps 命令,使用 top 命令的好處是,你可以連續監視隨著時間的改變, CPU 是如何分配的。
方法四
另一種來檢查一個程式/執行緒當前使用的是哪個 CPU 核心的方法是使用 htop 命令。
從命令列啟動 htop。按 鍵,進入”Columns”,在”Available Columns”下會新增 PROCESSOR。
每個程式當前使用的 CPU ID 將出現在“CPU”列中。
請注意,所有以前使用的命令 taskset,ps 和 top 分配CPU 核心的 IDs 為 0,1,2,…,N-1。然而,htop 分配 CPU 核心 IDs 從 1開始(直到 N)。
相關文章
- 4核8執行緒和6核6執行緒的CPU哪個好?電腦CPU核數多和執行緒多的區別執行緒
- Linux判斷上一個語句是否執行成功Linux
- 判斷應用所執行的CPU型別型別
- linux下把程式繫結到特定cpu核上執行Linux
- 檢視伺服器CPU的個數、CPU的核數、多核超執行緒數伺服器執行緒
- cpu、核與執行緒執行緒
- 解惑Android的post()方法究竟執行在哪個執行緒中Android執行緒
- 什麼?一個核同時執行兩個執行緒?執行緒
- 在Linux中,如何使用shell指令碼判斷某個服務是否正在執行?Linux指令碼
- 寫一個判斷裝置來源的方法
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- node.js 多個非同步過程判斷執行是否完成Node.js非同步
- Java非同步判斷執行緒池所有任務是否執行完成的方法Java非同步執行緒
- 判斷Linux系統是否被黑的方法Linux
- 判斷一個物件為空物件的5種方法物件
- 如何判斷一個元素文字是否換行?
- 寫個方法判斷陣列物件中是否存在某個物件陣列物件
- CPU對指令長度的判斷
- 寫一個方法判斷頁面滾動方向
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- JVM程式用一個主執行緒來執行main()方法JVM執行緒AI
- jstack判斷執行緒狀態JS執行緒
- 判斷一個數是否為質數(程式碼)
- 寫一個方法判斷給定的字串是否同態(isomorphic)字串
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- 如何檢視CPU核數和執行緒數?CPU的核心數、執行緒數的關係和區別執行緒
- 判斷一個物件是否為空物件,判斷一個物件中是否有空值物件
- 【質數判斷】給定兩個數,判斷這兩個數是否互質?
- 【Java面試】如何中斷一個正在執行的執行緒?Java面試執行緒
- 聊聊CPU的發展歷程之單核、多核、超執行緒單核執行緒
- linux 實時檢視一個 python 程式有幾個執行緒LinuxPython執行緒
- 在 Linux 中查詢 CPU 的核數Linux
- CPU明明8個核,網路卡為啥拼命折騰一號核?
- 判斷ABAP程式碼是否處於update模式下執行的工具類模式
- nginx判斷路徑是否含有某個引數做判斷Nginx
- 寫一個方法判斷陣列內元素是否全部相同陣列
- 我們該如何正確的中斷一個執行緒的執行??執行緒
- JDK是如何判斷兩個物件是否相同的?判斷的流程是什麼?JDK物件
- 根據CPU核數合理設定執行緒池大小執行緒