top 명령어에서 cpu 점유율 구하는 방법 혹시 아시나요?
글쓴이: munhoney / 작성시간: 월, 2009/09/28 - 2:52오후
안녕하세요
cpu 점유율 측정하는 프로그램 작성 중에 한가지 넘지 못한 부분이 있네요.
저는 일반적으로 proc에 있는 schedstat를 사용하여 계산하였는데, top 명령어에서는 이런 방법이 아닌 다른 방법을 사용하는 것 같더라구요.
그런데, 소스 코드를 보고 있자니 조금 복잡하네요. proc을 사용하지 않고 하는것 같은데, 혹시 어떤 방법으로 측정하는지 아시나요?
아신다면, 답변좀.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 부탁합니다.
Forums:


기억이 잘
기억이 잘 안납니다만.. proc을 이용하는 것이 맞을 겁니다. 그리고 다음은 한 4년전에 제가 만든 코드인데.. 참고해 보세요.
#!/usr/bin/perl use strict; my $__used = 1; my $__nice = 2; my $__sys = 3; my $__idle = 4; my $__iowait = 5; my $__cxxx = 6; my $__cyyy = 7; my $_user = 0; my $_sys = 1; my $_idle = 2; my $_iowa = 3; my $_ext = 4; my @cpus_prev; my @cpus_post; @cpus_prev = getstat (); sleep (2); @cpus_post = getstat (); my $user = $cpus_post[$_user] - $cpus_prev[$_user]; my $sys = $cpus_post[$_sys] - $cpus_prev[$_sys]; my $idle = $cpus_post[$_idle] - $cpus_prev[$_idle]; my $iowa = $cpus_post[$_iowa] - $cpus_prev[$_iowa]; my $ext = $cpus_post[$_ext] - $cpus_prev[$_ext]; my $div = $user + $sys + $idle + $iowa; my $scale = 100.0 / $div; printf ("%.2f : %.2f : %.2f\n", fixed($user), fixed ($sys), fixed ($idle)); sub fixed { my ($i) = @_; return ($i * $scale); } sub getstat { my @_cpu; my @_proc; my $__proc = `cat /proc/stat | grep cpu0`; chomp ($__proc); @_proc = split /[\s]+/, $__proc; # for 2.4 kernel $_proc[$__iowait] = 0; $_proc[$__cxxx] = 0; $_proc[$__cyyy] = 0; $_cpu[$_user] = $_proc[$__used] + $_proc[$__nice]; $_cpu[$_sys] = $_proc[$__sys] + $_proc[$__cxxx] + $_proc[$__cyyy]; $_cpu[$_idle] = $_proc[$__idle]; $_cpu[$_iowa] = $_proc[$__iowait]; return @_cpu; } exit (0);흠.. kernel 2.4에서
흠.. kernel 2.4에서 사용하던 코드라서.. 2.6에서는 좀 달라졌을지로 모르겠군요 :-)
아 감사합니다.~~ ^^''
.
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
댓글 달기