2009년 7월 31일 금요일

Kernel configuration in FreeBSD 7.2

Kernel은 모든 시스템에서 가장 중요한 구성 요소이다.

H/W와 S/W의 인터페이스로서 성능 튜닝시 가장 중요한 부분이다.

FreeBSD 7.2에서 커널을 투닝하는 방법에 대해서 정리를 해볼려고 한다.

참고로 사용한 컴퓨터의 사양은 Pentium4 2.4GHz, 1G memory이다.


먼저 지금 커널에 대해서 알기위해서 sysctl MIB정보를 수집했다.

sanjose# sysctl -A > sysctl.out <-- 수집하는 방법

sysctl MIB는 다음과 같은 하부 구조로 이루어져 있다.

kerm : 핵심 커널 기능

vm : 가상 메모리

vfs : 파일 시스템

net : 네트워크킹

그외...

sanjose# less sysctl.out

kern.ostype: FreeBSD

kern.osrelease: 7.2-RELEASE

kern.osrevision: 199506

kern.version: FreeBSD 7.2-RELEASE #0: Fri May 1 08:49:13 UTC 2009

root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC

...

kern.bootfile: /boot/kernel/kernel <- 이전에는 /kernel이라는 곳에서 존재함.

...

sanjose# sysctl kern <-커널 부분만...

kern.ostype: FreeBSD

kern.osrelease: 7.2-RELEASE

kern.osrevision: 199506

kern.version: FreeBSD 7.2-RELEASE #0: Fri May 1 08:49:13 UTC 2009

root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC


kern.maxvnodes: 69676

kern.maxproc: 6164

kern.maxfiles: 12328

...

sanjose# sysctl kern.securelevel <- 만약 정확한 MIB값을 알고 있다면 바로 사용을 하면 된다.

kern.securelevel: -1

sanjose# sysctl vfs.usermount

vfs.usermount: 0

sanjose# sysctl vfs.usermount=1

vfs.usermount: 0 -> 1

sanjose# vi /etc/sysctl.conf


# $FreeBSD: src/etc/sysctl.conf,v 1.8.32.1 2009/04/15 03:14:26 kensmith Exp $

#

# This file is read when going to multi-user and its contents piped thru

# ``sysctl'' to adjust kernel values. ``man 5 sysctl.conf'' for details.

#


# Uncomment this to prevent users from seeing information about processes that

# are being run under another UID.

#security.bsd.see_other_uids=0

vfs.usermount=1

~

~

/etc/sysctl.conf: 11 lines, 394 characters.


sanjose# cat /boot/loader.conf <- 최고 우선순위를 가짐.

sanjose# cat /boot/defaults/loader.conf <-- default 기본

sanjose# vi /boot/loader.conf <- 리눅스 부분 수정.


# Linux procfs,sysfs support

linprocfs_load="YES"

linsysfs_load="YES"

/boot/loader.conf: 6 lines, 106 characters.


sanjose# kldstat <- kernel이 올라온 상태 확인

Id Refs Address Size Name

1 7 0xc0400000 9fab28 kernel

2 1 0xc0dfb000 6a45c acpi.ko

3 1 0xc4470000 22000 linux.ko

sanjose# kldstat -v <- 세부적으로 보기

Id Refs Address Size Name

1 7 0xc0400000 9fab28 kernel

Contains modules:

Id Name

335 shmat

334 shmctl

333 shmdt

...

2 1 0xc0dfb000 6a45c acpi.ko

Contains modules:

Id Name

19 cpu/acpi_throttle

18 acpi/acpi_smbat

17 cpu/acpi_perf

3 1 0xc4470000 22000 linux.ko

Contains modules:

Id Name

443 linuxaout

442 linuxelf

sanjose# kldload /boot/kernel/warp_saver.ko

sanjose# kldstat

Id Refs Address Size Name

1 9 0xc0400000 9fab28 kernel

2 1 0xc0dfb000 6a45c acpi.ko

3 1 0xc4470000 22000 linux.ko

4 1 0xc76be000 2000 warp_saver.ko

지금까지 커널의 상태 및 부분적인 튜닝을 하였다. 하지만 완벽한 튜닝, 자신만의 커널을 가지기 위해서는 아래와 같은 작업을 통해서 자신만의 커널을 만들어야 한다.

sanjose# cd /sys <-- kernel source가 시스템에 있는지 확인.

sanjose# ls

Makefile cddl dev i4b net netipsec nfs4client pccard sun4v

amd64 compat fs ia64 net80211 netipx nfsclient pci sys

arm conf gdb isa netatalk netnatm nfsserver powerpc tools

boot contrib geom kern netgraph netncp nlm rpc ufs

bsm crypto gnu libkern netinet netsmb opencrypto security vm

cam ddb i386 modules netinet6 nfs pc98 sparc64 xdr


sanjose# cp GENERIC FILESERVERr <-기존 커널 설정 파일을 이용하여 사용함.

sanjose# vi FIRESERVER

sanjose# config ./FILESERVER <-- 수정한 파일의 에러 체크

Kernel build directory is ../compile/./FILESERVER

Don't forget to do ``make cleandepend && make depend''

sanjose# cd ../compile/FILESERVER/

sanjose# make depend && make all install


이렇게 하고 리부팅을 하면 된다.


제발 한번만에 되기를....


댓글 없음: