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


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


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


2009년 7월 30일 목요일

Virtual I/O Xsigo

요즘의 IT의 화두는 Cloud Computing이다.
다양한 구성요소가 필요한 Cloud Computing에서 가장 중요한 것은 바로 가상화 기술이 아닐까?

서버 가상화로 대표되는 가상화 세상에서 Data의 통로 즉 I/O에 대한 가상화를 Appliance로 지원하는 최초의 솔루션인 Xsigo에 대한 내용에 대한 비디오 자료입니다.
한번 보세요.

Makeup & Restore in FreeBSD

리눅스 클러스터를 하면서 백업과 복구에 대해서 그렇게 신경을 쓰지 않았지만 이제 FreeBSD 서버를 구축을 하면서 신경을 쓰기로 했다.
오늘한 일들은 기본적인 시스템 백업, Revision Control이다.
1. Backup
1) Tar : tape archiver 의 약자, 파일,디렉토리 단위로 백업 및 복구
=> 대부분의 O/S에서 사용 가능, 이기종간 데이터 교류 가능.
-option
-c : 새로운 파일을 압축할때 사용
-v : 상세 정보 표시
-t : 백업 파일 내의 모든 파일을 열기
-x : 백업 파일로 부터 파일을 추출
-y : bzip을 이용한 압축시 ( 효율 최고, CPU 부하)
-z : gunzip를 이용한 압축시 (효율 중간)
-Z : compress를 이용항 압축시 (효율 최저)
-f : backup할 위치 선정
ex) tar -cvf home.tgz /home
tar -xvf home.tgz /mnt/
2)Dump & Restore : filesystem, partition 별로 백업 및 복구
- Option
-f : backup 할 위치 선정
-a : 테이프의 공간 확인, 파일로 백업시에는 꼭 사용...
ex)dump -a -f sanjose_home /home
newfs /dev/ad1s1g
mount /dev/ad1s1g /mnt
cd /mnt
restore -rf /root/sanjose_home

2. Revision Control
기본적인 리비전 관리 툴인 RCS를 사용하기로 했다.
<= 마치 책을 대여하기 위해서 도서관을 사용하는 것과 동일, 여기서 파일은 책, RCS는 도서관 사서.
- Command
ci : check-in <= 책을 반남 즉 데이터 수정후 파일 반납
co : check-out <= 책을 대여, 즉 파일에 대한 수정 권한 획득
rlog : file에 변경 이력을 보여줌
rcsdiff : 버전별 차이점 보여줌
Ex)
sanjose# ci /root/test.txt <- RCS로 관리할 파일 선정
/root/test.txt,v <-- /root/test.txt
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> This file is for the RCS test
>> .
initial revision: 1.1
done
sanjose# co -l test.txt <- 파일 수정을 하기 위해서 파일 대여
test.txt,v --> test.txt
revision 1.1 (locked)
done
sanjose# vi test.txt <- 파일 수정
anjose# ci -u test.txt <- 파일 수정 후 파일 반납.
test.txt,v <-- test.txt
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> add my hope
>> .
done
sanjose# cat test.txt
1. My hope
HPC, Virtualization
Making my sweet home
sanjose# co -r1.1 test.txt <- 이전 버전으로 변경
test.txt,v --> test.txt
revision 1.1
done
sanjose# cat test.txt
1. My hope
HPC, Virtualization
sanjose# rlog test.txt <- log 변경 이력

RCS file: test.txt,v
Working file: test.txt
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
This file is for the RCS test
----------------------------
revision 1.2
date: 2009/07/30 03:13:16; author: root; state: Exp; lines: +1 -0
add my hope
----------------------------
revision 1.1
date: 2009/07/30 03:10:45; author: root; state: Exp;
Initial revision
----------------------------
=============================================================================
sanjose# rcsdiff -r1.1 -r1.2 test.txt <- version 별 변경 내용
===================================================================
RCS file: test.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
2a3
> Making my sweet home

FreeBSD 7.2 Server install

사무실을 이사하고 다시 시스템 구축을 시작했다.
먼저 FreeBSD 서버 구축을 시작했던 용도는 일단 테스트 서버이고 오늘 upgrade,samba 관련 설정을 하였다.

Post-Install

1) ports upgrade

cd /usr/ports/net/cvsup

make install

cp /usr/share/examples/cvsup/ports-supfile /root/.

vi ports-supfile

<= CHANGE_ 부분을 가까운 서버로 변경 : cvsup.kr.FreeBSD.org

cvsup -g -L 2 /root/ports-supfile

2) lsof,ltrace, strace 설치

cd /usr/ports/sysutils/lsof ; make install

cd /usr/ports/sysutils/ltrace ; make install

cd /usr/ports/devel/strace ; make install

4)/proc mount

vi /etc/fstab

# Device Mountpoint FStype Options Dump Pass#

/dev/ad0s1b none swap sw 0 0

/dev/ad0s1a / ufs rw 1 1

/dev/ad0s1e /home ufs rw 2 2

/dev/ad0s1f /usr ufs rw 2 2

/dev/ad0s1d /var ufs rw 2 2

/dev/acd0 /cdrom cd9660 ro,noauto 0 0

proc /proc procfs rw 0 0


3) samba 설정

cd /usr/ports/net/samba3/

make install

cp -p /usr/ports/net/samba3/work/samba-3.0.35/examples/smb.conf.default /usr/local/etc/smb.conf

vi /usr/local/etc/smb.conf

workgroup = MYGROUP

=> workgroup = SPKOREA

log file = /usr/local/samba/var/log.%m

=>log file = /usr/local/samba/var/log-%m.log

comment = Home Directories

=> comment = Home Directories for %u on %h

path=/home/%u/Docs

valid users = %S

;[public]

< ; comment = Public Stuff

< ; path = /home/samba

< ; public = yes

< ; writable = yes

< ; printable = no

< ; write list = @staff

---

> [public]

> comment = %h Shared Public Directory

> path = /home/samba/public

> force directory mode = 0777

> force create mode = 0777

> force group = nobody

> force user = nobody

> public = yes

> writable = yes

> printable = no

> write list = @staff

Samba user 생성

smbpasswd -a hiboss1

vi /etc/rc.conf

samba_enable="YES"

reboot


일단 다시 또 확인 해보자.