# DroidForge
Alat & Dokumentasi ADB

Panduan Debugging Kernel via ADB Shell: Memanfaatkan Dmesg dan Ftrace

T Tim Riset DroidForge
Diperbarui:
8 min read
Daftar Isi Artikel

Arsitektur Logging Kernel Linux pada Android

Dalam investigasi anomali sistem operasi Android — seperti insiden reboot mendadak (kernel panic), freezing berkala (kernel watchdog timeout), atau konsumsi daya latar belakang yang abnormal — log aplikasi standar (logcat) sering kali tidak memberikan petunjuk yang memadai. Permasalahan perangkat keras dan subsistem driver berakar di dalam ring buffer kernel Linux.

Arsitektur logging Android memisahkan penanganan pesan kernel dari pesan ruang pengguna. Kernel Linux mencatat pesan melalui fungsi internal printk() ke dalam buffer sirkular di memori. Pesan-pesan ini dikelola oleh daemon sistem logd dan diekspos melalui node antarmuka /dev/kmsg serta utilitas dmesg.

Ekstraksi dan Pemfilteran Kernel Log Menggunakan Dmesg

Utilitas dmesg pada Android Debug Bridge (ADB) menyediakan sarana tercepat untuk memeriksa perilaku driver dan inisialisasi modul kernel saat perangkat beroperasi.

Tingkat Log (Printk Level) Nilai Numerik Kategori Event Kernel Contoh Indikator Masalah pada Android
KERN_EMERG 0 Sistem tidak stabil / Panic Kernel crash, hardware fail stop, null pointer dereference di interrupt handler.
KERN_ALERT 1 Tindakan darurat segera Kegagalan sistem penyimpanan flash, kerusakan partisi filesystem ekstensif.
KERN_CRIT 2 Kondisi kritis perangkat keras Over-temperature shutdown, regulator voltase daya gagal beroperasi.
KERN_ERR 3 Kondisi galat driver Modul kamera gagal probe, timeout bus I2C/SPI sensor sentuh.
KERN_WARNING 4 Peringatan non-fatal Memory pressure stall, frame dropped pada Display Processing Unit (DPU).
# Menampilkan pesan kernel secara real-time (streaming follow)
adb shell dmesg -w

# Menampilkan waktu pencatatan dalam format jam manusia yang dapat dibaca
adb shell dmesg -T

# Memfilter kejadian kernel error, warning, dan out-of-memory
adb shell "dmesg | grep -iE 'error|panic|fail|oom|reboot'"

Catatan Kinerja: Dampak Overhead Tracing terhadap Real-time Latency

Mengaktifkan tracer fungsi mendalam (seperti function_graph) pada seluruh fungsi kernel dapat menyebabkan penurunan frame rate dan distorsi data profiling. Gunakan filter fungsi (set_ftrace_filter) untuk mengisolasi subsistem yang sedang diteliti.

Baca Juga:
Analisis Protokol ADB Over TCP/IP dan Otomatisasi Diagnostik Logcat
Alat & Dokumentasi ADB 4 mnt baca

Subsistem Ftrace: Instrumentasi Real-Time Function Tracing

Ketika dmesg hanya memberikan ringkasan status, Ftrace menyediakan mikroskop waktu-nyata terhadap eksekusi fungsi di dalam kernel Linux. Ftrace terintegrasi secara native di dalam kernel dan diakses melalui virtual filesystem di /sys/kernel/tracing (atau /sys/kernel/debug/tracing pada kernel lama).

Dengan Ftrace, peneliti dapat mengukur berapa mikrodetik yang dihabiskan prosesor untuk mengeksekusi fungsi driver tertentu, menganalisis perpindahan konteks antar core CPU (context switch), dan mendeteksi anomali penundaan interupsi (irq latency).

# 1. Pindah ke direktori subsistem tracing pada adb shell root
adb shell
cd /sys/kernel/tracing

# 2. Nonaktifkan tracing sementara untuk konfigurasi
echo 0 > tracing_on

# 3. Pilih plugin tracer 'function_graph' untuk melihat durasi eksekusi hierarkis
echo function_graph > current_tracer

# 4. Batasi tracing hanya pada fungsi subsistem cpufreq
echo "*cpufreq*" > set_ftrace_filter

