본문 바로가기
IT/Nas

[Nas] TrueNAS SCALE ZFS 성능 벤치마크: 하드웨어별 최적화 전략

by 수누다 2026. 5. 22.

안녕하세요, 13년차의 서버실 주인장입니다. 오늘은 많은 홈랩 유저와 중소기업에서 사랑받는 TrueNAS SCALE, 그중에서도 ZFS 성능 벤치마크와 최적화 전략에 대해 이야기해보려고 해요. 제가 직접 여러 하드웨어 조합으로 삽질하면서 얻은 경험들을 솔직하게 풀어보겠습니다. 혹시 NAS 속도가 답답하다고 느끼셨다면, 이 글이 좋은 가이드가 될 겁니다.

저도 처음 TrueNAS를 구축했을 때, '이 정도면 충분하겠지?' 했는데 막상 데이터를 쓰고 읽으려니 생각보다 느려서 당황했던 기억이 있거든요. 특히 가상 머신(Virtual Machine)이나 컨테이너(Container)를 돌리거나, 여러 사람이 동시에 접근할 때는 그 느림이 더 확 체감되더라고요. 결국 '이건 안 되겠다!' 싶어서 하드웨어부터 소프트웨어 설정까지 뜯어고쳤죠. 그 과정을 통해 어떤 요소들이 ZFS 성능에 가장 큰 영향을 미치는지 몸소 깨달을 수 있었습니다.

TrueNAS SCALE의 ZFS 스토리지 아키텍처와 성능에 영향을 미치는 요소들을 시각화한 다이어그램입니다.

ZFS 성능의 핵심 요소 이해하기

TrueNAS SCALE의 핵심은 ZFS (Zettabyte File System)입니다. ZFS는 단순히 파일을 저장하는 것 이상의 강력한 데이터 무결성(Data Integrity), 스냅샷(Snapshot), 복제(Replication) 기능을 제공하지만, 그만큼 성능 최적화가 중요하죠. ZFS 성능에 영향을 미치는 주요 개념들을 먼저 짚고 넘어가 볼까요?

  • ARC (Adaptive Replacement Cache, 적응형 교체 캐시): ZFS가 시스템 RAM을 사용하여 자주 접근하는 데이터를 캐싱하는 방식입니다. RAM이 많을수록 캐시 히트율(Cache Hit Ratio)이 높아져 읽기 성능이 비약적으로 향상되죠.
  • L2ARC (Level 2 Adaptive Replacement Cache, 2단계 적응형 교체 캐시): ARC가 부족할 때 SSD 같은 고속 스토리지를 2차 캐시로 활용하는 기능입니다. 주로 읽기(Read) 성능 향상에 기여합니다.
  • SLOG (Separate Intent Log, 분리된 의도 로그) / ZIL (ZFS Intent Log): ZFS는 동기 쓰기(Synchronous Write) 작업을 할 때 데이터를 먼저 ZIL에 기록하여 데이터 무결성을 보장합니다. 이 ZIL을 전용 고속 저장 장치(보통 NVMe SSD)에 분리하여 사용하는 것이 SLOG입니다. SLOG는 쓰기(Write) 성능, 특히 동기 쓰기 성능을 크게 개선해줍니다.
  • VDEV (Virtual Device, 가상 장치): ZFS 풀(Pool)을 구성하는 기본 단위입니다. 여러 디스크를 RAIDZ, 미러(Mirror), 스트라이프(Stripe) 등으로 묶어 VDEV를 만듭니다. VDEV 구성 방식에 따라 성능 특성이 달라집니다.

하드웨어별 최적화 전략: 뭘 업그레이드해야 할까요?

NAS 성능은 단순히 디스크 개수를 늘린다고 좋아지는 게 아닙니다. 각 하드웨어 요소들이 ZFS의 특징과 맞물려 복합적으로 작용하거든요. 제가 경험했던 대표적인 하드웨어별 최적화 포인트를 알려드릴게요.

1. CPU: 뇌가 좋아야 모든 게 빠르다

ZFS는 데이터 무결성 검사(Checksum), 압축(Compression), 중복 제거(Deduplication) 등 다양한 연산 작업을 수행합니다. 이 모든 작업에 CPU 파워가 필요하죠. 특히 여러 클라이언트가 동시에 접근하거나, 가상 머신이 많이 돌아가는 환경에서는 고성능 CPU가 필수입니다. 저는 처음엔 저전력 CPU를 썼다가 병목 현상 때문에 고생 좀 했습니다. 결국 코어(Core) 수가 많고 클럭(Clock)이 높은 CPU로 바꿨더니 전체적인 응답성이 확 좋아지더라고요.

2. RAM: 많을수록 좋은 ZFS의 친구

