簡體   English   中英

如何在Linux中獲取進程的CPU信息?

[英]How to get the CPU information of a process in Linux?

在我的服務器中,存在多個CPU(0-7)。 我需要運行並行代碼,每個進程都有一個CPU,所以我如何知道每個進程的CPU信息?

例如,如果存在兩個進程(#0和#1),則進程#0使用CPU 5,進程#1使用CPU 7。

我如何通過C或Fortran編程知道?

使用sched_getcpu()調用。

請記住,可以自由調度進程/線程以在任何可用的cpu / core上運行,因此您的一個進程可以在核心1上運行一秒,在核心2上運行下一個毫秒。 您可以使用sched_setaffinity ()限制允許進程運行的處理器

我不知道在Linux上有任何系統調用,它會為您提供有關正在運行的線程的CPU的一般信息。 @nos是正確的,sched_getcpu()會告訴你一個線程正在運行哪個CPU,但僅用於調用上下文。

您可以通過查詢/proc文件系統來完成此操作。 但是,如果您發現自己圍繞此功能構建應用程序,則可能需要重新檢查您的設計。

文件/proc/<pid>/stats包含一個字段,為您提供進程運行的最后一個CPU。 您只需要解析輸出。 (使用man proc查看字段列表)。

通常,操作系統的任務是從應用程序中抽象出這樣的東西。 通常情況下,我看到我的應用程序(就像在一個巨大的文件上執行grep一樣簡單)每隔一段時間就會改變CPU核心。

現在,如果要在特定核心上強制應用程序,可以手動設置CPU親緣關系。

我以前寫了一些非常奇怪的軟件,我從來沒有想過要知道和/或控制它。

你為什么知道?

通常,您必須更改CPU親和性,因為進程可以在處理器之間進行遷移: CPU Affinity (Linux Journal,2003)。

更一般地說,你為什么想知道? Linux內核非常擅長調度進程/線程以充分利用可用內核。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM