2016-12-14 5 views
1

Embedded Linux(Kernel 2.6.37)ARM입니다. busybox 1.13.2에서 기본값은 top입니다. 그리고이 Linux을 실행하기 위해 크로스 컴파일을 통해 procps-ng 3.3.11을 빌드합니다. 나는 busyboxprocps-ng에서 top 출력을 통해 과정 %cpu가 다르다는 것을 발견했습니다.다른 프로세스의 % CPU가 busybox 및 procps-ng의 상단을 통해 출력됩니다.

예를 들어, 한 프로세스의 %cpu은 약 30 %이지만, busybox top은 약 10 % 만 표시합니다. 총 %cpuprocps-ng topbusybox top에서 동일합니다.
그럼 나는 계산 소스 코드 busyboxprocps-ng을 읽었습니다. 나는 한 프로세스의 %cpu에 대해 서로 다른 계산 공식을 가지고있는 것을 발견했습니다.


- busybox top: 
    CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks 
    (pcpu is delta of sys+user time between samples) 

- procps-ng top: 
    CPU% = s->pcpu/total_cpu_ticks 

왜이 개 프로젝트는 서로 다른 계산 공식을 선택? 다른 애플리케이션 케이스를 위해 설계 되었습니까? 감사합니다.

답변

0

가 procps의-NG 팀과이 문제를 논의 있고, 여기에서 중요한 점입니다 :

오후 3시 12분 2016년 12월 28일에가, 크레이그 작은 썼다 :
아마 다른 방법이있다 이것 좀 봐. 제가 말하고자하는 첫 번째 것은 busybox가 주 프로그램이 수행해야하는 작업을 에뮬레이트하거나 모방 한 것으로 가정하기 때문에 busybox와 실제 프로그램간에 차이가 있다면 busybox가 잘못되었다고 말할 수 있습니다. 그것은 실제 파일과는 다르게 파일을 인쇄하는 비지 박스와 같습니다.

의 다시이 공식을 살펴 보자 :

  • 비지 박스 상단 :
    :
    CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks

  • procps의-NG 상단 (PCPU는 샘플 사이 + 사용자 시간 SYS의 델타입니다) CPU% = s->pcpu/total_cpu_ticks

,210

이제 그것을 다시 준비하자

  • 비지 박스 상단 :
    CPU% = s->pcpu/total_cpu_ticks * busy_cpu_ticks/sum(s->pcpu)
    CPU% = top_CPU% * busy_cpu_ticks/sum(s->pcpu)

이것은 차이 (PCPU는 샘플 사이 + 사용자 시간 SYS의 델타입니다). busybox는 어떤 최고 운동에 대한 busy_cpu_ticks/sum(s->pcpu)의 비율을 추가합니다. 당신은 종류의 비지 박스 소스에 read_cpu_jiffy에서 볼 수

RATIO = Sum(Usr + Nice + System + Irq + sirq + steal)/Sum(Usr + System)

:로이 비율은 기록 될 수 있습니다. 나는이 비율이 무엇을 하려는지 또는 왜 필요한지 이해하지 못한다. . 특히 당신이 흉내 내고 자하는 프로그램이 그것을 가지고 있지 않을 때.

procps top은이주기에서 사용 가능한 총 jiffies 중 X %가이 프로그램에서 사용되었습니다. busybox는 약간의 스케일링을 거기에 넣습니다. 따라서 프로세스가 시스템 및 사용자 부품에서 CPU의 10 %를 사용하는 경우 top는 10 %를 표시합니다. 해당주기의 경우 프로세스가 사용자 및 시스템에서 50 %의 시간 동안 진행 중이며 busybox는 20 % (10 % x 100/50)로 표시됩니다.

나는 왜 그렇게했는지 모르겠다.

자세한 내용은 토론 링크를 참조하시기 바랍니다 :
discussion: different process's %cpu output via top from busybox and procps-ng