본문 바로가기

Linux is..../Knowledge

Write Barrier란 무엇인가?

Write Barrier란 무엇인가?


Write Barrier는 파일시스템의 메타데이터가 올바르게 기록되고 디스크에 제대로(심지어 디스크 전원이 나갈지라도) 반영되게 하기위한 커널 매커니즘이다. 이 매커니즘은 전원에 문제가 생겨도 fsync()를 통해서 전송된 데이터가 올바르게 지속되록 해주지만 특정 프로그램에 대해서는 성능 저하를 가져오는 영향을 줄 수 있다. 특히, fsync() 시스템콜을 많이 사용하거나 작은 파일의 생성과 삭제를 빈번하게 하는 어플리케이션에 성능적인 저하를 많이 일으키게 된다.


 앞서 언급했던 파일시스템과 관련된 부분을 다시 짚어보자. 현재 대부분의 디스크 장치는 내부적으로 캐시를 가지고 있으며 RAID 컨트롤러에도 캐시가 존재한다. 이러한 Write Cache가 존재하는 저장장치들은 데이터가 캐시에 전달이 되면 물리적인 디스크에서 I/O가 완료되었다고 응답한다. 만약 이 상황에서 전원이 유실되면 캐시에 존재하는 데이터도 사라지게 되는데 하나의 데이터 저장 트랜젝션이 일부만 수행된 경우라면 상황은 더 복잡하게 된다. 제대로 완료되지 않은 데이터블록들만 디스크에 존재하게 될 것이고 전원이 복구되면 저널은 초기화 되지 않은 트랜젝션 블록들을 파일시스템에 다시 반영하려고 시도하며 결과적으로 데이터의 일관성과 무결성에 영향을 미치게 된다.


Write Barrier의 동작


 Write Barrier는 I/O 처리의 전과 후에 저장장치(디스크)의 캐시를 비우는 동작을 통해서 Linux 커널에 구현되어있다. 데이터를 저장하기 위해서 트랜젝션이 기록되면 저장장치의 캐시를 비우고(flush) 데이터블록이 기록되면 다시한번 저장장치의 캐시를 비우게 된다. 여기에서 캐시를 비운다는 것은 디스크 캐시에 존재하는 데이터를 실제 물리적인 저장장치에 기록한다는 것을 의미한다. 이러한 동작은 디스크에 모든 데이터를 보유하게 되므로 메타데이터의 순서를 다시 맞출 필요가 없어지게 된다.


 하지만, 앞서 언급했던 것 처럼 Write Barrier를 사용하게 되면 디스크 성능 향상을 위해 장착된 디스크 캐시에 대해서 2번에 걸쳐 비우는 작업을 진행하므로 성능에 단점으로 작용할 수 밖에 없다.





Write Barrier for ext3/ext4


 당연한 이야기일지 모르지만 저널링 파일시스템인 ext3에도 Write Barrier 기능의 사용이 가능하다. 하지만, ext3는 ext2에 저널링 기능을 추가해서 나온 파일시스템으로 태생적인 한계로 인해 Write Barrier를 활성화하게 되면 성능저하가 매우 심한 편이다. ext3도 계속 개선되고 있기 때문에 어느 정도 좋아졌는지는 모르겠지만 일전에 테스트 했던 경험으로는 약 1/10 수준의 I/O 성능밖에 내지 못하는 문제가 있었다.


 비교적 최근 등장한 ext4 파일시스템도 Write Barrier를 지원하며 ext3와는 다르게 Write Barrier 기능이 기본적으로 활성화 되어있다. 즉, /etc/fstab에 barrier=1로 설정하여 마운트 하지 않아도 Write Barrier 기능이 동작한다. 따라서, ext4의 안정성은 ext3 기본(Write Barrier 비활성)보다 낫다고 보아도 무방하다. ext4 외에도 대용량 스토리지 시스템에 널리 사용되어왔던 XFS 파일시스템도 Write Barrier가 기본적으로 활성화 되어있다.



Write Barrier의 유효성


 Write Barrier는 파일시스템의 일관성/무결성을 위해서 존재하는 기능이지만 BBC(Battery-backend Cache)가 존재하는 RAID 컨트롤러에서는 없어도 되는 기능이다. BBC가 존재하는 경우는 파워가 유실되어도 Write Cache 데이터가 날아가지 않고 그대로 보존되며 다시 정상적으로 시스템에 전원이 공급되면 전원 복구 후 작업(Post-power-loss recovery)의 일환으로 Write Cache가 가지고 있는 데이터를 물리적인 디스크에 반영시켜주기 때문이다.


 Write Barrier가 기본적으로 활성화 된 파일시스템이더라도 위와 같이 물리적인 안정성을 가지고 있는 경우에는 Write Barrier를 끄고 성능 향상을 꾀하는게 더 나을 수 있다. 단, 전원 문제가 아닌 디스크 컨트롤러 자체의 장애에 대해서도 안정성을 확보하고자 한다면 Write Barrier를 활성화 할 필요가 있다.