나는 외국 코드를 "안전하게" 실행하는 데 도움이 되는 프로그램을 작성하고 있습니다. 또한 외부 코드의 메모리 활용도와 CPU 계산 시간도 얻고 싶었기 때문에 cgroup을 사용해야겠다고 생각했습니다.
cgroup을 생성한 /sys/fs/cgroup/cpuacct/<program name>
다음 외부 코드를 실행하는 PID를 cgroups.procs 파일에 추가했습니다.
/sys/fs/cgroup/cpuacct/<program name>/cpuacct.usage
프로그램이 실행된 후 CPU 시간을 읽으 려고 합니다 .
~에 따르면이것링크에서 얻은 번호는 USER_HZ에 있습니다.
sysconf 및 getconf에 대한 매뉴얼 페이지를 읽고 탐색한 후 다음 명령을 실행했는데 getconf CLK_TCK
출력은 100이었습니다.
sysconf 매뉴얼 페이지에서 이는 "초당 클럭 틱 수"입니다. 그러면 CPU 계산 시간을 초 단위로 얻기 위해 cpuacct.usage에서 얻은 숫자를 100으로 나눌 수 있다는 뜻인가요?
왜냐하면 0에서 1000 사이의 모든 숫자 목록을 생성한 다음 목록의 길이를 인쇄하는 간단한 Python 프로그램의 경우 평균 약 2억 7천만 USER_HZ를 얻는 숫자이기 때문입니다. 270만 초는 제게는 맞지 않는 것 같습니다.
누군가 USER_HZ를 밀리초로 변환하는 방법을 설명해 줄 수 있나요? 아니면 전체 과정에 대한 나의 이해가 잘못되었을 수도 있습니다.
미리 감사드립니다!
답변1
sysconf 매뉴얼 페이지에서 이는 "초당 클럭 틱 수"입니다. 그러면 CPU 계산 시간을 초 단위로 얻기 위해 cpuacct.usage에서 얻은 숫자를 100으로 나눌 수 있다는 뜻인가요?
커널 문서에 따르면여기
.../sys/fs/cgroup/cpuacct.usage는 CPU 시간을 나노초 단위로 제공합니다...
따라서 값을 USER_HZ가 아닌 나노초(1,000,000,000) 단위로 나누어야 합니다.
cpuacct.stat
USER_HZ의 값만 .