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核上執行Linux
- cpu、核與執行緒執行緒
- 4核8執行緒和6核6執行緒的CPU哪個好?電腦CPU核數多和執行緒多的區別執行緒
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- Linux有問必答:如何在命令列下壓縮JPEG影像Linux命令列
- 如何知道協議在哪個OSI層上執行?—Vecloud微雲協議Cloud
- 檢視伺服器CPU的個數、CPU的核數、多核超執行緒數伺服器執行緒
- 我就想知道到底有幾個程式在執行
- 1、多執行緒同步——CPU、core核、執行緒、記憶體執行緒記憶體
- 如何檢視CPU核數和執行緒數?CPU的核心數、執行緒數的關係和區別執行緒
- OB有問必答 | OceanBase 如何做到 RTO < 30秒?
- linux 實時檢視一個 python 程式有幾個執行緒LinuxPython執行緒
- 根據CPU核數合理設定執行緒池大小執行緒
- 什麼?一個核同時執行兩個執行緒?執行緒
- OB有問必答 | OceanBase如何保證資料可靠性?
- 關於程式碼如何執行的五個問題
- 聊聊CPU的發展歷程之單核、多核、超執行緒單核執行緒
- 在 Linux 中查詢 CPU 的核數Linux
- Linux 從頭學 01:CPU 是如何執行一條指令的?Linux
- 人人都應該知道的CPU快取執行效率快取
- CPU內部的奧秘:程式碼是如何被執行的?
- 執行緒與程式之間有什麼關係?Linux執行緒與程式有什麼區別?執行緒Linux
- 如何在Linux終端同時執行多個Linux命令Linux
- linux有幾個執行級別?各具有哪些功能?Linux
- Linux 中如何設定每個特定的時間執行特定的程式Linux
- win10 如何看cpu 幾核的_win10cpu怎麼看幾核幾代Win10
- CPU明明8個核,網路卡為啥拼命折騰一號核?
- Linux中如何檢視有幾個telnet程式?Linux
- JVM調優jstack找出最耗cpu的執行緒&定位問題程式碼JVMJS執行緒
- 如何進行Linux CPU中的Kernel space分析Linux
- wsl中用qemu執行linux kernel ,ping github.com有問題LinuxGithub
- docker執行容器後agetty程式cpu佔用率100%Docker
- 執行緒繫結cpu核心的程式碼研究執行緒
- 如何在Linux中檢視所有正在執行的程式Linux
- Podman中如何執行一個 Linux 虛擬機器?Linux虛擬機
- Linux雜談:程式鎖核+實時執行緒導致的讀寫鎖死迴圈Linux執行緒
- 有個關於多執行緒的識別問題執行緒
- Linux程式間通訊有幾種方式?這8個你都知道嗎?Linux
- Linux中最多有多少程式?一個程式最多有多少執行緒?Linux執行緒