앞서 설명했듯이 ZFS는 RAM을 ARC로 활용합니다. RAM이 많으면 많을수록 디스크에 접근할 필요 없이 캐시에서 데이터를 바로 읽어올 확률이 높아져요. TrueNAS 공식 권장 사양은 8GB지만, 최소 16GB, 가능하다면 32GB 이상을 권장합니다. 저도 8GB에서 32GB로 업그레이드하고 나서 웹 인터페이스 반응 속도부터 파일 접근 속도까지 전반적인 성능 향상을 체감했습니다. 물론 ECC RAM(Error-Correcting Code RAM)을 사용하면 데이터 무결성을 더욱 확보할 수 있어 서버용으로는 거의 필수라고 봅니다.

3. 네트워크: 병목 없는 고속도로

아무리 NAS 내부 성능이 좋아도 네트워크 속도가 느리면 그걸 제대로 활용할 수 없어요. 특히 10기가비트 이더넷 (10GbE)은 대용량 파일 전송이나 여러 클라이언트가 동시에 고대역폭을 요구할 때 빛을 발합니다. 저도 처음엔 기가비트(1GbE)로 만족했지만, VM 백업이나 4K 영상 편집 작업을 하면서 10GbE NIC (Network Interface Card)의 필요성을 절실히 느꼈습니다. 10GbE 환경을 구축하려면 NAS뿐만 아니라 스위치(Switch)와 클라이언트 PC도 10GbE를 지원해야 한다는 점, 꼭 기억하세요!

4. 스토리지: ZFS 성능의 핵심

ZFS 성능의 가장 큰 변수는 역시 스토리지 구성입니다.

4.1. 메인 풀 (Main Pool)

  • HDD (Hard Disk Drive): 대용량 저장에 유리하지만, 무작위 읽기/쓰기(Random Read/Write) 성능은 떨어집니다. 주로 RAIDZ1/2/3나 미러링(Mirroring)으로 구성합니다.
  • SSD (Solid State Drive): HDD보다 훨씬 빠른 읽기/쓰기 속도와 낮은 지연 시간(Latency)을 제공합니다. 가상 머신 스토리지나 고성능이 필요한 데이터 저장에 적합합니다.

제 경험상, 홈랩에서는 메인 풀을 HDD로 구성하더라도, 중요한 서비스나 가상 머신 이미지는 별도의 SSD 풀에 두는 것이 성능 체감에 정말 효과적이었습니다.

4.2. SLOG/ZIL 전용 장치

동기 쓰기 성능을 높이는 가장 확실한 방법은 NVMe SSD를 SLOG 전용 장치로 사용하는 것입니다. SLOG는 쓰기 캐시 역할을 하므로, 매우 낮은 지연 시간과 높은 내구성(Endurance)을 가진 SSD가 필요합니다. 일반적으로 DRAM이 내장된 엔터프라이즈급 NVMe SSD가 권장되지만, 홈랩에서는 고성능 컨슈머 NVMe SSD도 충분히 효과를 볼 수 있습니다. 제가 직접 벤치마크해보니, SLOG 유무에 따라 동기 쓰기 성능이 수십 배 이상 차이 나는 걸 확인했습니다. ⚠️ 다만 주의할 점은, SLOG 장치는 갑작스러운 전원 손실에도 데이터가 안 날아가도록 전력 손실 보호(Power Loss Protection, PLP) 기능이 있는 제품을 선택해야 한다는 것입니다.

4.3. L2ARC 전용 장치

L2ARC는 읽기 캐시이므로, 꼭 최고 성능의 NVMe SSD를 사용할 필요는 없습니다. SATA SSD나 여유 있는 NVMe SSD를 활용해도 충분히 효과를 볼 수 있어요. 다만, L2ARC는 콜드 캐시(Cold Cache) 상태에서 효과가 미미하고, 시스템 RAM(ARC)을 먼저 채우기 때문에, RAM이 충분한 상태에서 L2ARC를 추가하는 것이 좋습니다. 제가 사용해 본 결과, L2ARC는 큰 데이터셋을 반복적으로 읽을 때 정말 유용하더라고요.

실전 벤치마크와 최적화 과정

이제 실제 성능을 측정하고 최적화하는 과정을 살펴볼게요. TrueNAS SCALE에서는 다양한 벤치마크 툴을 활용할 수 있습니다.

1. 벤치마크 툴 준비

TrueNAS SCALE은 Debian 기반이라 익숙한 리눅스 툴들을 사용할 수 있습니다.

  • fio (Flexible I/O Tester): 디스크 I/O 성능을 측정하는 데 가장 널리 사용되는 툴입니다. 순차 읽기/쓰기, 랜덤 읽기/쓰기, IOPS, 대역폭 등 다양한 시나리오를 테스트할 수 있죠.
  • iperf3: 네트워크 대역폭을 측정하는 툴입니다. 클라이언트와 서버 간의 실제 네트워크 속도를 확인할 때 유용해요.
  • arcstat: ZFS ARC 캐시의 상태를 실시간으로 모니터링합니다. 캐시 히트율, 메모리 사용량 등을 확인할 수 있습니다.

TrueNAS SCALE 쉘(Shell)에서 fio를 설치하려면 다음 명령어를 사용합니다.


sudo apt update
sudo apt install fio

2. ZFS 풀 구성 및 SLOG/L2ARC 추가

ZFS 풀을 생성할 때, VDEV 구성은 매우 중요합니다. 미러(Mirror) 구성은 IOPS 성능이 좋고 복구 시간이 짧지만 용량 효율이 낮고, RAIDZ는 용량 효율이 좋지만 IOPS 성능이 미러보다 떨어지고 복구 시간이 길 수 있거든요. 저는 홈랩에서 가상 머신을 많이 돌리기 때문에 IOPS를 우선시해서 미러 구성을 선호하는 편입니다.

SLOG와 L2ARC는 TrueNAS SCALE 웹 UI에서 간단하게 추가할 수 있습니다. 'Storage' > 'Pools' > 'ADD' 버튼 옆의 '...' 메뉴 > 'Add Vdevs'를 통해 캐시(Cache)나 로그(Log) VDEV를 추가할 수 있습니다.

TrueNAS SCALE 웹 UI에서 ZFS 풀에 SLOG (Log Vdev)를 NVMe SSD로 추가하는 설정 화면

TrueNAS SCALE 웹 UI에서 ZFS 풀에 SLOG (Log Vdev)를 추가하는 화면입니다.

3. fio를 이용한 디스크 벤치마크 (Disk Benchmark with fio)

fio 명령어를 이용해 다양한 시나리오로 ZFS 풀의 성능을 측정합니다. 예를 들어, 4KB 랜덤 쓰기 IOPS를 측정하는 명령어는 다음과 같습니다.


fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --numjobs=4 --size=1G --time_for_run=60 --group_reporting --direct=1 --filename=/mnt/YourPoolName/fio_test_file
  • --name=random-write: 테스트 이름
  • --ioengine=posixaio: I/O 엔진
  • --rw=randwrite: 랜덤 쓰기 (randread는 랜덤 읽기, write는 순차 쓰기, read는 순차 읽기)
  • --bs=4k: 블록 사이즈 (Block Size)
  • --numjobs=4: 동시에 실행할 작업 수
  • --size=1G: 각 작업이 생성할 파일 크기
  • --time_for_run=60: 60초 동안 테스트 실행
  • --group_reporting: 모든 작업의 결과를 합쳐서 보여줌
  • --direct=1: O_DIRECT 플래그를 사용하여 OS 캐시를 우회
  • --filename=/mnt/YourPoolName/fio_test_file: 테스트 파일 경로

SLOG를 추가하기 전후, L2ARC를 추가하기 전후로 이 테스트를 반복하면서 성능 변화를 기록해보세요. 순차 쓰기/읽기랜덤 쓰기/읽기를 모두 테스트하는 것이 정말 중요합니다.

4. iperf3를 이용한 네트워크 벤치마크 (Network Benchmark with iperf3)

NAS와 클라이언트 PC 양쪽에서 iperf3를 실행하여 실제 네트워크 대역폭을 측정합니다.

NAS (서버 모드):


iperf3 -s

클라이언트 PC (클라이언트 모드):


iperf3 -c [NAS의 IP 주소] -P 8
  • -s: 서버 모드
  • -c [IP 주소]: 클라이언트 모드로 지정된 IP에 연결
  • -P 8: 8개의 병렬 스트림(Parallel Stream)으로 테스트 (더 정확한 최대 대역폭 측정)

이 테스트를 통해 1GbE, 2.5GbE, 10GbE 등 실제 네트워크 속도가 얼마나 나오는지 확인할 수 있습니다. 저도 이 테스트를 통해 '아, 디스크가 문제가 아니라 네트워크가 병목이었구나!' 하고 깨달았던 적이 많습니다.

fio 디스크 벤치마크 및 iperf3 네트워크 벤치마크 결과 대시보드

ZFS 풀의 fio 벤치마크 결과와 iperf3 네트워크 벤치마크 결과를 보여주는 통합 대시보드 예시입니다.

⚠️ 실제 겪었던 삽질과 트러블슈팅

