open시 O_SYNC, O_DSYNC, O_DIRECT
글쓴이: sysadmin / 작성시간: 수, 2007/10/24 - 6:36오후
안녕하십니까?
Disk Write 속도 테스트를 하고 있는데, 이해가 안가는 부분이 있어
질문드립니다..
아래와 같이 테스트를 하였습니다.
open : O_CREAT|O_TRUNC|O_WRONLY|O_SYNC(또는 O_DSYNC)
write : 200Bytes(100만건)
fsync : 사용하지 않음
결과 : 17~19초(초당 약 5~6만건)
[질문1]
위의 프로그램을 하나만 실행하면 별 문제가 없습니다.
그런데, 동일한 프로그램을 2개(a.dat와 b.dat 파일)를 띄우면
속도가 현저히(10배 이상) 떨어집니다.. ==> 이해가 안가는 부분이구요..
[질문2]
그리고 a.dat와 b.dat가 물리적으로 서로 다른 Disk인 경우에는 원래의 속도가 납니다. ==> 이건 더 이해가 안가네요..
O_SYNC를 파일단위가 아닌 Disk단위로 적용되는 건지?(말도 안되는 것 같습니다만 결과가 이러니..)
혹시 시스템옵션에 설정하는 게 있는건 아닌지..
[질문3]
open시에 O_DIRECT를 주고 동일한 테스트를 했더니, 7-8초(초당 약 13만건) 정도밖에
걸리지가 않네요..
O_DIRECT로 open한 경우에는 fsync를 하지 않아도 되는건지?
참고로, AIX 5.3에서 테스트했습니다.
혹시 경험이 있으신 분이 계시면 답변 부탁드립니다..
Forums:
AIX 에서의 경험은
AIX 에서의 경험은 아닙니다. 제가 아는 짧은 지식으로 말씀드리면...
질문2] 물리적으로 다른 디스크에 쓰면 당연히 각각의 디스크와 관련된 I/O 큐에 I/O 요청이 들어가기 때문에 하나의 테스트로 했을 때와 비슷한 속도가 나오는게 맞습니다. O_SYNC 는 파일 단위로 되는것이 맞지요. 파일단위이지만 결국 하나의 디스크 I/O 큐로 요청을 하기때문에, 처음 테스트한 것과 당연히 비슷한 결과가 나와야 할 것으로 생각됩니다.
질문3] O_DIRECT 는 user -> kernel 메모리 copy 를 생략하기 때문에, 옵션이 없는 경우보다 빨라지는 것입니다. 메모리 copy 에 소요되는 CPU 와 메모리 등의 자원에 대한 cost 가 줄어들기 때문입니다. fsync 는 아마 안해도 될 것 같은데요? O_DIRECT 옵션은 어떤 응용 프로그램을 사용하느냐에 따라 잘 선택해서 사용하는 것이 좋습니다.
http://www.ukuug.org/events/linux2001/papers/html/AArcangeli-o_direct.html
질문1] 좀 애매한데요. 200byte 짜리 파일을 100만개 썼다는 것인지? 한개의 파일에 200byte 씩 100만번 write 를 했다는 것인지, 아니면 한개의 파일을 200byte 쓰고, 다시 지우고 200byte 쓰고를 반복해서 100만번을 하신것인지 명확하지 않군요.
O_TRUNC 옵션을 보면 아마 지우고 새로 쓰는 것을 100만번 반복 했다는 것 같습니다.
어찌되었던 현상은 I/O 가 서로 간섭을 일으키는 것처럼 보입니다.
리눅스의 I/O 는 인접한 블럭에 대한 각각의 요청을 하나의 요청으로 묶어서 I/O 큐에 전달하는데 AIX 도 그렇게 되어있는지는 모르겠습니다. top 에서 I/O wait 이 차지하는 비율을 비교해보셔서 한개 프로세스를 사용할때 보다, 두개를 사용할때가 wait 이 높게 나온다면, 디스크 I/O 가 효율적이지 못하다는 것을 유추할 수 있을 것 같네요.
위 테스트에서 I/O 효율과 관련될 수 있을 법한 내용은
1. 파일시스템 bitmap allocation 방법,
2. IO subsystem 알고리즘
위 내용은 수정하거나 바꿀 수 있는 것이 아니기 때문에, 테스트방법을 여러가지(write 크기를 크게 한다거나, O_SYNC 옵션을 뺀다거나)로 해보시고 비교해보시는 것이 좋지 않을까 싶네요. 1번의 경우라면 AIX 에서 다른 파일시스템에서 테스트 해보는 것도 괜찮겠군요.(AIX도 여러파일시스템을 지원하는지는 잘 모르겠습니다만..)
==========================
별은 바라보는 자에게 빛을 준다
==========================
별은 바라보는 자에게 빛을 준다
댓글 달기