sleep(0) CPU 증가 문제
글쓴이: kscpooh / 작성시간: 토, 2012/02/18 - 1:03오전
커널은 2.6.32-220.el6.x86_64 가 깔려있습니다.
커널 2.6.18은 sleep(0)해도 CPU가 증가하지 않는데.. CentOS 6.2 설치후 Sleep(0)이 CPU가 많이 올라가네요.
시간을 체크해보니 sleep(0)에서 깨어나는 시간도 좀 차이가 있구요.
서버에서 데이터 수신을 대기하는 쓰레드에서 윈도우즈 처럼 sleep(0) 으로 제어권만 넘길 때
CPU가 올라가지 않도록 하는 방법이 있나요?
커널의 영향도 있는 것 같은데 세팅을 바꾸거나 .. 혹은 sleep(0)을 이용하지 않는다면 어떤게 가능할지요..
감사합니다.
Forums:
한번
sched_yield()를 써보시고 시험해 보세요.
http://linux.die.net/man/2/sched_yield
감사합니다. ^^
감사합니다. ^^
sched_yield()도 사용할 수 있겠지만,
sched_yield()도 사용할 수 있겠지만, design을 약간 바꾸시는 것도 고려해보세요.
아래 lwn 기사가 도움이 되실겁니다. 오늘 올라온 자료라 lwn에 subscribe 안 되어있다면, 다음주 정도부터 보실 수 있겠네요.
Short sleeps suffering from slack - http://lwn.net/Articles/482168/
sleep(0)의 동작이 kernel 버전에 따라 변해왔다는 내용이 있습니다 (high-resolution timer, timer slack의 추가에 따라..).
그리고, 다음과 같은 내용도 있군요.
An alternative would be to transform sleep(0) into a call to sched_yield(). But that idea is not hugely popular with the scheduler developers, who think that calls to sched_yield() are almost always a bad idea. It is better, they say, to fix the applications to stop polling or doing whatever else it is that they do that causes developers to think that explicitly yielding the CPU is the right thing to do.
제어권을 넘겨야 한다면, 조건변수나 그외 방식을 써서 명시적으로 넘기도록 하는게 더 올바른 방식이 아닌지 고민해볼 필요가 있겠습니다.
자세히 살펴보아야겠네요. 감사합니다.^^
자세히 살펴보아야겠네요.
감사합니다.^^
댓글 달기