[리눅스커널] 워크큐: create_worker() 함수에서 호출한 워크큐 커널 함수 분석하기
By Guillermo Austin Kim | 2019년 9월 26일 |
이번 시간에는 create_worker() 함수에서 호출한 워커 스레드 세부 제어 함수를 살펴보겠습니다. worker_attach_to_pool() 함수 분석하기 worker_attach_pool() 함수는 워커를 워커풀에 연결하는 역할을 수행합니다. [https://elixir.bootlin.com/linux/v4.19.30/source/kernel/workqueue.c] 01 static void worker_attach_to_pool(struct worker *worker,02 struct worker_pool *pool)03 {04mutex_lock(&pool->attach_mutex);0506set_cpus_allowed_ptr(worker->task, pool-
[리눅스커널] 워크큐: 워커 스레드는 누가 언제 만들까
By Guillermo Austin Kim | 2019년 9월 25일 |
이번 챕터 앞 부분에서 워크큐에 대해 다음과 같이 소개했습니다. 워크를 처리하는 워커 스레드를 미리 생성해 놓고 워크 실행 요청이 오면 해당 워커 스레드가 이를 처리한다. 이번 시간에는 워커 스레드의 핸들인 워커를 언제 생성하는지 알아보겠습니다. 그렇다면 워커는 어느 함수를 실행할 때 생성할까요? 워커는 create_worker() 함수를 호출할 때 생성합니다. 워커를 생성하는 create_worker() 함수를 분석하기 전 이 함수를 호출하는 경로를 알아보겠습니다. maybe_create_worker() get_unbound_pool() workqueue_prepare_cpu() 커널 내부에서 워크를 사용해 후반부 처리를 하므로 커널은 워커 스레드를 미리
zoomtrend