[轉] 多核CPU 查看進程分配的CPU具體核id

轉自:https://linux.cn/article-6307-1.htmlhtml

ps. 方法二簡明直接 done!linux

 

當你在 多核 NUMA 處理器上運行須要較高性能的 HPC(高性能計算)程序或很是消耗網絡資源的程序時,CPU/memory 的親和力是限度其發揮最大性能的重要因素之一。在同一 NUMA 節點上調度最相關的進程能夠減小緩慢的遠程內存訪問。像英特爾 Sandy Bridge 處理器,該處理器有一個集成的 PCIe 控制器,你能夠在同一 NUMA 節點上調度網絡 I/O 負載(如網卡)來突破 PCI 到 CPU 親和力限制。性能優化

做爲性能優化和故障排除的一部分,你可能想知道特定的進程被調度到哪一個 CPU 內核(或 NUMA 節點)上運行。網絡

這裏有幾種方法能夠 找出哪一個 CPU 內核被調度來運行給定的 Linux 進程或線程。ide

方法一

若是一個進程使用 taskset 命令明確的被固定(pinned)到 CPU 的特定內核上,你可使用 taskset 命令找出被固定的 CPU 內核:性能

  1. $ taskset -c -p <pid>

例如, 若是你對 PID 5357 這個進程有興趣:優化

  1. $ taskset -c -p 5357
    pid 5357's current affinity list: 5

輸出顯示這個過程被固定在 CPU 內核 5上。spa

可是,若是你沒有明確固定進程到任何 CPU 內核,你會獲得相似下面的親和力列表。命令行

  1. pid 5357's current affinity list: 0-11

輸出代表該進程可能會被安排在從0到11中的任何一個 CPU 內核。在這種狀況下,taskset 不能識別該進程當前被分配給哪一個 CPU 內核,你應該使用以下所述的方法。線程

方法二

ps 命令能夠告訴你每一個進程/線程目前分配到的 (在「PSR」列)CPU ID。

  1. $ 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」)列下。

  1. $ 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)。

相關文章
相關標籤/搜索