C-std 标头包含系统、用户和内核时间的辅助函数?

C-std 标头包含系统、用户和内核时间的辅助函数?

基本上,我正在使用 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提供此信息的接口和句柄的标头。

cfgmgr32.h是否有任何特定的 Linux 标头与Windows 中的标头用途相似?如果没有,是否有可搜索的 Linux 内核资源来发现这些标头或功能?

答案1

在 Linux 中,此信息可在/proc/statcpu线,并且通常是从那里解析的 - 我认为没有一个用户空间可访问的函数可以提供相同的信息。

该行中的值给出了用户模式所花费的时间、低优先级用户模式所花费的时间、系统模式所花费的时间、空闲任务所花费的时间等;详情请参阅上面的链接。

函数可用于检索当前进程和/或其子进程的时间信息;例如POSIX 的getrusagetimes

相关内容