[英]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.