파일시스템 탐구생활2
이번 주말에 역시 파일시스템과 관련한 실험을 진행 했습니다.
세월이 지나면 코드도 바뀌고 코드에 따라 성능도 달라질 수 있다는 것을 이번에 느낍니다.
불행히 중간에 사고가 생기는 바람에 완벽한 실험은 다 못했습니다.
가상머신 상에서 젠투를 이용해서 작업을 했는데 시험 도중에 RAID가 깨지는 바람에 작업 로그를 제외하곤 몽땅 날아가 버렸네요.
지난번에 제가 올렸던 자료에는 디렉토리 10만개, 파일 100만개를 생성, 목록보기, 삭제하는 작업을 걸었습니다.
그래서 이번엔 약간 더(?) 현실적으로 커널 트리를 해당 파일시스템에 3번씩 복사 해보는 걸 선택했습니다.
사용한 커널은 2.6.26-gentoo-r3 #1 SMP, 실제 메모리 512MB를 할당 했습니다.
하드디스크는 가상 SCSI 디스크 8GB짜리 1개를 사용했구요.
작업 내용은 다음과 같습니다.
# cd /usr/src # du -sk . 957873 .
/usr/src에는 리눅스 커널 2개 버전의 소스트리가 들어 있습니다. 크기가 약 935.4228515625MB 정도 됩니다.
이걸 3번 복사해 보는 것입니다.
cd /usr/src tar -cpf - .| (cd /mnt/test/target1; tar xvpf -) tar -cpf - .| (cd /mnt/test/target2; tar xvpf -) tar -cpf - .| (cd /mnt/test/target3; tar xvpf -)
아주 단순하죠?
1. XFS
# mkfs.xfs -f -b size=512 -l size=32768b -d agcount=1 -n size=16k /dev/sdb1 ;\ mount -o noatime,nodiratime,logbufs=8 /dev/sdb1 /mnt/test real 20m54.124s user 0m6.140s sys 3m14.960s
2. ReiserFS
1급 살인혐의를 받아 교도소에 간 한스 라이저의 파일시스템이죠. 저도 몰랐는데 KLDP 덕에 알게 되었네요.
인제부턴 1급 살인자 파일시스템이라고 해야 하나요? 씁쓸하군요.
# mkreiserfs /dev/sdb1 ; mount -o noatime /dev/sdb1 /mnt/test real 21m4.183s user 0m6.600s sys 3m34.130s
3. ext3
# mke2fs -j /dev/sdb1 ; mount /dev/sdb1 /mnt/test real 16m50.876s user 0m3.810s sys 1m24.550s
자, 위의 결과만 놓고 보니 ext3가 짱을 먹었습니다. 그동안 많이 좋아졌나 보네요.
과연 그럴까요?
위의 실험에서 XFS를 제외한 나머지 파일시스템에서는 모두 4K 블럭을 사용했습니다.
이 말은 파일시스템이 파일에 블럭을 할당할 때 4K씩 할당한다는 말이 됩니다. 4K 보다 적은 파일에 대해서도 일단은 4K를 할당하게 되는 것이죠.
이로 인해서 실제 총합이 1GB가 안되는 파일을 복사하는 경우 1GB보다 커지는 경우가 생깁니다. 더 쉽게 말하면 디스크 공간의 낭비가 생기는 것이죠.
그래서 ext3의 기본 블럭 크기를 줄여 보기로 했습니다.
소형 시스템에서는 얼마든지 이걸 적용하는 경우가 있을 수 있고 서버에서도 이런 경우를 적용해 볼 수 있을 것입니다.
# mke2fs -j -b 1024 /dev/sdb1 ; mount -o noatime /dev/sdb1 /mnt/test real 26m53.852s user 0m2.050s sys 1m30.400s
오호라..... 1K로 블럭 사이즈를 줄였더니 시간이 10분 이상 늘어나 버리는군요.
우분투 사용자 포럼에 다음과 같은 팁이 올라와 있길래 한번 적용해 봤습니다.
# mke2fs -j -b 1024 /dev/sdb1 ; tune2fs -o journal_data_writeback /dev/sdb1 ;\ mount -o noatime,data=writeback /dev/sdb1 /mnt/test real 40m44.897s user 0m2.580s sys 1m46.090s
이건 성능을 개선하는 팁이 아니라 개악하는 팁이었습니다. 이 쓰레드 아래 달린 댓글을 보니 많이들 쓸 거 같던데.....
블럭 사이즈에 가장 민감한 파일시스템이 ext3라는 것을 알게 되었습니다.
사실 ext3가 좀 까다로운 것은 동일한 조건에서도 실험 결과에서 시간차가 상당히 크게 나고 심지어 성능을 올릴 수 있는 명백한 옵션을 주었는데도 시간이 더 걸리는 해괴한 결과를 보여주기도 했습니다. 현재 여기 올린 자료에는 그게 없지만요. 암튼 희안한 파일시스템입니다.
예전에 실험했던 자료가 지금 구체적으로 남아 있질 않아서 그때와 비교를 못하는 게 좀 아쉽긴 합니다만 파일시스템의 성능이 이토록 많은 차이를 보이는지....
XFS의 경우 블럭 사이즈를 변경하더라도 성능에 ext3에 비해 성능에 엄청난 차이를 가져오지 않습니다.
ReiserFS의 경우에는 작업도중 RAID가 깨져서 마저 해보질 못했군요.
4. 결론
위의 커맨드라인 아규먼트를 보시면 아시겠지만 위의 실험에 한정하여 튜닝하지 않은 XFS보다 튜닝하지 않은 ext3가 더 빠르다는 것!! 초보자에겐 반가운 소식인가요?
하지만, 실제 튜닝에서는 XFS도 작은 파일에서 reiserFS를 앞지를 수 있다는 것!!
ext3는 기본적인 튜닝에 쥐약이라는 것!!
우선 이 정도가 되겠습니다.
지난번 파일시스템 탐구생활에선 아규먼트를 전혀 공개하지 않았습니다.
이번엔 하기로 맘 먹었습니다.
어쨌든 이것 말고도 실험한 자료는 이틀간 아주 많으나 다 빼고 보기 쉽게 올려봤습니다.
물론 이 실험은 이번으로 끝이 아니며 지금 해볼 것들이 더 있습니다.
다들 도움이 되시길 바라며.....
다른 분들의 벤치마킹 자료도 올라왔음 좋겠다는 생각을 해봅니다.
특히 JFS도 벤치마킹이 필요하다고 하셨는데 직접 해서 올려 보심이........
지금까지 파일시스템
지금까지 파일시스템 테스트를 가상 하드 드라이브에서 했다는 것인가요?
그게 과연 실제 하드 디스크에서 한 것과 비슷한 결과를 낼지 의문이네요.
일단 호스트 OS 버퍼를 거쳤을텐데...
vmware 로 실제 파티션
vmware 로 실제 파티션 물리면 괜찮지 않을까요?
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
실제 파티션을
실제 파티션을 물린다면 호스트 OS의 페이지 캐쉬를 사용하지는 않을 것 같습니다.
그렇지만 원글을 보면 가상 SCSI 8G 하드를 썼다고 하는 것으로 봐서 실제 파티션에 물린것 같지는 않네요.
네... 가상 서버에서 작업한 내용입니다.
실제 실험 결과는 아니지만 동일한 환경에서 시험한 것이므로 참고 자료로 충분히 활용하실 수 있습니다.
물론 같을 순 없겠죠.
There's always another way, dear.
---------------------------------
There's always another way, dear.
어떤 면에서 동일한
어떤 면에서 동일한 환경이라고 할 수 있는지 모르겠습니다.
I/O 요청 분포 vs. 실제 OS의 실제 디스크 퍼포먼스와
I/O 요청 분포 vs. 가상 OS의 가상 디스크 퍼포먼스가
얼마나 비슷한 것인지 확인이 된 것인가요?
underlying하고 있는 파일의 파일시스템, 단편화 정도, OS의 I/O 스케줄링, page cache 등에 따라
뭐가 어떻게 변할지 모르는 상황 같습니다만...
네....... 그냥 가상머신 상의 자료입니다.
아래에 실제 테스트 결과를 올려주셨네요.
동일한 가상환경에서 실험했다는 뜻입니다.
물론 실제 상황과 동일하지 않습니다.
노는 장비가 없어서 가상환경에서 실험한 것입니다.
실제 서버에서 해서 올렸으면 더 좋았겠죠.
There's always another way, dear.
---------------------------------
There's always another way, dear.
서버 교체 후
서버 교체 후 남는놈이 있어서 테스트해봤습니다.
매 1회 테스트마다 재부팅 했습니다.
OS: CentOS 5.2 (64bit)
KERNEL: 2.6.18-92.1.18.el5.centos.plus
CPU: Intel Xeon Dual-Core 3060 2.4GHz
HDD: SAMSUNG SP2504C
커널 소스 3개로 테스트 해봤습니다.
1. XFS
2. ReiserFS
3. EXT3
4. JFS
5. 결론
실제 서버에서 테스트 해보니 XFS가 작은 파일에서는 상당히 느리네요.
EXT3 writeback의 경우 성능 향상이 있었습니다. 하지만 갑작스런 정전에
데이터가 날라갈 위험이 있습니다. journal data mode도 작은 파일에서는
성능 향상이 있네요. 작은 파일의 경우 데이터도 저널에 기록되면서
fsync() 시간이 단축되기 때문인거 같습니다.
오늘 16BAY (1TB SATA HDD x 16) 백업용 스토리지 서버가 들어오는데 레이드 환경에서
테스트 해봐야겠습니다.
http://star4u.org
http://mirror.star4u.org
올려주신 자료 잘 봤습니다.
JFS까지 하셨군요. 지극 정성이십니다. 수고 많이 하셨네요. ^^
특히 XFS에서 다양한 파라미터로 자료 상세히 올려 주신 것 아주 감사드립니다.
언급하신 것처럼 XFS는 작은 파일에는 약합니다. 요거이 흠이죠.
성능차이가 존재하긴 하지만 패턴은 비슷하게 나왔군요.
16BAY 레이드에서의 결과도 무지 기대됩니다.
There's always another way, dear.
---------------------------------
There's always another way, dear.
관점의 차이겠지만
보는 사람에 따라서는 최종 결과를 "ext3는 이미 거의 완벽한 튜닝을 거친 상태이기 때문에 그냥 가져다 써도 남들 튜닝한 것만큼 빠르다"로 해석할 수도 있습니다. 뭐, 쓰신 말씀도 틀렸다고 할 수는 없겠지만요...
디폴트 파라미터를 바꾼 다음에 성능이 느려졌으면 그게 튜닝에 쥐약인지 튜닝을 잘못한 건지는 좀 의문이 남네요.
노트북을 새로
노트북을 새로 설치해야 할 일이 곧 생깁니다.
아무래도 xfs 를 버리지는 못하겠는데,
man mkfs.xfs 해서 보는 내용들이 너무 어렵습니다.
튜닝값들에 대해 좀 더 자세히 설명된 페이지가 있으면 알려주세요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
XFS 튜닝값을 이해하시려면.....
좀 귀찮으시더라도 SGI의 무료 훈련 교재를 한번 읽어 보시는 것이 도움이 많이 되실 듯 합니다.
http://oss.sgi.com/projects/xfs/training/
AG의 개념이라든가.... 설명이 아주 자세하진 않지만 도표가 잘 되어 있어서 맨 페이지와 결합해서 보시면 도움이 되실 겁니다.
---------------------------------
There's always another way, dear.
---------------------------------
There's always another way, dear.
감사합니다. pdf
감사합니다.
pdf 문서가 아주 많네요.
교재라고 불릴만큼 방대한것 같군요.ㄷㄷㄷ
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
xfs 에서 젠투 stage3
xfs 에서 젠투 stage3 압축 푸는데 걸리는시간이 3분을 넘기네요.
무슨수를 써도 3분 이하로 줄지를 않습니다.
reiserfs 로 하니까 32초 걸리고,
ext3 로 하니까 26초 걸리네요-_-;;;
다들 분발하고 있는 모양입니다.
ext3 로 돌아가겠습니다.
xfs 안녕 ㅠㅠ
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
제 시험 결과는...
# ls -al /home/files/stage3-i686-2008.0.tar.bz2
-rw-r--r-- 1 root root 117571798 Jul 1 2008 /home/files/stage3-i686-2008.0.tar.bz2
real 2m56.792s
user 1m18.180s
sys 0m19.150s
real 4m21.090s
user 1m18.110s
sys 0m25.430s
real 1m32.941s
user 1m18.730s
sys 0m12.720s
XFS의 경우 3분을 넘기는 경우도 있었지만 저는 3분 안쪽으로 끝나던데요. 아슬아슬하게.....
그리고, ext3의 경우엔 별다른 옵션을 주지 않았는데도 1.5분이 살짝 넘는군요. ext3의 경우 26초까지 줄이셨다구요?
그렇게까지나 차이가 날 거 같진 않은데.....
혹시 몰라서 테스트 한 자료 남깁니다. 참고 하시라구요.
---------------------------------
There's always another way, dear.
---------------------------------
There's always another way, dear.
음...fsck 속도 때문에
음...fsck 속도 때문에 서버에서는 xfs 를 계속 써야 겠습니다.
ext3 fsck 속도 장난 아니네요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/
https://xenosi.de/
전에 백업서버
전에 백업서버 구매한 후 테스트 했었는데 귀찮아서 포스팅 안하다가 까먹고 있었네요. :)
1TB HDD 16개인데 1개는 hotspare로 두고 15개를 raid5로 잡았습니다.
EXT3
커널 소스를 압축 푼다음 복사해서 9.8GB(약 77만개 파일) 채웠습니다.
그 상태로 fsck를 해봤습니다.
삭제는
XFS
마찬가지로 커널 소스로 9.8GB(약 77만개 파일)채웠습니다.
삭제
http://star4u.org
http://mirror.star4u.org
올려주신 글 잘 보았습니다.
사실 상당히 기다렸던 글입니다. ^^
수고 많으셨습니다.
역시 스토리지 크기가 커지니까 차이가 현격하게 나는군요.
다른 분들에게도 많은 참고와 도움이 되었으면 합니다.
사족이라면, 여기선 시험 하시느라 언급을 하시지 않으셨지만....
xfs_repair의 경우 필히 해당 파티션을 umount 하신 후에 작업하셔야 합니다.
이 정도는 알고들 계시겠죠.
---------------------------------
There's always another way, dear.
---------------------------------
There's always another way, dear.
댓글 달기