런큐

Category
아이템: 런큐(4)
포스트 갯수4

[라즈베리파이] 스케줄링: 런큐란 무엇일까?

By Guillermo Austin Kim | 2019년 2월 3일 | 
CPU를 점유하면서 실행하고 있는 프로세스는 딱 한 개인데 다수의 프로세스들은 실행 대기 상태에 있습니다. 커널은 스케줄링으로 여러 개의 실행 대기 프로세스 중에서 하나 프로세스를 선택합니다. 리눅스 시스템에서는 여러 개 프로세스들이 동시 다발적으로 실행 요청을 합니다. 따라서 여러 개의 실행 대기 상태에 있는 프로세스를 식별하고 관리할 수 있는 자료 구조가 필요합니다. 실행 대기 상태 프로세스와 CPU에서 실행 중인 프로세스를 관리하는 자료구조를 런큐라고 말합니다. 런큐가 여러 개 프로세스들로부터 실행 요청을 받아 관리를 해주니 스케줄러가 편하게 스케줄링을 할 수 있는 것입니다. 런큐는 per-cpu 타입 변수입니다. 즉, CPU 갯수만큼 주소 공간이 있다는 의미입니다.라즈베리파이는 CPU가 4개

[Kernel][Debug] 런큐에서 CFS 스케쥴러에 큐잉된 프로세스 찾기

By Guillermo Austin Kim | 2018년 4월 26일 | 
런큐에 CFS 스케쥴러로 큐잉된 상태로 기다리는 프로세스 목록은 어디서 찾을 수 있을까요?per-cpu 타입의 runqueues.cfs_tasks 멤버를 찾으면 됩니다. 다음은 CPU4 runqueue의 예시입니다. (struct rq *) [-] (struct rq*)(((void*)&runqueues)+__per_cpu_offset[4]) = 0xFFFFFFC73E0F2900 -> ( (raw_spinlock_t) [D:0xFFFFFFC73E0F2900] lock = ((arch_spinlock_t) [D:0xFFFFFFC73E0F2900] raw_lock = ((u16) [D:0xFFFF (unsigned int) [D:0xFFFFFFC73E0F2918] nr_running

Runqueue(런큐) Timestamp(실행 시간) 확인

By Guillermo Austin Kim | 2017년 12월 24일 | 
보통 커널 크래시나 와치독 리셋으로 시스템이 다운된 경우 세밀하게 디버깅해야 할 때가 있어요.그런데 가끔 각 프로세스가 마지막에 어떤 순서로 실행이 됐는지 확인하고 싶을 경우가 가끔 있거든요.이 순서가 가끔 정말 중요한 순간이 가끔 있어요. 아래는 런큐에서 돌고 있는 프로세스 목록이거든요. 그럼 각각 프로세스가 어떤 순서로 실행이 되었는지 알 수 있을까요?crash64> runq -m CPU 0: [0 07:36:22.901] PID: 585 TASK: ffffffc071eb8b80 COMMAND: "android.hardwar" CPU 1: [0 07:36:22.901] PID: 726 TASK: ffffffc0f6e3f300 COMMAND: "DispSync" CPU 2: [0

[Linux][Kernel] Process 프로세스 상태 (1) - 런큐(Runqueue) 디버깅

By Guillermo Austin Kim | 2017년 12월 14일 | 
이번 시간에는 각 프로세스 상태에 대해 조금 더 짚어보려고 해요. 리눅스 커널 책을 보면 프로세스 상태에 대한 State Machine을 많이 볼 수 있는데요.Running/Ready 상태 이런 거죠. 실제 리눅스 커널에서는 어떤 API로 구현되는 지 살펴보려고 해요. 무엇보다 실제 데이터 구조체를 살펴보려고 해요. 1> Running State Process 프로세스가 실행되기 위해서는 뭘 해야 할까요? 런큐에 프로세스를 큐잉해야 해요. Runqueue에서 돌고 있는 프로세스를 Running 상태 프로세스라고 볼 수 있어요. 그럼 Crash Tool로 이 디버깅 정보를 어떻게 확인 가능하냐면요. 아래 커맨트로 볼 수 있어요.crash> runqCPU 0 RUNQUEUE: c4b4cb80