Guillermo Austin Kim
Posts
998 posts[리눅스커널] 특정 CPU를 Isolation 시키고 싶은 경우
프로젝트를 진행하다 보면 특정 CPU를 Isolation 시키고 싶을 때가 있습니다.이 때 다음 패치(CPU2와 CPU3를 Isolation)를 적용하면 됩니다. * 커널 4.19 버전diff --git a/kernel/cpu.c b/kernel/cpu.cindex d9f855c..816bf4f 100644--- a/kernel/cpu.c+++ b/kernel/cpu.c@@ -1126,6 +1126,10 @@ static int do_cpu_up(unsigned int cpu, enum cpuhp_state target) { int err = 0; + if(cpu == 2 | cpu ==3) {+ return -EINVAL;+ }+
[리눅스커널] GCC: notrace 옵션 - no_instrument_function
walk_stackframe() 함수의 구현부를 보면 notrace 키워드로 선언됐음을 알 수 있습니다. notrace walk_stackframe(struct stackframe *frame, int (*fn)(struct stackframe *, void *), void *data){ while (1) { int ret; if (fn(frame, data)) break; ret = unwind_frame(frame); if (ret < 0) break; }}EXPORT_SYMBOL(walk_stackframe); 이 함수를 전처리 코드에서 확인하면 구현부는 다음과 같습니다. void __attribute__((no_instrument_function)) walk_s
[리눅스커널] 인터럽트: ftrace와 커널 로그로 인터럽트 컨텍스트 확인해보기
이번 절에서는 ftrace 로그를 분석하면서 커널이 인터럽트를 어떻게 처리하는지 알아봅시다. 리눅스 커널에서 커널 동작을 가장 정밀하게 담고 있는 로그는 뭘까요? 아마 많은 리눅스 전문가들은 ftrace라고 대답할 겁니다. ftrace는 리눅스 커널에서 제공하는 가장 강력한 디버그 로그입니다. 리눅스 커널의 공식 트레이서이기도 합니다. 여러분도 ftrace 로그를 자주 활용해서 리눅스 커널을 익히기를 바랍니다. ftrace로 인터럽트를 처리하는 인터럽트 핸들러 함수에 필터를 걸고 콜 스택 로그를 받아 보겠습니다. 인터럽트 동작을 확인하기 위한 ftrace 설정 ftrace로 인터럽트의 동작 방식을 분석하기 전에 ftrace를 설정하는 방법을 소개합니다. 먼저 다음 명령어를 입력해 봅시다. #!/
[리눅스커널] 프로세스: thread_info 구조체 초기화 코드 분석
이전 절에서는 thread_info 구조체가 프로세스의 세부 동작 방식을 관리하는 내용을 살펴봤습니다. 이번에는 프로세스가 생성될 때 thread_info 구조체를 초기화하는 과정을 살펴보겠습니다. 이번 절에서는 다음 내용을 다룹니다. 프로세스가 생성될 때 스택 공간을 할당받는 동작 태스크 디스크립터인 task_struct 구조체와의 관계 dup_task_struct() 함수 분석 이전 절에서 프로세스를 처음 생성할 때 copy_process() 함수를 호출한다는 사실을 확인했습니다. copy_process() 함수에서는 dup_task_struct() 함수를 호출해서 태스크 디스크립터와 프로세스가 실행할 스택 공간을 새로 만듭니다. dup_task_struct() 함수에서 호출하는 핵심 함수
[리눅스커널] thread_info 구조체의 preempt_count - 인터럽트 컨텍스트 실행 저장
리눅스 시스템에서 인터럽트는 언제든지 발생할 수 있습니다. 인터럽트가 발생하면 프로세스 실행을 멈추고 인터럽트에 해당하는 인터럽트 핸들러를 실행합니다. 커널에서는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하는 동작을 인터럽트 컨텍스트라고 부릅니다. ---참고로 인터럽트는 외부 입출력 장치에 어떤 변화가 있을 때 발생하는 전기 신호 혹은 이를 CPU에게 알려서 처리하는 과정을 뜻합니다. 리눅스 커널은 인터럽트를 처리할 수 있는 함수를 지원하며, 자세한 내용은 5장의 5.1절에서 설명합니다.--- thread_info 구조체의 preempt_count 필드에 인터럽트가 실행 중인 상태를 나타내는 비트를 설정합니다. 이 비트를 읽어 인터럽트 컨텍스트 유무를 식별합니다. 리눅스 커널에서는 현재 실행 중



