본문 바로가기

Linux

2.6 kernel option - Kernel Hacking

Kernel hacking

Show timing information on printks
- printk 함수를 사용하여 출력할 경우 [00123.222356]같은 형태의 시간 정보가 함께 출력된다. 즉 실행되는 시간 정보가
자동으로 출력되는 형태

Magic SysRq key
- Magic SySRq key : [Y]로 설정할 경우 시스템이 심각한 문제가(craSheS) 있어도 통제할 수 있습니다. 예를 들면 버퍼 
캐시를 디스크로 옮기고, 시스템을 리부트하거나 상태 정보를 표시합니다. 이 기능은"<aLt>+<SysRQ>"를 누른 채 k, r, s 등
<command key>를 눌러 사용합니다. SysRQ 키가 없는 키보드는 PrtSc 키를 누르면 됩니다.

Enable unused/obsolete exported symbols
- 모르겠다; 해석이 안됨;

Kernel debugging
- 드라이버를 개발하거나 디버깅을 하거나 커널의 문제를 확인하기 위해서 필요하다.
(17)  Kernel log buffer size (16 => 64KB, 17 => 128KB)
- log buffer size 
17 => 128 KB for S/390
16 => 64 KB for x86 NUMAQ or IA-64
15 => 32 KB for SMP
14 => 16 KB for uniprocessor
13 => 8 KB
12 => 4 KB

Detect Soft Lockups
- Software Lockups의 경우는 흔히 Hang이라고 표현한다. 누구나 알다시피 특정 Application이나 서비스가 OS의
점유권을 가져간채 Job 완료 유무와 관계 없이 계속해서 OS에게 점유권을 돌려주지 않은체 가지고 있는 상황.
이런 경우에는 Panic이나 Blue Screen조차 발생하지 않으며 그저 무응답 상태로 멈춰 있게 된다.

Detect Hung Tasks
- 어떤 환경에서 커널의 태스크가 인터럽트 할 수 없는 슬립상태(D-state)에 영구적으로 빠질 수 있으며 그에 따라
시스템을 종료하지 못할 수도 있다. 이러한 상태에 빠진 태스크를 감지하기 위한 옵션.
Panic (Reboot) On Hung Tasks
-Hung Tasks가 발생하면 커널 패닉이 발생한다.

Collect scheduler statistics
- 스케쥴러의 활동이나 /proc/schedstat 등에서 제공되는 스케쥴러에 코드를 추가시키거나 자료 수집에 관련된
루틴을 삽입할 수 있다. 이같은 자료는 스케쥴러를 튜닝하거나 디버깅하는데 이용될 것이다. 

Debug slab memory allocations
- kernel에서 메모리를 할당하는 방법중 하나로 동적 메모리 할당을 위한 장치다.

RT Mutex debugging, deadlock detection
- RT Mutex의 경우 deadlock이 발생한 어플이 충돌한후 잠금을 적절히 해제 하는 문제를 해결하기 위한 장치.

Built-in scriptable tester for rt-mutexes
-rt mutex의 테스터를 위한 기능
 
Spinlock and rw-lock debugging: basic checks
- Spinlock : 다른 쓰레드가 lock을 소유 하고 있을 경우 그 lock이 반환 될때까지 계속해서 확인하며 대기
  rw-lock : read작업은 동시에 가능, write는 값을 변경 할 수 있으니 하나에만. read중에는 변경 금지.
라는 기본적인 3가지를 지키지 위해 만들어진 장치.
NMI watchdog과 함께 사용하면 spinlock 및 deadlock까지 디버깅할 수 있다.

Mutex debugging: basic checks
- mutex semantics violations를 찾고 기록하기 위한 기능.

RW-sem debugging: basic checks
- read-write semaphore semantics violations를 찾고 기록하기 위한 기능.

Lock debugging: detect incorrect freeing of live locks
- 각 lock들의 안정성을 검사하기 위한 옵션.
Lock debugging: prove locking correctness
- deadlock이 일어나기 까지 일어난 모든 locking에 대한 report를 제공한다.
Lock usage statisitics
- tracking lock에 대한 논점이다. 
자세한 것은 Documentation/lockstat.txt

Spinlock debugging: sleep-inside-spinlock checking
- 각종 루틴들이 sleep에 의한 오류를 발생시키고 있을때 spinlock으로 하여금 그 오류를 해결 하도록한다.

Locking API boot-time self-tests
- bootup 때 커널은 간단한 self-test를 수행한다. 이 test는 디버깅된 메커니즘이나 그외에서 locking bug가 발생했는지
확인하는 역할을 한다.

kobject debugging
- 몇몇 kobject들의 디버깅 메세지를 syslog에 기록

Highmem debugging
- high memory systems상의 error checking

Compile the kernel with debug info
- kernel image에 디버깅 정보가 포함된다.

--- Debug Filesystem
- debugfs는 커널 개발자들이 디버깅 파일 정보를 위해 사용하는 가상의 파일 시스템이다. 이같은 파일을 읽거나 쓸수 없다면
필요없을 것이다. 아래는 나도 전혀 모르거니와..아직은 필요없을 듯하여 다음을 기약함.

Debug VM
Debug linked list manipulation
Compile the kernel with frame pointers
Force gcc to inline functions marked 'inline'
Delay each boot message by N milliseconds
torture tests for RCU
Sample kernel code  --->
Check for stack overflows
Stack utilization instrumentation
--- Page alloc debug is incompatible with Software Suspend on i386
Write protect kernel read-only data structures
Use 4Kb for kernel stacks instead of 8Kb