728x90
반응형
http://chlrbgh0.tistory.com/entry/리눅스-taskstruct-관련
어제 올리고 보니 다시봐도 이해 안되게 써놓은 것 같아
간략히 정리(디테일한 정리는 힘드러영 ㅠㅠ)를 해야지 싶다.
* 아래는 일부 사실을 바탕으로한 지극히 주관적인 내용입니다잉 !!
1. Tickless Mode in Linux Kernel
What is ?)
- Tickless Mode
tickless kernel 에 대한 이야기는 이미 수년전부터 연구 및 적용 되어진 내용이며,
이는 개념상으로 시스템 상태 별로 모드를 설정하여 current time 을 체크 하는
부하를 줄이고자 하는 것으로 결과적으로는 저전력 기법이 된다는 것이다.
이에 대한 제반 사항으로,
- hrtimer(high-resolution timer) 를 말해야 할 것 같다.
v2.4 커널의 클럭 주파수는 100 Hz 였으며, 이의 성능 개선으로 v2.6 커널에서는 1000 Hz 의
고해상도 타이머 수행이 가능해졌다.
고해상도 타이머는 스케줄링의 정밀도를 높여 주고, 커널 레벨의 thread 스케줄링(아래 IRQ thread 에서 다루도록한다) 또한 v2.4 보다 원활한 환경을 지원하게 된다.
하지만, 정밀한 스케줄링과 커널 레벨의 thread 스케줄링은 시스템(ex, CPU 사용량 등)에 부하를 줄 수가 있으며,
이러한 부하는 곧 power consumption 을 의미한다.
이러한 관점에서 hrtimer 를 사용하는 tickless 모드( tickless 모드는 enable tickless mode, disable tickless mode 로 구분)는 우아한 전력 관리 기법을 제공한다고 볼 수 있지 않을까?
이러한 tickless 모드를 사용하고자 하는 경우,
최소 2.6.21 커널 이상의 버전을 요구(2.6.21 커널부터 mainstream 에 포함),
커널 빌드시에 tickless 모드에 대한 옵션을 설정해주어야하며,
보다 자세한 내용은 "kernel/time/Kconfig" 내부의 tickless 모드 내용을 참고토록한다.
커널 소스 코드 내부에 tickless 모드 구현 내용은 "kernel/time/tick-sched.c" 의 내용을 참고토록한다.
2. Moving interrupts to threads
What is ?)
Interrupt thread 는 쉽게 말해, 커널 레벨의 함수였던 ISR(Interrrupt Service Routine)의 수행을 thread 레벨로 분할한다는 것으로, WinCE 에서도 ISR Thread 의 개념으로 적용되어 있으며, 이에 대해서는 Linux history 와 연관되어 이에 대하여 정리하고자 한다.
- Ingo Molar : NPTL 프로젝트 및 rt-preemption 프로젝트를 수행하고 있는 리눅스 커널 개발자.
- NPTL Proejct
뜬금없이 Ingo Molar 를 언급하게 된 것은 다 이유가 있으니 ... ...
v2.4 커널에서 리눅스의 thread 는 우리가 pthread 라고 칭하는 user-level 에서 수행되던 light weight process 의 개념이었다. 이러한 pthread 의 성능 개선을 위하여 쟁쟁한 두 곳이 경쟁을 벌였으니, 하나는 그 이름도 당당한 IBM, 다른 하나가 바로 Ingo Molar 가 소속한 Red Hat 이었다.
때는 2003년 중반 IBM 의 NGPT(Next Generation POSIX Threads) 프로젝트 와 Red Hat 의 NPTL (Native POSIX Threads Library) 프로젝트는 갈림길을 만나게 되었다. 이유는 확인되지 않았으나, IBM 의 NGPT 프로젝트는 사실상 버려지게 되었고, 이와 비슷한 시기 (2003년 중반경) Red Hat 의 NPTL 이 릴리즈를 시작했으며, NPTL 은 v2.6커널에 포함(엄밀히 말하면 v2.6 커널의 glibc 에 포함되었다)되어졌으며, 이는 커널 레벨의 thread 스케줄링 환경제공을 의미한다.
NPTL 을 짚고 넘어가자면, v2.4 pthread 의 성능 개선, 간략히 표현하자면 커널 레벨 thread 생성 및 스케줄링이 주요한 목적이라 볼 수 있다.
여담으로 rt-preemption 은 리눅스 라는 운영체제에 실시간성을 부여하고자하는 프로젝트로 patch 적용을 통하여 4단계 preemption level 을 설정 할 수 있다. NPTL 환경이 rt-preemption 환경을 지원한다고도 볼 수 있으니, 상당히 흥미 있는 일이다.
- IRQ Thread
전통적으로 리눅스의 인터럽트 처리는 크게 Top half 와 Bottom half 로 나뉘어진다고 한다. 여기서 Top half와 Bottom half 에 대응 되는 표현들이 몇가지 있는 데, 간략히 정리하자면 아래와 같다.
Top half : NMI(Non-Maskable Interrupt), Fast Interrupt, Hardirq
Bottom half : MI(Maskable Interrupt), Slow Interrupt, Softirq
v.2.6.29 커널까지의 mainstream 커널에서 인터럽트의 처리는 커널 레벨의 크리티컬한 함수 영역이었으나, ㅑ취include/linux/interrupt.h 의 request_threaded_irq() 추가와 include/linux/sched.h 내부 task_struct 의 thread_struct *irqaction 멤버 추가는 리눅스 운영체제의 실시간성 향상(리눅스가 리얼타임이 되는 것이 아니라 단지 실시간성의 향상을 가져오는 내용임을 구분해야함)을 반영함을 의미한다.
이러한 IRQ thread 또한 위에 언급된 NPTL 환경이 근간이 됨은 당연한 일이다.
덧붙이자면, request_threaded_irq() 함수는 Hardirq 를 처리를 담당하는데, thread 를 이용한 인터럽트 처리가 어떠한 결과를 가져올 것인가는 한번쯤 생각해볼만한 문제일 것이다.
이러한 IRQ Thread 를 사용하기 위해 커널 버전 확인(2.6.30 and later) 및 옵션 설정이 필요할 것이다.
reference)
1. http://lwn.net/Articles/302043/
2. http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library
3. http://www.aesop-embedded.org
4. http://lxr.linux.no
728x90
반응형
댓글