아래 내용은 KLDP(http://kldp.org/node/101444)에서 참조했으며, http://kldp.org/node/100387 글 또한 참조하면 xfs 파일시스템 튜닝에 도움이 될 만한 문서임.
만약 기본 옵션 그러니까…..
mkfs.xfs -Lblah /dev/blah
형식으로 포맷하고 defaults 옵션으로 mount 해서 사용하셨다면 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
간단하게 추가하도록 하겠습니다.
mkfs.xfs
-b size=512: 요녀석은 파일시스템의 블럭사이즈를 512바이트로 정하는 것이구요. 사용하는 파일의 크기에 따라 탄력있게 정해서 쓰시면 되겠습니다. 물론 이 블럭사이즈 역시 성능에 영향을 줍니다.
-l size=32768b: 저널링 로그의 크기를 32768 블럭 사용하겠다는 것입니다. 저널링 파일시스템에서 저널링 로그 크기 역시 파일시스템의 성능에 영향을 줍니다. 로그의 크기는 32m로 적으면 32Mb가 됩니다. 자세한 것은 man page….
-d agcount=1: XFS에 있는 allocation group을 하나만 할당하겠다는 것입니다. 기본값은 아마 4Gb당 ag 하나를 할당할 것입니다. agcount=1은 실제에서는 사용하면 안되는 옵션입니다. 혹시나 ag 블럭이 깨지면 파일시스템 전체가 날아갈 수 있으니까요.
mount option
noatime: no access time, access time을 기록하지 않겠다는 것이죠. 다른 파일시스템에서도 이 옵션은 유용합니다.
nodiratime: no dir access time, dir access time을 기록하지 않겠다는 것이죠. noatime과 마찬가지입니다.
logbufs=8: 이것은 XFS에서 쓰이는 옵션으로 로그용 버퍼의 갯수를 할당합니다. 요즘은 대개 메모리가 크니까 8정도 주면 됩니다. 2,4,8로 값을 정해 쓸 수 있습니다.
이것 외에도 튜닝 옵션은 여러가지 있습니다. 자세한 것은 man page 참조하시구요.
이러한 튜닝 옵션을 잘 이용하면 작은 파일에서도 XFS의 느린 퍼포먼스는 많이 개선이 됩니다.
2008년 2월에 제가 시험한 결과의 일부를 보면,
$ ./bonnie++ -d /var/tmp -s 2048:1024 -n 100 -r 1024
XFS
Version 1.03c ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
localhost.loc 2G:1k 104211 76 62023 15 27057 11 48741 45 50405 12 221.3 1
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
100 606 13 7605 52 530 17 580 15 291 5 92 4
localhost.localdomain,2G:1k,104211,76,62023,15,27057,11,48741,45,50405,12,221.3,1,100,606,13,7605,52,530,17,580,15,291,5,92,4
EXT3
Version 1.03c ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
localhost.loc 2G:1k 47457 67 52709 19 21626 10 37917 39 40486 10 214.0 2
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
100 54849 98 +++++ +++ 75998 83 54506 99 +++++ +++ 87924 99
localhost.localdomain,2G:1k,47457,67,52709,19,21626,10,37917,39,40486,10,214.0,2,100,54849,98,+++++,+++,75998,83,54506,99,+++++,+++,87924,99
전송률에서는 XFS가 앞서고…. 파일을 생성하고 삭제하는 데서는 ext3가 앞서는 것을 볼 수 있습니다.
중요한 것은….
2002년에 XFS와 ext3의 성능 테스트에서 XFS가 ext3보다 여러가지 면에서 상당한 우세를 보였는데….
최근에 제가 해본 실험에서도 ext3의 파일, 디렉토리 갯수의 제한과 한 디렉토리에 많은 파일을 생성하면 심하게 느려지는 현상 말고는 성능이 예전에 비해 많이 개선이 되었다는 것입니다.
아직까지 확실히 그렇다라고 결론은 내리지 못했지만 지금까지 나온 결과를 보면 그렇습니다.
아래는 XFS 파일시스템 튜닝에 관련된 참고사이트.
http://www.fhgfs.com/wiki/wikka.php?wakka=StorageServerTuning