判斷 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)。
相關文章
- Linux 有問必答:如何知道程式執行在哪個 CPU 核心上?Linux
- Linux下判斷cpu物理個數,幾核,是超執行緒還是多核心Linux執行緒
- 4核8執行緒和6核6執行緒的CPU哪個好?電腦CPU核數多和執行緒多的區別執行緒
- Linux判斷上一個語句是否執行成功Linux
- 判斷應用所執行的CPU型別型別
- Linux檢視物理CPU個數、核數、邏輯CPU個數Linux
- cpu、核與執行緒執行緒
- 檢視伺服器CPU的個數、CPU的核數、多核超執行緒數伺服器執行緒
- Linux 中執行緒與 CPU 核的繫結Linux執行緒
- linux下把程式繫結到特定cpu核上執行Linux
- [Linux]bc|判斷命令成功執行Linux
- 什麼?一個核同時執行兩個執行緒?執行緒
- 判斷某過程是否在執行的方法
- 解惑Android的post()方法究竟執行在哪個執行緒中Android執行緒
- 判斷一個字串是否包含一個子串的方法字串
- 判斷當前程式是否正在執行
- Linux 中 7 個判斷檔案系統型別的方法Linux型別
- 檢視Linux系統CPU個數和核數Linux
- 原生js如何判斷一個核取方塊是否選中JS
- 在Linux中,如何使用shell指令碼判斷某個服務是否正在執行?Linux指令碼
- Linux檢視某個程式的執行緒的3種方法Linux執行緒
- 寫一個判斷裝置來源的方法
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- 命令執行的判斷依據: ; , &&, ||
- node.js 多個非同步過程判斷執行是否完成Node.js非同步
- 判斷一個物件為空物件的5種方法物件
- Java非同步判斷執行緒池所有任務是否執行完成的方法Java非同步執行緒
- 判斷當前程式是否"以管理員身份執行"的
- js如何判斷一個checkbox核取方塊是否被選中JS
- jQuery如何判斷一個checkbox核取方塊是否被選中jQuery
- 在linux中檢視cpu個數方法Linux
- disruptor如何實現每CPU執行一個執行緒?執行緒
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- CPU對指令長度的判斷
- Linux系統下查CPU個數的方法Linux
- Linux檢視系統cpu個數、核心數、執行緒數Linux執行緒
- 【Java面試】如何中斷一個正在執行的執行緒?Java面試執行緒