Linux 有問必答:如何知道程式執行在哪個 CPU 核心上?
問題:我有個 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)。
via: http://ask.xmodulo.com/cpu-core-process-is-running.html
作者:Dan Nanni 譯者:strugglingyouth 校對:wxy
相關文章
- 判斷 Linux 程式執行在哪個 CPU 核心上的 4 個方法Linux
- Linux有問必答:Linux上如何檢視某個程式的執行緒Linux執行緒
- Linux 有問必答:如何知道當前正在使用的 shell 是哪個?Linux
- cpu、核與執行緒執行緒
- linux下把程式繫結到特定cpu核上執行Linux
- Linux有問必答:如何用Perl檢測Linux的發行版本Linux
- Linux有問必答:如何在Linux下重新命名多個檔案Linux
- 4核8執行緒和6核6執行緒的CPU哪個好?電腦CPU核數多和執行緒多的區別執行緒
- Linux 中執行緒與 CPU 核的繫結Linux執行緒
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- Linux有問必答:如何更新過期版本的UbuntuLinuxUbuntu
- Linux有問必答:如何在命令列建立一個MySQL資料庫Linux命令列MySql資料庫
- 如何知道協議在哪個OSI層上執行?—Vecloud微雲協議Cloud
- Linux有問必答:如何在Linux中修改環境變數PATHLinux變數
- Linux有問必答:如何在命令列下壓縮JPEG影像Linux命令列
- Linux有問必答:如何檢查MariaDB服務端版本Linux服務端
- Linux有問必答:如何檢查Linux的記憶體使用狀況Linux記憶體
- Linux有問必答:如何顯示Linux網橋的MAC學習表LinuxMac
- Linux有問必答:如何為在Linux中安裝兄弟牌印表機Linux
- 我就想知道到底有幾個程式在執行
- Linux有問必答:如何修復“sshd error: could not load host key”LinuxError
- Linux檢視物理CPU個數、核數、邏輯CPU個數Linux
- Linux下判斷cpu物理個數,幾核,是超執行緒還是多核心Linux執行緒
- 檢視伺服器CPU的個數、CPU的核數、多核超執行緒數伺服器執行緒
- Linux 有問必答:如何使用yum來下載RPM包而不進行安裝Linux
- disruptor如何實現每CPU執行一個執行緒?執行緒
- 如何檢視CPU核數和執行緒數?CPU的核心數、執行緒數的關係和區別執行緒
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- Linux有問必答:如何在 Ubuntu 15.04 的 GNOME 終端中開啟多個標籤LinuxUbuntu
- Linux 有問必答:如何從VirtualBox中從主機訪問NAT客戶機Linux
- 如何知道一個Webapp執行時類的執行次序?WebAPP
- 檢視Linux系統CPU個數和核數Linux
- Linux及AIX下如何檢視物理CPU, 邏輯CPU及核數LinuxAI
- 什麼?一個核同時執行兩個執行緒?執行緒
- 根據CPU核數合理設定執行緒池大小執行緒
- Linux下區分物理CPU、邏輯CPU和CPU核數Linux
- 關於程式碼如何執行的五個問題
- 聊聊CPU的發展歷程之單核、多核、超執行緒單核執行緒