Cpu

C-std 標頭檔包含系統、使用者和核心時間的幫助函式?

  • January 24, 2021

基本上,我正在使用 Nvidia 的新 github 儲存庫並嘗試在跨平台設置中編譯它們。具體來說,我正在嘗試在 Fedora 33 上編譯它們。

我遇到了一個問題:

In file included from /home/chris/.../sample_example.cpp:55:
/home/chris/.../nvml_monitor.hpp:19:10: fatal error: cfgmgr32.h: No such file or directory
  19 | #include <cfgmgr32.h>
     |          ^~~~~~~~~~~

cfgmgr32.h似乎是一個特定於 Windows 的庫。

在文件nvml_monitor.hpp中,看起來我可以禁用大部分 Windows 內容。但是,我認為以下特定於 Windows 的功能會很有用:

 float getCpuLoad()
 {
   static uint64_t _previousTotalTicks = 0;
   static uint64_t _previousIdleTicks  = 0;

   FILETIME idleTime, kernelTime, userTime;
   GetSystemTimes(&idleTime, &kernelTime, &userTime);

   auto FileTimeToInt64 = [](const FILETIME& ft) {
     return (((uint64_t)(ft.dwHighDateTime)) << 32) | ((uint64_t)ft.dwLowDateTime);
   };

   auto totalTicks = FileTimeToInt64(kernelTime) + FileTimeToInt64(userTime);
   auto idleTicks  = FileTimeToInt64(idleTime);

   uint64_t totalTicksSinceLastTime = totalTicks - _previousTotalTicks;
   uint64_t idleTicksSinceLastTime  = idleTicks - _previousIdleTicks;

   float result = 1.0f - ((totalTicksSinceLastTime > 0) ? ((float)idleTicksSinceLastTime) / totalTicksSinceLastTime : 0);

   _previousTotalTicks = totalTicks;
   _previousIdleTicks  = idleTicks;

   return result * 100.f;
 }

我正在尋找的不是任何人來“做這項工作”或任何東西——只是一個開始的地方或一個可以繼續前進的線索。

在此問題空間中搜尋 linux 解決方案時,結果會被 shell 級響應混淆。但是,相反,我正在尋找的是C為這些資訊提供介面和句柄的標頭。

是否有任何特定的 Linux 標頭與cfgmgr32.hWindows 中的標頭類似?如果沒有,是否有可搜尋的 linux 核心資源來發現這些標頭或功能?

在 Linux 中,這些資訊在/proc/statcpu中可用,並且通常從那裡解析——我認為沒有使用者空間可訪問的函式可以提供相同的資訊。

該行中的值給出了使用者模式所花費的時間、低優先級使用者模式所花費的時間、系統模式所花費的時間、空閒任務所花費的時間等等;有關詳細資訊,請參閱上面的連結。

函式可用於檢索目前程序和/或其子程序的時間資訊;例如POSIXgetrusagetimes.

引用自:https://unix.stackexchange.com/questions/630654