[질문] network driver에 대한 ioctl 이 차지하는 CPU overload
글쓴이: skjean / 작성시간: 월, 2006/04/03 - 5:13오후
제목 대로입니다.
eth0와 같은 network device driver를 만들고 ioctl 서비스를 몇개
만들었는데... 하나의 ioctl이 차지하는 CPU load가 얼마나 되는지
알고 싶습니다.
ioctl 전후에 gettimeofday를 삽입하여 해당 ioctl에 소요되는 시간은
억지로 구할 수 있었는데.. 실제 이 ioctl이 차지하는 CPU load를 알
방법을 알 수가 없네요..
그리고 gettimeofday를 사용해서 구한 시간이(ioctl 직전/직후 시간 차이)
실제 ioctl 명령에 따라 driver 내에서 모든 연산이 종료된 이후의 시간이라고
보장할 수 있는지도 궁금하구요..
동일 ioctl을 호출하더라도 ioctl에 대한 파라미터가 달라지면
driver 내에서 수행되는 연산의 양이 달라지기 때문에 이 연산에
따른 CPU Load를 구하고 싶은 것입니다.
정리하면 질문은 두가지입니다.
1. ioctl 직전/직후 시간 차이가 ioctl 내에서 정의된 driver의 모든 연산을
수행하는데 소요된 시간이라고 할 수 있는지요?
2. (1)번에서 구한 시간을 이용하거나, 혹은 다른 방법으로라도 한번의
ioctl에 소요되는 CPU load를 구할 방법이 있는지요?
많은 도움 주시기를 바라며, 좋은 하루 되세요~~~
Forums:
ioctl()의 연산 시간이
ioctl()의 연산 시간이 스케줄러의 time slice 크기(수십 ms)를 넘어가지 않거나 CPU를 두고 다투는 다른 경쟁 프로세스가 없다면 gettimeofday()의 결과를 신뢰하셔도 괜찮지 않을까 합니다. 측정해야 할 시간이 꽤 길고 여러 프로세스 사이의 문맥 전환이 자주 일어난다면 getrusage() 함수를 이용하실 수 있습니다. ioctl() 호출 전과 후의 ru_stime 필드값 차이를 확인하시면 됩니다. 단, 이 경우에도 getrusage()의 실행 시간이 있기 때문에 미세한 오차는 있습니다.
ioctl() 직전/직후 시간 차이가 driver의 ioctl() 핸들러의 모든 연산을 수행하는데 소요된 시간인지 여부는... 드라이버의 ioctl() 핸들러가 어떻게 작성되어 있는가에 달린 문제가 아닌가 합니다. 비동기적인 방법으로, 즉 ioctl() 핸들러는 일단 반환을 한 후 별도의 커널 스레드가 실제 작업을 수행하는 등의 방식으로 핸들러가 작성되어 있다면 확언할 수 없겠지만, 드라이버를 그렇게 작성하신 게 아니라면 대략 안심하실 수 있을 것 같습니다.
----
$PWD `date`
$PWD `date`
댓글 달기