작업 환경은 FreeBSD 6.2 64bit O/S 였고, 머신은 대략 (정확한 Model은 모르겠지만, 2007년 6월 기준으로) 최신 Intel Server Box, Dual (혹은 Quard) Core CPU, 메모리는 4G이상이였다.
tinybsd로 DOM 작업이 주로 있었고, 드라이버 이슈, 메모리와 DOM (1G DOM 이였다!) 이 충분한데 일반 Kernel을 올려도 되겠다라는 판단 하에, 최종적으로는 TINYBSD Kernel 에서 GENERIC Kernel로 교체되었다. (Base 자체가 해당 이미지라는 것이지, 최종본이 해당 이미지와 완전 동일하지는 않다.)
처음 닥친 문제점은 CPU가 Dual Core 인식을 못하는 것이다. 여러가지 case가 있었는데, 결국 TINYBSD Kernel에서 최초 작업했던 option들이 문제가 됐었다.
사실 64bit Intel CPU에 FreeBSD를 올려보면, uname에 이렇게 나온다.
elenoa-freebsd# uname -a FreeBSD elenoa-freebsd.test.com 6.2-RELEASE FreeBSD 6.2-RELEASE #3: Wed Jun 20 16:37:53 KST 2007 root@elenoa-freebsd.test.com:/usr/src/sys/amd64/compile/GENERIC amd64 (요게 포인트이다. 내가 가지고 있는 샘플에서만 이런지는 모르겠지만..) elenoa-freebsd#
그러니까 amd64로 인식된다는 것인데, tinybsd는 기본적으로 i386 모드로 TINYBSD Kernel의 옵션들을 생성하기 때문에, 이 부분의 수정을 해줘야 한다.
/usr/src/sys/amd64/conf/GENERIC:
machine amd64 cpu HAMMER ident GENERIC
/usr/local/share/tinybsd/conf/default/TINYBSD:
machine i386 cpu I486_CPU cpu I586_CPU cpu I686_CPU ident TINYBSD
(적당히 수정해주면 되겠다.)
수정을 해 준 다음에 CPU를 보면 Dual Core인데도 하나의 CPU Core 만이 인식되고 있는데, 이 문제는,
# Workarounds for some known-to-be-broken chipsets (nVidia nForce3-Pro150) device atpic # 8259A compatability
이 device가 없어서 그렇다는 것이다. (주석 설명도 매치가 안되고.. 정말 생뚱맞다;)
이 일을 계기로 우리 작업에서의 Kernel 옵션이 GENERIC Kernel을 기반으로 바꼈는데, (사실 이때도 SMP 옵션 설정을 빼먹어서 잠깐 문제가 됐었다;) 두번째 문제가 생겼다.
적절한 부하테스트 와중에 서버가 죽는 것이다. (대략 1G bps급 Network 부하 테스트 중이였다) 일단 이 부하테스트와 서버의 돌연사를 맞물려서 생각했는데, 가끔 서버는 살아있는데 NIC만 죽는 경우도 있고, 가끔은 아주 서버가 Hang 되는 경우도 있었다. 그리고 점점 테스트를 하지 않는 와중에서도 서버가 Hang 되기 시작하는 것이다. 대략 추측 불가능한 미궁속으로 사건이 빠질때쯤.. 이 상황을 해결한 것은 다름아닌 아래의 옵션이였다.