기존에 있는 데이터 마이그레이션 하면서
파일시스템의 압축 알고리즘을 바꿔봤습니다. lz4 -> zstd
참고로 btrfs, zfs 의 압축 알고리즘이 똑똑하기 때문에 압축 안되는 것은 압축하지 않고,
압축 일정수준 이상 되는 것만 압축 됩니다.
zstd는 2016년쯤 페이스북에서 개발한 차세대 압축 알고리즘입니다.
데이터는 주로 압축 불가능한 영상, 압축 가능한 RAW파일, 소스코드 및 문서들입니다.
# zfs list NAME USED AVAIL REFER MOUNTPOINT tank/users 4.88T 15.8T 245K /tank/users tank/users/test 4.88T 15.8T 4.85T /tank/users/test vault/users 5.15T 1.46T 5.14T /vault/users
lz4에 비해 zstd 대충 300기가 줄어들은 것을 보실 수 있습니다. 용량 적은 SSD하나 정도 크기죠! (5.15TB -> 4.88TB)
압축 비율은 대략 아래와 같습니다.
# zfs get all tank/users/test | grep compress tank/users/test compressratio 1.06x - tank/users/test compression zstd inherited from tank/users tank/users/test refcompressratio 1.06x - # zfs get all vault/users | grep compress vault/users compressratio 1.01x - vault/users compression on received vault/users refcompressratio 1.01x -
대략 1.01 -> 1.06배로 많이 좋아졌네요. 동영상 파일이 많아서 생각보다 그렇게 엄청나게
높은 비율은 아닙니다.
실제로도 zstd 홈페이지에서도 생각보다 성능 하락이 적은데도 성능이 좋으신 것으로 나옵니다.
보통 하드디스크 seek time >>>> cpu cycles이기 때문에 (CPU가 하드보다 훨씬 빠르기 때문에), 압축으로 인해서 성능이 더 좋아질 수도 있습니다. 성능이 떨어질 만한 경우는 DB같은 것을 사용할 때인데, zfs나 btrfs은 subvolume마다 압축 여부를 끄고 킬수 있기 때문에,
DB용 폴더만 제외하고 모든 volume에 압축을 키는 것이 좋아보이네요
페이스북에서 모든 개발서버에 btrfs + zstd 사용하도록 변경했는데 크게 성능 하락이 없었다고도 하네요.
재밌는 블로그 포스트도 있어서 영어 되시고 관심 있으시면 한번 읽어보세요.
데이터 저장소에서 뭔가 설정하는게 있는건지.. +_+