[리눅스커널][ftrace] 커널 타이머: jiffies와 Soft IRQ 타이머 서비스 처리 횟수 확인
By Guillermo Austin Kim | 2020년 4월 21일 |
Overview ftrace는 리눅스 커널의 마법과 같은 도구입니다. 그래픽 효과가 없는 텍스트 포멧의 리눅스의 단점을 대체하기 충분하다고 봅니다. 이번에는 동적 타이머와 Soft IRQ 타이머 서비스를 동시에 ftrace 로그를 통해 분석해 보겠습니다. 이 디버깅은 라즈베리 파이에서 수행했다는 사실을 참고합시다. 결론 먼저, 요점부터 말하겠습니다. 이 ftrace 메시지를 분석한 후 알게 될 내용은 다음과 같습니다. ■ 1초 동안에 지피스는 100번 업데이트된다.(라즈베리 파이 기준) ■ 1초에 Soft IRQ 타이머 서비스를 요청하는 횟수는 13번(100번 미만)이다. ■ 1초에 Soft IRQ 동적 타이머를 실행하는 횟수는 13번이다. 먼저 커널
[리눅스커널][인터럽트] 인터럽트 디스크립터: 인터럽트 발생 횟수 확인하기
By Guillermo Austin Kim | 2019년 4월 12일 |
5.5.2 인터럽트 발생 횟수는 어떻게 저장할까? 대부분 디바이스 드라이버는 인터럽트 핸들러로 하드웨어 디바이스와 통신합니다. 예를 들면 터치 디바이스에서 사용자가 터치를 입력하면 터치 디바이스에서 올려주는 인터럽트로 터치 입력이 발생했다고 알려줍니다. 디바이스 드라이버에서 인터럽트 핸들러를 등록한 후 해당 디바이스가 제대로 인터럽트를 발생시키는지 어떻게 알 수 있을까요? 이럴 때는 인터럽트 발생 횟수를 점검하면 됩니다. 이번에는 인터럽트 발생 횟수를 인터럽트 디스크립터가 어떤 방식으로 관리하는지 살펴보겠습니다. 인터럽트 발생 횟수는 인터럽트 디스크립터 내 struct irq_desc 구조체 kstat_irqs 필드에 저장합니다. 이 변수는 per-cpu 타입입니다 [https://elixir.b
[리눅스커널][디버깅] T32(Trace32)로 vmlinux 로딩해 시스템 구경하기
By Guillermo Austin Kim | 2019년 3월 13일 |
T32 시작 명령어 T32 시뮬레이터를 열고 다음 명령어를 입력합시다.sys.cpu cortexa7sys.up 대부분 ARM32 아키텍처는 위 명령어로 T32가 초기화됩니다. T32 명령어로 시스템 점검하기 먼저 커널 섹션 정보를 보겠습니다.y.l.sec__________address________|path\section___________________________|acc|init|physical P:00000000--0000001F|\\vmlinux\.vectors |R-X|L- | P:00001000--000012BF|\\vmlinux\.stubs |R-X|L- | P:C0008000--C
[리눅스커널] 프로세스: 커널 스레드는 어떻게 생성할까?
By Guillermo Austin Kim | 2020년 2월 29일 |
이어서 커널 스레드를 생성하는 과정에서 호출되는 함수를 소개하고 세부 코드를 분석하겠습니다. 커널 스레드가 생성되는 과정은 크게 2단계로 나눌 수 있습니다. 1) 1단계: kthreadd 프로세스에게 커널 스레드 생성을 요청 kthread_create() kthread_create_on_node() 2) 2단계: kthreadd 프로세스가 커널 스레드를 생성 kthreadd() create_kthread() 각 단계별로 실행되는 함수를 살펴보겠습니다. 1단계: kthreadd 프로세스에게 커널 스레드 생성 요청 유저 프로세스를 생성하려면 fork() 함수를 호출해야 하듯이, 커널 스레드를 생성하려면 kthread_create() 커널 함수를 호출해야 합니다. 먼저 kthreadd 프