OS이야기

softirq 사용

НooпeУ 2011. 10. 13. 20:11
- 새로운 softirq를 추가하려 한다면 태스크릿으로는 왜 불충분한가를 곰곰히 따져 보아야 한다.
- 태스크릿은 동적으로 생성되며 락에 대한 요구사항이 덜 엄격하여 훨씬 간단함에도 불구하고 많은 경우에 있어 매우 잘 동작하기 때문이다.
- 그럼에도 불구하고 타임크리티컬한 응용프로그램이 자신만의 효율적인 락 메커니즘을 제공할 수 있따면 softirq가 가장 올바른 해결책일 수 있다.
 
인덱스 할당
 406enum
 407{
 408        HI_SOFTIRQ=0,
 409        TIMER_SOFTIRQ,
 410        NET_TX_SOFTIRQ,
 411        NET_RX_SOFTIRQ,
 412        BLOCK_SOFTIRQ,
 413        BLOCK_IOPOLL_SOFTIRQ,
 414        TASKLET_SOFTIRQ,
 415        SCHED_SOFTIRQ,
 416        HRTIMER_SOFTIRQ,
 417        RCU_SOFTIRQ,    /* Preferable RCU should always be the last softirq */
 418
 419        NR_SOFTIRQS 
420};

softirq 컴파일시 <linux/interrupt.h>에 있는 enum에 정의되어야 한다. 커널은 0부터 시작하는
이 인덱스를 상대적인 우선순위로 사용한다.
즉, 작은 인덱스의 softirq가 우선적으로 실행된다.

새 softirq를 만들려면 이 enum에 새 항목을 추가해야한다. 하지만 다른 코드에서 하듯이 이 목록의 맨 마지막
새 항목을 추가하는 것은 바람직하지 않다. 대신 새 softirq의 우선순위를 고려하여 적절히 다른 softirq 사이에
끼워넣는 것이 좋다.