2021. 12. 14. 18:25ㆍLinux
- 목차
* bottom half 사용 이유
1. 다른 코드를 너무 오래 동안 중단시켜서는 안 됨 2. 처리 중인 interrupt를 비활성화 시킨 상태에서, 최악의 경우 IRQF_DISABLED가 설정되지 않은 경우, 현재 procesor의 모든 interrut를 비활성화 시킨 상태에서 실행 됨 즉, 오래 걸리면 interrupt가 무시될 수 있음 3. 휴면 상태가 될 수 없음 |
cf.
일반적인 bottom half는 tasklet을이용해 구현하는 것이 좋다.
1) 동적생성 가능
2) 빠른편
3) 사용이간단 (multi-processor에대한 신경을 안 써도 됨)
state를 둬서 이미 실행 중인 것은 실행 안 하게 함
ISR은
interrupt 수신상태를 확인
등의 간단한 작업만 수행해야 함
그래야 interrupt를제때 놓치지 않고 실행할 수 있기에,
반응성이향상됨
* bottom half의 3가지 종류
1) softirq 정적 등록 성능 높음, 동일 실행 가능 (다른 processor에서 동일 softirq의 실행 가능) 2) tasklet softirq기반의 동적 등록 가능 성능 낮음, 동일 실행 불가 (다른 processor에서 동일 tasklet의 실행 불가) 3) workqueue |
softirq는 network 처럼 성능이 아주 중요한 경우에 사용함
하지만, 같은 softirq가동시에 실행 될 수 있기에 주의가 필요
정적으로등록
지연되는 작업이 휴면 상태 전환이 필요한 경우라면 workqueue를사용
cf.
kernel timer
: 타이머를이용하면 일정 시간이 경과한 이후에 작업을 지연 시킬 수 있음
* softirq
1. 특징 가장 실행 시간에 민감하고 중요한 후반부 처리의 수행 시 사용 ex. Network, block device 절대 다른 softirq를 선점하지 않음 다른 processor에서 같은 softirq까지 실행 될 수 있음 interrupt 활성화 시 동작 -> handler 실행 중 현재것 비활성 즉, 다른 processor에서 동작 가능 그래서 일반적인 경우 tasklet을 사용하길 권장 softirq handler는 processor 별 data만을 사용하고 명시적 lock을 사용하지 않아야 하며, 이로서 여러 processor가 (개수에 관계 없이) 사용 가능함 |
cf.
tasklet
: 동적 생성 가능
lock 사용이 덜 엄격함
사용하기 편하면서 괜찮은 성능
자체적으로 효율적 lock 관리가가능하다면 softirq가 좋음
(CPU 별 lock 걸어줘야 함)
2. 실행 시점 1) hardware interrupt 코드의 return 시점 2) ksoftirqd kernel thread 내에서 3) 명시적으로 코드에서 지연 상태인(defered) softirq의 실행 경우 |
struct softirq_action { void (*action)(struct softirq_action *); } @ kernel/softirq.c static struct softirq_Action softirq_vec[NR_SOFTIRQS]; // max 32 |
32개중 9개만 등록되어
softirq handler
voidsoftirq_handler(struct aoftirq_action *)
my_softirq pointer가 softirq_vec 의 한 item을가리키고 있는 경우,
다음과같이 softirq handler를호출 할 수 있음
my_softirq->action(my_softirq); |
softirq raise
실행 표시임
interrupt handler가실행 종료 전에 해당 softirq에실행 표시를 함(raise)
'Linux' 카테고리의 다른 글
kernel에서 user level로 uevent 보내는 법 (how to send an uevent to the user space) (0) | 2021.12.31 |
---|---|
Linux kernel Bottom half 정리 (softirq, tasklet, workqueue) - part 2 (0) | 2021.12.31 |
virtual address space (0) | 2021.12.13 |
process scheduling (0) | 2021.12.13 |
compat IOCTL (0) | 2021.09.27 |