■ 다음은 Linux Kernel 2.6.35.10 Configuration의 설정 항목에 대한 설명이다.


(1) RCU Rubsystem

: RCU는 updater들과 cuncurent하게 reader들을 동작하도록 하여 시
스템의 scalability를 향상시키는 lock free
  메커니즘이다.

- Update들과 동시에 reader들도 동작할 수 있도록 하기 위한 rwlock이 있긴 하지만 
rwlock은 update가 없을 때에만
  reader들의 수행을 허락한다. 
반면 RCU는 single update와 multiple reader들 사이의 concurrency를 지원한다.
 
즉 update와 reader가 동시에 수행할 수 있도록 한다는 것이다.

- classic rcu
  > non-realtime에서 최고의 읽기 성능을 위해 설계 되었음

- tree rcu
  > 수백 수천의 cpu를 가진 SMP 시스템을 위해 설계 되었음


○ Kernel .config support
  - 현재 커널이 빌드될 때 사용된 설정을 /proc/config.gz에서 읽을 수 있도록 해줌.

○ Kernel log buffer size (16 => 64KB, 17 => 128KB) 
  - Kernel의 로그 메시지들을 저장해야 하므로 Log Buffer라는 circular buffer가 정의됨
  - kernel은 여기서 설정된 크기보다 작은 kernel 로그 메시지만 저장할 수 있다. 
  - 사용자가 kernel 로그 메시지를 읽을 때, 큐에서 제거된다. 
     > 원형 큐로 만든 이유는 Buffer의 크기를 초과해서 로그가 기록될 때 가장 오래전 로그 메시지 영역에 중복 기록하기
        위해서이다.


(2) Control Group support
  : 그룹으로 묶인 프로세스들의 집합을 지원하기 위한것으로 process control subsystem을 사용할 것인지를 설정.
  - Cpusets, CFS, memory controls, device isolation

○ Namespace cgroup subsystem
  - namespace들의 집합의 이름을 계층적으로 제공하는 subsystem을 사용 할 것인지를 설정
  - 예를 들면 virtual servers와 checkpoint/restart jobs

○ Cpuset support
  - CPUSET을 생성하고 관리하는 subsystem옵션
  - cpu 집합 안에 dynamically partitioning a system, memory node, 할당된 tasks
  - 주로 큰 SMP나 NUMA 시스템에 유용함
  - 의존 : SMP && CGROUPS

○ Simple CPU accounting cgroup subsystem
  - cgoup안에 task들로써 cpu에 모니터링을 위한 간단한 자원 컨트롤러를 제공

○ Resource counters
  - cgroup에 자원을 controller가 독립적으로 카운팅이 가능하도록 해줌

○ Memory Resource Controller for Control Groups
  - anonymous memory와 page cache를 관리하는 메모리 자원 컨트롤러를 제공
  - fork/exit overhead가 약간 증가 할 수 있음
  - 선택 : MM_OWNER가 y로 설정되게 됨.

○ Group CPU scheduler 
  - 같은 task group에서는 cpu scheduler가 task groups을 인식하고 cpu bandwidth allocation을 제어하도록 한다.
 
- 프로세스들을 하나의 group으로 만들기 위해서 사용한다.
  - 의존 : EXPERIMENTAL

○ Enable deprecated sysfs features to old userspace tools
  - sysfs의 layout을 구 버전으로 바꿔주는 옵션

  -*- Kernel->user space relay support (formerly relayfs)
  - 커널 영역의 많은 양의 data를 user 영역으로 전달을 지원하기 위해 사용
  - 아래의 설정에 의해 자동으로 설정 됨
    > BLK_DEV_IO_TRACE && BLOCK && SYSFS 이거나 아니면
       KVM_TRACE && VIRTUALIZATION && KVM && MARKERS && SYSFS

  -*- Namespaces support
  
UTS namespace 
   IPC namespace 
   User namespace (EXPERIMENTAL) 
   PID Namespaces (EXPERIMENTAL)
  
Network namespace
  
- 다른 오브젝트인 task작업에서 같은 id를 사용하기 위해 제공
  
- 다른 namespace에서 사용될때 같은 IPC id로 다른오브젝트로 보내거나 같은 user id또는 pid로 다른 task로 보낼수있음
   - 의존 : EMBEDDED

○ Initial RAM filesystem and RAM disk (initramfs/initrd) support  
  - initial ram filesystem과 ramdisk의 지원을 위해 사용
 
- boot procedure전에 boot loader에 의해 로딩 되어진 ramfs을 initial ram file system이라고 함.
  - BLK_DEV_RAM 가 y로 설정되면 inital ram disk를 지원한다. 
  - 의존 : BROKEN or !FRV

Initramfs source file(s) 
   - inital ram filesystem의 이미지를 만듬

○ Optimize for size
  - gcc 옵션을 -O2대신에 -Os를 사용함


(3) Configure standard kernel features (for small systems)
  - base kernel option을 포함하고 setting을 설정하지 않거나 조정하지 않음
  - non-standard kernel 을 특정한 환경에서 사용하기 위한 것
  - 무엇을 할 것인지 확실히 알 경우 사용

○ Disable heap randomization
  - 무작위의 heap의 위치는 harder를 이용해 heap을 만들지만 libc5를 기반으로 만들어진 binary들은 사용 할 수  없다.
  - 이 옵션은 bootup에 기본을 heap randomization disable로 바꾼다.
  - 오래된 코드를 사용 할 경우 사용해야 할 것 같음

○ OProfile system profiling (EXPERIMENTAL)
  - OProfile은 kernel, kenel modules, libraries, application들을 포함한 시스템 전부를 분석할수 있는 profiliing system이다.
  - 의존 : PROFILING && HAVE_OPROFILE


※ 출처 : http://blog.naver.com/minareu?Redirect=Log&logNo=100118548227
※ 참고 : http://blog.naver.com/sdonghwi?Redirect=Log&logNo=90003951444

'L inux > Kernel' 카테고리의 다른 글

menuconfig - 리눅스 커널 설정 (4)  (0) 2011.12.15
menuconfig - 리눅스 커널 설정 (3)  (0) 2011.12.15
menuconfig - 리눅스 커널 설정 (1)  (0) 2011.12.15
openWRT  (1) 2011.11.02
커널 이미지 생성 과정 Log 분석  (0) 2011.10.06
by 민트앤라떼 2011. 12. 15. 13:06