본문 바로가기

perf top 사용하기 출처 : http://lethean.pe.kr/page/5/ 리눅스에서 병목 현상 디버깅이나 현재 실행중인 프로세스 중에서 가장 CPU 리소스를 많이 소모하는 녀석을 찾아야 할 경우가 있습니다. 이런 경우 가장 전통적이고 간단한 방법은 top 명령어를 실행해서 키보드 단축키 ’1′ / ‘H’를 눌러 CPU / 쓰레드별 사용량을 확인하는 것입니다. 또한 이와 관련된 전통적인 유닉스 명령어도 많지만, 리눅스에서 실행 루틴 수준에서 더 정밀하게 분석하고 싶다면 OProfile, Valgrind, Google Performance Tools 등과 같은 도구를 사용해도 됩니다. 그런데, 최근 리눅스 커널과 배포판에는 perf 추적(trace) 도구가 포함되어 있습니다. 그리고 이를 기반으로 한 여러 명령어 중에서.. 더보기
DWRR (Distributed weighted round-robin) Scheduler Overview: Trio extends the existing Linux scheduler with support for proportional-share scheduling. It uses a scheduling algorithm, called Distributed Weighted Round-Robin (DWRR), which retains the existing scheduler design as much as possible, and extends it to achieve proportional fairness with O(1) time complexity and a constant error bound, compared to the ideal fair scheduling algorithm. Th.. 더보기
wait()와 exit()함수의 동작 1. wait는 어떻게 process를 rq에서 삭제할까? 이번엔 실행중 인 process가 잠자게( wait )될때 어떻게 runqueue에서 제거 되는지 살펴 보도록 하자 실행중인 process를 재우기 위해선 wait 관련 함수( wait_event(), wait_event_timeout(), wait_event_interruptible() , wait_event_interruptible_timeout() )를 사용하게 되는데 여기서 설명하는것은 함수 자체에 대한 설명보다는 이런 함수들이 어떻게 현재의 current를 runqueue에서 제거하는지를 촛점에 맞추었으며 이해를 돕기 위해 wait_event_interruptible()를 기준으로 설명하도록 하겠다. 1. "wait.h" 에 있는 wai.. 더보기
fork() 함수의 동작 리눅스에서 fork를 통해 프로세스를 생성할때 프로세스를 어떻게 생성하고 어떻게 runqueue에 등록 시키는지 소스를 통해 그 순서를 정리해 보았다.. 아래 sequence diagram은 kernel2.6.24와 arm 기준으로 설명 하고 있으며 중요한 function과 변수에 대해서만 설명하도록 하고 나머지 궁금한 부분은 누가 뭐라 그래도 직접 찾아 보는것이 도움이 될것이라 생각한다. ^^ 1 . User Level이든 Kernel Level이든 fork()를 호출 하게 되면 clone() 시스템 호출에 의해 fork.c의 do_fork()을 호출하게 된다. 1.1 do_fork()에서는 기본적으로 프로세스에 핵심인 task_struc와 thread_info를 만들게 된다. thread_info는 .. 더보기