Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

110187
803
94439


[리눅스커널] 워크큐: 딜레이 워크는 누가 언제 호출할까? 8장. 워크큐

이전 소절에서는 schedule_delayed_work() 함수를 호출하면 동적 타이머를 실행해서 지정한 지연 시각 후에 동적 타이머 핸들러인 delayed_work_timer_fn() 함수가 실행되도록 한다고 했습니다. 

이번 소절에서는 delayed_work_timer_fn() 함수가 어떻게 호출되는지 살펴봅니다.

delayed_work_timer_fn() 함수는 언제 실행할까요? 동적 타이머 만료 시각에 도달하면 Soft IRQ 컨택스트에서 delayed_work_timer_fn() 함수를 호출합니다. 


Soft IRQ 전체 구조와 흐름은 8장(커널 타이머)에서 상세히 다룹니다. Soft IRQ 개념이 익숙하지 않은 분은 8장을 먼저 읽고 오시면 됩니다.


먼저 delayed_work_timer_fn () 함수를 보겠습니다.
1 void delayed_work_timer_fn(unsigned long __data)
2 {
3 struct delayed_work *dwork = (struct delayed_work *)__data;
4
5 /* should have been called from irqsafe timer with irq already off */
6 __queue_work(dwork->cpu, dwork->wq, &dwork->work);
7}

6번째 코드를 보면 __queue_work() 함수를 호출해서 딜레이 워크를 실행합니다. 이후 동작은 워크와 같습니다. __queue_work() 함수를 호출하면 시스템 워크큐에 딜레이 워크를 큐잉하고 워커 쓰레드를 깨웁니다.

이번 소절에서 delayed_work_timer_fn() 함수가 어떻게 호출되는지 확인하지 못했습니다. 다음 소절에서는 딜레이 워크를 실습하면서 delayed_work_timer_fn() 함수 콜스택을 점검하니 같이 실습하면서 확인하겠습니다.


#Reference 워크큐
워크큐 소개
워크큐 종류 알아보기
워크란  
워크를 워크큐에 어떻게 큐잉할까?
   워크를 큐잉할 때 호출하는 워크큐 커널 함수 분석   
워커 쓰레드란
워크큐 실습 및 디버깅
   ftrace로 워크큐 동작 확인   
   인터럽트 후반부로 워크큐 추가 실습 및 로그 분석 
   Trace32로 워크큐 자료 구조 디버깅하기 
딜레이 워크 소개  
라즈베리파이 딜레이 워크 실습 및 로그 확인  


덧글

댓글 입력 영역