커널 프로세스를 특정 코어에서만 동작하도록 하는 방법
글쓴이: joy21c / 작성시간: 화, 2010/08/03 - 10:31오전
안녕하세요.
현재 인텔 제온 4core(하이퍼스레딩 8core)와 64비트 리눅스를 사용하고 있습니다.
이 환경에서 운영체제(커널 프로세스) 및 일반적인 프로세스는 한개의 코어에서만 동작하도록 하고
나머지 코어는 특수한 목적의 멀티스레드 프로그램을 동작시키려고 합니다.
여기서 질문입니다.
1. 사용자 스레드는 pthread_setaffinity()로 할당하고 mpstat를 사용해서 모니터링 할 수 있는걸로 알고 있는데요.
커널 프로세스는 어떤 방법으로 할당하고 모니터링 할 수 있는지요?
2. 할당한 코어를 다른 프로세스가 사용하지 못하도록 막을 수 있는 방법이 있는지요?(커널모드 & 사용자모드)
도움을 부탁드립니다.
Forums:
음..
>1. 사용자 스레드는 pthread_setaffinity()로 할당하고 mpstat를 사용해서 모니터링 할 수 있는걸로 알고 있는데요.
>커널 프로세스는 어떤 방법으로 할당하고 모니터링 할 수 있는지요?
pthread_setaffinity() 가 내부적으로는 sys_sched_affinity 시스템콜을 호출하게 되는데요
커널쓰레드 내에서 직접 sched_setaffinity()를 호출하는 방식으로 구현 하면 되겠네요.
>2. 할당한 코어를 다른 프로세스가 사용하지 못하도록 막을 수 있는 방법이 있는지요?(커널모드 & 사용자모드)
명시적으로 커널에서 제공해주는 방법은 없는 것으로 알고 있습니다.
cpu runqueue 사이의 migration 코드를 수정하시거나,
프로세스 생성 시 특정 cpu의 runqueue에 task가 진입하도록 커널 코드를 변경하면 되겠네요..
아니면 cpu hotplug를 이용해서 cpu를 disable 시키면 해당 구간에는 어떠한 프로세스도 사용하지 못하게 되겠네요.
감사합니다.
감사합니다.
댓글 달기