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.hWindows 관련 라이브러리인 것 같습니다.

이 파일에서는 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 솔루션을 검색할 때 결과는 셸 수준 응답으로 인해 혼동됩니다. 하지만 그 대신 내가 찾고 있는 것은 C이 정보를 제공하는 인터페이스와 핸들의 헤더입니다.

cfgmgr32.hWindows의 헤더와 유사한 목적을 제공하는 특정 Linux 헤더가 있습니까? 그렇지 않은 경우 이러한 헤더나 기능을 검색할 수 있는 검색 가능한 Linux 커널 리소스가 있습니까?

답변1

Linux에서는 이 정보를 다음에서 찾을 수 있습니다./proc/statcpu라인, 일반적으로 거기에서 구문 분석됩니다. 동일한 정보를 제공하는 사용자 공간 액세스 기능이 없다고 생각합니다.

이 행의 값은 사용자 모드에서 소요된 시간, 낮은 우선순위 사용자 모드에서 소요된 시간, 시스템 모드에서 소요된 시간, 유휴 작업에서 소요된 시간 등을 제공합니다. 자세한 내용은 위 링크를 참조하세요.

예를 들어 함수를 사용하여 현재 프로세스 및/또는 해당 하위 프로세스에 대한 타이밍 정보를 검색할 수 있습니다.POSIXgetrusage그리고times.

관련 정보