제가 벤치마크와 최적화 과정을 거치면서 겪었던 몇 가지 문제점과 해결책들입니다. 아마 여러분도 비슷한 상황을 만날 수 있을 거예요.

  1. 'SLOG를 추가했는데 왜 쓰기 성능이 그대로죠?': 동기 쓰기(Synchronous Write)를 하는 애플리케이션(예: 데이터베이스, 가상 머신)이 아니면 SLOG 효과를 보기 어렵습니다. 비동기 쓰기(Asynchronous Write) 위주라면 SLOG보다 메인 풀 디스크 자체의 성능이 더 중요하거든요. 또한, SLOG 용량은 보통 RAM의 몇 배 정도로 충분하며, 너무 큰 SLOG는 오히려 낭비일 수 있습니다.
  2. 'L2ARC를 추가했는데 RAM 사용량이 줄지 않아요!': L2ARC는 ARC가 '꽉 찬' 후에 활성화되기 시작합니다. 그리고 L2ARC 자체도 RAM을 인덱싱(Indexing)하는 데 사용하므로, L2ARC를 추가한다고 해서 RAM 사용량이 드라마틱하게 줄어들지는 않아요. 오히려 L2ARC 인덱스 때문에 RAM 사용량이 소폭 늘 수도 있습니다. L2ARC의 실제 효과를 보려면 충분한 RAM이 먼저 갖춰져야 합니다.
  3. '10GbE를 달았는데 왜 속도가 안 나오죠?': 네트워크 케이블, 스위치, 클라이언트 PC의 NIC가 모두 10GbE를 지원하는지 확인하세요. 특히 저가형 케이블이나 오래된 스위치는 실제 대역폭을 저하시킬 수 있어요. 그리고 CPU 사용량이 100%에 근접하는지 확인해보세요. NAS의 CPU가 병목일 수도 있으니까요.
  4. 'ZFS 압축(Compression)을 켰더니 오히려 느려졌어요!': 압축률이 낮은 데이터를 압축하거나, CPU 성능이 충분하지 않은 상태에서 고압축률 알고리즘을 사용하면 압축/해제 오버헤드 때문에 성능이 저하될 수 있습니다. lz4처럼 가벼운 압축 알고리즘은 성능 저하가 적으면서도 효과가 좋은 편이니, 테스트해보고 적용하는 것을 추천합니다.

성능 벤치마크 결과 요약 및 최적화 팁

다양한 테스트를 통해 제가 내린 결론은 다음과 같습니다.

하드웨어 요소 ZFS 성능 기여 최적화 팁
CPU 전반적인 시스템 응답성, ZFS 연산 처리 코어 수와 클럭이 높은 CPU 사용 (가상화, 다중 사용자 환경 시 중요)
RAM 읽기 캐시(ARC) 성능, 시스템 안정성 최소 16GB, 가능하면 32GB 이상. ECC RAM 권장
네트워크 클라이언트-NAS 간 데이터 전송 속도 10GbE NIC 및 인프라 구축. iperf3로 병목 확인
SLOG (NVMe SSD) 동기 쓰기(Synchronous Write) 성능 필수: PLP 기능 있는 고성능 NVMe SSD 사용 (VM, DB 등)
L2ARC (SSD) 반복적인 읽기(Read) 성능 RAM이 충분할 때 추가. SATA/NVMe SSD 활용 가능
메인 풀 (HDD/SSD) 기본 저장 용량 및 성능 사용 목적에 따라 RAIDZ 또는 미러 구성. 고성능 요구 시 SSD 풀 별도 구성
TrueNAS SCALE ZFS 성능 최적화 전략 요약 인포그래픽: CPU, RAM, 네트워크, 스토리지

TrueNAS SCALE ZFS 성능 최적화를 위한 하드웨어별 전략을 한눈에 볼 수 있는 요약 인포그래픽입니다.

마무리하며: 나만의 최적화를 찾아서

TrueNAS SCALE ZFS 성능 최적화는 단순히 비싼 하드웨어를 때려 박는다고 끝나는 문제가 아닙니다. 자신의 사용 패턴과 예산에 맞춰 가장 큰 병목 구간을 찾아 해결하는 것이 정말 중요해요. 저도 처음엔 뭐가 문제인지 몰라 무작정 SSD를 사기도 하고, RAM을 증설하기도 했었죠. 하지만 벤치마크 툴을 사용해서 정확히 어떤 부분이 부족한지 확인하고, 그에 맞는 하드웨어나 설정을 변경하는 과정을 통해 훨씬 만족스러운 결과를 얻을 수 있었습니다.

이 글에서 소개한 내용들이 여러분의 TrueNAS SCALE 환경을 더 빠르고 효율적으로 만드는 데 도움이 되었으면 좋겠네요. 삽질은 인프라 엔지니어의 숙명이지만, 그 삽질이 누군가에게는 귀한 경험이 될 수 있다는 걸 알기에 오늘도 이렇게 키보드를 두드립니다. 다음번에는 TrueNAS SCALE에서 컨테이너와 가상 머신을 더 효율적으로 운영하는 방법에 대해 다뤄볼까 합니다. 기대해주세요!