# 5. Kosongkan buffer trace sebelumnya dan mulai tracing
echo > trace
echo 1 > tracing_on

# 6. Jalankan beban kerja pada perangkat, lalu matikan tracing dan dump hasil
sleep 2
echo 0 > tracing_on
cat trace | head -n 40

Analisis Kernel Oops, Call Trace, dan PC Register

Ketika sebuah driver melakukan dereferensi pointer memori yang tidak valid, kernel Linux memancarkan laporan Kernel Oops ke buffer dmesg sebelum memicu reboot otomatis. Menganalisis laporan ini memerlukan pemahaman register arsitektur ARM64:

  • PC (Program Counter): Menunjukkan alamat instruksi mesin persis saat crash terjadi (misalnya pc : [] ufs_qcom_probe+0x48/0x120).
  • LR (Link Register): Menunjukkan alamat fungsi pemanggil yang harus kembali dieksekusi setelah subrutin selesai.
  • Call Trace: Daftar tumpukan frame fungsi (backtrace) yang mengarah pada instruksi yang memicu crash.

Dengan mencocokkan nilai offset simbol tersebut terhadap biner vmlinux menggunakan perkakas aarch64-linux-android-addr2line, periset dapat mengidentifikasi baris kode sumber kernel (file .c dan nomor baris) yang menjadi akar permasalahan kegagalan sistem.

Baca Juga:
Optimalisasi IO Scheduler pada Storage UFS 3.1/4.0 untuk Mengurangi Latensi Sistem
Tweaking & Kinerja 4 mnt baca

Pelacakan Penundaan Interupsi dengan Tracer Irqsoff dan Preemptoff

Selain pelacakan fungsi bersarang, Ftrace menyediakan plugin khusus untuk mengidentifikasi penyebab latensi audio stuttering dan frame-drop pada antarmuka sentuh, yaitu tracer irqsoff dan preemptoff. Plugin ini mengukur durasi terlama di mana interupsi dinonaktifkan oleh kode driver yang memegang spinlock terlalu lama. Dengan memeriksa berkas trace setelah merekam skenario gaming atau scroll cepat, pengembang kernel dapat menemukan titik-titik kritis di mana CPU terhalang merespons interupsi perangkat keras sentuh (touchscreen IRQ).

Analisis Event Scheduler dan Latensi Wakeup via Ftrace

Ftrace juga memiliki infrastruktur tracepoints statis berbiaya overhead sangat rendah. Salah satu modul paling berharga untuk audit performa adalah event scheduler:

# Mengaktifkan tracepoint perpindahan thread (sched_switch) dan wakeup thread (sched_wakeup)
echo 1 > events/sched/sched_switch/enable
echo 1 > events/sched/sched_wakeup/enable
echo 1 > tracing_on

# Memeriksa hasil log perpindahan thread scheduler
cat trace_pipe | grep "sched_switch"

Log sched_switch akan menampilkan nama proses pemanggil, PID, prioritas penjadwalan, core CPU fisik tempat proses dieksekusi, serta alasan pergantian konteks (preemption atau sleeping).

Integrasi dengan Perfetto Tracing Tool pada Android Modern

Pada platform Android modern (Android 10+), Ftrace menjadi tulang punggung pengumpulan data bagi Perfetto. Perfetto mengumpulkan data ftrace tingkat kernel, trace atrace tingkat framework, dan heapprofd tingkat pengguna ke dalam format biner terpadu berbasis Protocol Buffers (protobuf).

# Menjalankan penelusuran terintegrasi Perfetto via command line ADB selama 10 detik
adb shell perfetto \
  -c - --txt \
  -o /data/misc/perfetto-traces/trace.perfetto-trace <

Kesimpulan Panduan Debugging Kernel

Kombinasi antara observasi makro menggunakan dmesg dan instrumentasi mikro berbasis ftrace/perfetto memberikan visibilitas mutlak terhadap kinerja kernel Linux Android. Menguasai alat-alat diagnostik ini merupakan keahlian inti yang membedakan pendekatan spekulatif dari metodologi rekayasa sistem yang akurat.

Topik Terkait: #Kernel Linux #ADB Shell #Ftrace

Artikel Terkait

Artikel lain dalam kategori Alat & Dokumentasi ADB

Lihat Semua