프로세스 스케줄링에 대한 질문입니다.

mamoth07의 이미지

저는 리눅스 스케줄링에 대해 공부하는 학생입니다.
우선 질문하구 싶은것은..
우선순위 변경을 위해서 사용하는것이 리눅스 책에서는
nice, priority, policy(정책)등으로 나와있는데 제가 임의의 프로세스를 만든후 cpu사용률을 모니터링하면서, 위의 3가지 스케줄링 기법을 사용하였습니다. 근데 nice값에 의해서만 cpu사용률이 변화하였고, 나머지 priority와 policy(fifo, r/r,other)등을 사용해서는 cpu사용률에 아무런 변화도 못주었습니다.
분명 리눅스커널과 같은 책에서는 priority와 스케줄링 정책을 이용하면 우선순위가 변화한다구들 하는데 저는 아무런 영향이 없는지 모르겠습니다.
알고계신 고수님들 제발 답변좀 부탁드릴께요..
그럼 부탁드립니다.
(__)(--)(__)(--)

datamind의 이미지

root 로 실행하고,
설정한 다음에 리턴값을 체크해 보세요..
그리고, policy 는 priority 를 변화시키지 않는 것으로 알고 있는데요,
쩝,, -_-;;;

mamoth07의 이미지

감사합니다..
혹시 또 이런 이유를 알고계신분 부탁드릴게요.

익명 사용자의 이미지

몇가지 확인사항이 있습니다.

테스트는 어떤 코드로 하셨나요?
즉, 점유율을 높이기 위해서 어떤것을 사용하셨죠?
코드를 보여주세요.

mamoth07의 이미지

프로그램 코딩은 C로써 코딩하였습니다.
setpriority()시스템 콜을 이용하여 간단 프로세스 3개를 생성하고 3개의 프로세스 id를 이용하여 cpu사용률을 측정하였습니다.
혹시나 더 알기를 원하시면 답변주십쇼..
그리고 감사드립니다.
^^

익명 사용자의 이미지

mamoth07 wrote:
프로그램 코딩은 C로써 코딩하였습니다.
setpriority()시스템 콜을 이용하여 8) 간단 프로세스 3개를 생성하고 3개의 프로세스 id를 이용하여 cpu사용률을 측정하였습니다.
혹시나 더 알기를 원하시면 답변주십쇼..
그리고 감사드립니다.
^^

제가 알고 싶은것은 8) 간단 프로세스 의 소스가 어떤 내용인지를....

datamind의 이미지

음...
먼가 생각을 잘못하고 계시는것 같은데요..
어케 Priority 가 높은 프로세서가 CPU 사용량이 많다고 생각을 하시는지,
정확한 개념은 책을 참고하시기 바랍니다.

mamoth07의 이미지

임의 3개의 프로세스에 대한 CPU 사용률을 모니터링을 하고 있습니다.
이때 스케줄링 정책을 변화시키면 책에서와 같이 각각의 스케줄러 정책이 틀리기 때문에 어느정도의 CPU 사용률이 변화를 해야하는것이 아닌가요?
하지만 제가 실험해본결과 스케줄링 정책을(FIFO,R/R,OTHER)변화시켜도 3개의 프로세스의 CPU사용률이 같게 측정됩니다.
혹시나 제가 잘못알고 있는건지....

datamind의 이미지

리눅스에서 스케줄러 정책에서 우선순위가 결정하는게 무엇인지를 찾아보시기 바랍니다. 우선순위가 높다고 CPU 실행시간을 많이 가지는 것이 아닙니다.

익명 사용자의 이미지

예를 들어 1번 2번 3번 프로세스가 있습니다.
이 프로세스들은 그냥 무한이 자신의 카운트를 증가시킵니다.

우선정책을 바꾸기 전에는 이 값은 3개의 프로세스가
거의 흡사하게 증가하는 것을 볼수 있습니다. (약간의 차이는 무시하고.)

만약 1번 프로세스의 정책을 높였습니다.
1번 프로세스의 카운트값이 보다 많이 증가합니다.

하지만 CPU점유율과는 거의 무관합니다.
(완전히 무관하다고는 볼수 없지만 기대치만큼 눈에 띄지 않습니다.)

그래서 3개의 프로세스에 대한 소스를 궁굼해 했습니다.

이것은 스케쥴 정책일뿐 CPU를 더 많이 사용한다는 것은 아닙니다.

물론 우선정책을 높인 1번 프로세스가 CPU를 더 많이 사용하지만
나머지 2번, 3번은 더 조금 사용하게 됩니다. 상대적인 분배라고
생각하시면 되지 않을까라는 생각해봅니다.

수정:
그래서.... 스케줄 정책은 그럼 뭣하러 있는가 라는 의문이 나올겁니다.
꼭 그러한 것은 아니지만 보통 이런경우 스케쥴 정책을 변경합니다.

많은 프로세스들이 제각기 하는일이 있다고 하죠.
그런데 그중에 1개 또는 다수가 굉장히 시간이 정확해야 합니다.
그런데 CPU사용율이 100%에 다가서는 빈도율이 높다고 합시다.
이런경우 시간이 중요한 프로세스는 100%점유율에 다가서면
시간이 틀어질수 있을겁니다.
이때 보다 좀더 낳아지라는 의미에서 스케쥴 정책을 바꾸게 됩니다.
사실 여기서 실질적인 해결책은 사양을 높이는것이지만
그것이 쉽지 않다는 이유로 사용하게 됩니다.

mamoth07의 이미지

답변에 정말 감사드립니다.
:D

shkwon81의 이미지

원칙적으로는 가장 높은 우선 순위를 갖는 SCHED_FIFO 정책의 쓰레드(혹은 프로세스)가 존재한다면, 그 쓰레드가 CPU를 점유한 채로 절대 다른 쓰레드들에게 스케쥴링이 넘어가서는 안 됩니다.
그래야 FIFO 스케쥴링의 의미를 가지죠..

또한 우선 순위의 개념과 스케쥴링 정책은 엄연히 다릅니다.
만일, 우선 순위가 더 높은 SCHED_RR 정책의 쓰레드라면, 더 낮은 우선 순위를 갖는 SCHED_FIFO 쓰레드를 실행되지 못하게 만듭니다.
SCHED_FIFO > SCHED_RR 이란 식은 잘못된 생각입니다.

저도, 리눅스 스케쥴링을 공부하다가 같은 문제에 봉착한 적이 있습니다.
왜 최대 우선 순위의 SCHED_FIFO 쓰레드(CPU 연산만 수행함)가 다른 모든 쓰레드들을 선점하지 못하느냐의 문제인데요..
도대체 왜 안되는 것일까요? 저도 사실 답이 궁금한데요..

이건 제 견해로는 리눅스 커널의 구현 문제라고 봅니다. 즉, 원래는 SCHED_FIFO 쓰레드가 하나 수행되면, 다른 더 높은 우선 순위의 쓰레드가 존재하지 않는 한 절대 다른 쓰레드에 의해 선점되서는 안 됩니다. (I/O 블락, swapping 등은 없다고 가정)
POSIX.1b realtime extension에서 규정한 행동이 이렇지 않나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.