목적별 스토리지 애플리케이션에 대한 최적의 ARC 및 L2ARC 설정

목적별 스토리지 애플리케이션에 대한 최적의 ARC 및 L2ARC 설정

3개의 ZFS 풀을 실행하는 서버를 구성 중입니다. 그 중 2개는 특정 목적에 맞게 사용되었으며 기본 권장 사항이 해당 풀에 최적화되지 않은 것 같습니다. 네트워킹은 듀얼 10gbit 어댑터로 촉진됩니다.

풀 1은 대용량 파일 저장소로, 거의 쓰거나 읽지 않는 원시 비디오 데이터와 가끔 백업도 포함되어 있습니다. 해당 풀에서 무엇이든 캐싱하는 것은 전혀 의미가 없습니다. 처음부터 끝까지 한 번의 스윕으로 읽는 고대역폭 데이터이기 때문에 풀에서 무엇이든 캐싱하는 것은 완전한 메모리 낭비가 됩니다. 지연 시간은 그다지 문제가 되지 않으며, 데이터 압축률이 높아 대역폭이 충분합니다. 풀은 z2 모드의 HDD 8개로 구성되며, 사용 가능한 용량은 24TB입니다.

풀 2는 압축된 비디오 프레임 저장소입니다. 이 콘텐츠의 일부는 비디오 프로젝트를 구성할 때 자주 읽혀집니다. 자주 사용되는 데이터의 비율은 일반적으로 서버에 있는 총 RAM 용량보다 높으며, 낮은 대기 시간 요구 사항이 있지만 매우 낮지는 않지만 대역폭이 더 중요합니다. 풀은 z1의 HDD 3개, 가용 용량 8TB, L2ARC용 1TB NVME SSD로 구성됩니다.

풀 3은 로컬 저장소가 아닌 여기에서 소프트웨어를 부팅하고 실행하는 여러 컴퓨터 시스템의 저장소로 사용되는 일반 저장소입니다. 여러 시스템과 기본 시스템 스토리지를 서비스해야 하기 때문에 대기 시간 및 대역폭에 대한 요구 사항이 가장 높습니다. 이 풀은 주로 읽혀지며 쓰기는 클라이언트 시스템이 수행하는 작업으로 제한됩니다. 풀은 z1 모드의 SATA SSD 3개로 구성되며, 사용 가능한 용량은 1TB입니다.

최적화하려는 의도는 세 번째 풀의 ARC 크기를 최대화하기 위해 처음 두 풀의 ARC 크기를 최소화하는 것과 관련이 있습니다.

풀 1은 캐싱으로 인한 이점이 전혀 없습니다. 그렇다면 설정할 수 있는 최소 안전 ARC 양은 얼마입니까?

풀 2는 ARC의 이점을 누릴 수 있지만 L2ARC는 목적에 맞게 충분히 빠르며 드라이브 용량이 1TB이므로 실제로 그럴 가치는 없습니다. 이상적으로는 이 볼륨에 ARC를 사용하지 않고 L2ARC의 전체 테라바이트를 사용할 수 있다면 기쁘겠지만 L2ARC 헤더 데이터에는 최소한 일부 ARC가 필요한 것 같습니다.

따라서 1TB의 L2ARC 용량과 64k의 풀 레코드 크기를 고려하면 1tb / 64kb * 70b는 ~0.995gb를 제공합니다. 이는 해당 풀의 ARC를 1GB로 안전하게 제한할 수 있다는 의미입니까? 아니면 더 필요할까요?

ARC에는 읽기 캐시와 L2ARC를 처리하기 위한 정보가 모두 포함되어 있는 것 같습니다. 따라서 RAM에 실제 데이터를 캐싱하는 것보다 더 큰 L2ARC를 관리하는 데 중점을 두는 옵션이 필요한 것 같습니다. 그리고 필요한 경우 이벤트 캐시 제거 정책이 일반적인 캐싱 계층 구조 정책을 따르지 않는 경우 ARC의 모든 캐시 제거가 L2ARC로 이동되도록 명령합니다.

내가 읽은 일반적인 권장 사항은 스토리지 1TB당 RAM 약 1GB를 제안합니다. 저는 스토리지 33TB당 RAM 32GB를 계획하고 있는데 거의 다 사용하고 있지만 L2ARC와 ARC의 경우 4~5:1로 부족합니다. 꽤 많이요. 목표는 풀 1 ARC를 가능한 한 낮게 줄이고 풀 2 ARC를 필요한 만큼만 줄여 L2ARC의 전체 1TB를 활용하여 풀 3의 ARC에 사용 가능한 RAM을 최대화하는 것입니다. .

답변1

먼저 풀 n.2 및 n.3의 레이아웃을 다시 고려해 보시기 바랍니다. 3방향 미러는 낮은 대기 시간이나 높은 대역폭을 제공하지 않습니다. L2ARC용 고가의 1TB NVMe 디스크(32GB ARC가 작기 때문에 균형이 맞지 않음) 대신 RAID10 방식으로 더 많은 7200RPM 디스크를 사용하거나 더 저렴하지만 안정적인 SSD(예: Samsung 850)를 사용합니다. Pro/Evo 또는 Crucial MX500).

최소한 모든 디스크를 단일 RAID10 풀(SSD L2ARC 포함)에 배치하고 여러 데이터세트를 통해 단일 풀을 분할할 수 있습니다.

primarycache즉, 및 옵션을 사용하여 데이터 세트별로 ARC/L2ARC를 사용하는 방법을 지정할 수 있습니다 secondarycache.

  • zfs set primarycache=none <dataset1> ; zfs set secondarycache=none <dataset1>비활성화됩니다어느데이터 세트에 대한 ARC/L2ARC 캐싱. zfs set logbias=throughput <dataset1>쓰기 작업 중 대기 시간 대신 처리량 권한을 부여할 수도 있습니다 .
  • zfs set primarycache=metadata <dataset2>두 번째 데이터 세트에 대해 메타데이터 전용 캐싱을 활성화합니다. L2ARC는 ARC에 의해 공급됩니다. 즉, ARC가 메타데이터만 캐싱하는 경우 L2ARC에서도 마찬가지입니다.
  • 세 번째 데이터 세트에 대해서는 ARC/L2ARC 기본 옵션을 그대로 둡니다.

zfs_arc_max마지막 으로 ARC용 RAM의 50% 이상(기본값)을 사용하도록 ZFS 인스턴스를 설정할 수 있습니다(모듈 매뉴얼 페이지)

관련 정보