set_filter_function

2024. 1. 23. 22:56리눅스/쉬운 리눅스

728x90
반응형

에러 문구

echo: write error: Invalid argumen
/sys/kernel/debug/tracing/set_ftrace_filter: no such device

 

이건 sudo cat  /sys/kernel/debug/tracing/available_filter_functions 가능한 함수와 일치해야지 오류가 생기지 않는다

난 라즈베리파이 OS 가상머신으로 x86_64 아키텍처로 하고있어 아무래도 강의(책)과 함수명이 달라 오류가 난것 같다.

# 이용 가능한 함수 확인
cat /sys/kernel/debug/tracing/available_filter_functions | more

 

함수 확인 후 존재 하는 함수만 입력해야지 오류가 안뜬다.

# set_ftrace_filter에 적용
/sys/kernel/debug/tracing/set_ftrace_filter

set_ftrace.sh

#!/bin/bash

echo 0 > /sys/kernel/debug/tracing/tracing_on
sleep 1
echo "tracing_off"

echo 0 > /sys/kernel/debug/tracing/events/enable
sleep 1
echo "events disabled"

echo function > /sys/kernel/debug/tracing/current_tracer
sleep 1
echo "set_ftrace enabled"

#echo rpi_get_interrupt_info > /sys/kernel/debug/tracing/set_ftrace_filter
#sleep 1
#echo "set_ftrace_filter enabled"

echo "cpu_startup_entry" | sudo tee /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1

echo "schedule ttwu_do_wakeup.constprop.0" >> /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1

echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
echo "sched_switch enabled"

echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_exit/enable
echo "event enabled"

echo 1 > /sys/kernel/debug/tracing/options/func_stack_trace
echo "functionstack trace enabled"

echo 1 > /sys/kernel/debug/tracing/options/sym-offset
echo "sym-offset enabled"

echo 1 > /sys/kernel/debug/tracing/tracing_on
echo "tracing_on"

get_ftrace.sh

#!/bin/bash

echo 0 > /sys/kernel/debug/tracing/tracing_on
echo "frace off"
sleep 3
cp /sys/kernel/debug/tracing/trace .
mv trace ./ftraceLogs/$1.c

 

sh 실행시 파일명 입력하면 "$1"에 이름이 입력됨

./get_ftracd.sh [파일명]

최종 결과

 

  1. irqs-off/BH-disabled:
    • 현재 CPU에서 IRQs(인터럽트)가 비활성화되어 있거나 Bottom Half(BH)가 비활성화된 상태를 나타냅니다. 이는 일부 코드가 임계 영역에 들어가 있거나 인터럽트가 비활성화되어 있어 중요한 상태일 수 있습니다.
  2. need-resched:
    • 현재 태스크가 스케줄링이 필요한 상태에 있다는 것을 나타냅니다. 스케줄러에 의해 다음으로 실행될 태스크를 선택하는 필요성을 나타냅니다.
  3. hardirq/softirq/preempt-depth:
    • 현재 하드웨어 인터럽트(hardirq), 소프트웨어 인터럽트(softirq), 또는 프리엠션(preempt)이 얼마나 깊게 중첩되어 있는지를 나타냅니다. 중첩이 많을수록 커널의 응답성에 영향을 미칠 수 있습니다.
  4. migrate-disable delay:
    • CPU의 마이그레이션(migrate)이 비활성화되어 있는 상태를 나타냅니다. CPU 마이그레이션은 태스크가 다른 CPU로 옮겨질 때 발생합니다.

 


https://2jun0.tistory.com/30

 

line 19: echo: write error: Invalid argument

objdump -d vmlinux | grep rpi_get_interrupt_info"디버깅을 통해 배우는 리눅스 커널의 구조와 원리"를 보며 실습하던 중, 책에서 하라는 대로 했지만 알수없는 오류가 생겼다. 바로 오늘의 제목인 line 19: echo

2jun0.tistory.com

 

반응형

'리눅스 > 쉬운 리눅스' 카테고리의 다른 글

바이너리 유틸리티  (1) 2024.01.21
컴파일  (0) 2024.01.21