Linux의 ZFS가 캐시에서 읽지 못하는 이유는 무엇입니까?

Linux의 ZFS가 캐시에서 읽지 못하는 이유는 무엇입니까?

읽기 속도가 약 40MB/초인 단일 USB 연결 4TB 회전 디스크가 포함된 테스트 zpool을 설정했습니다.

이 디스크의 캐시로 설정된 4개의 ~300GB 고속 SATA2 내부 SSD가 있습니다. 이 L2ARC에서 약 900MB/초를 읽을 수 있습니다.

이 풀에서 대부분 정적인 400GB 데이터세트를 읽고 있습니다.

시스템에는 200GB 이상의 사용 가능한 메모리가 있으며 우리 목적에 따라 1500MB/초 이상으로 실행되는 것으로 생각됩니다.

Every 1.0s: zpool iostat -y -v 1 1 ; zpool status -v                                                las2: Tue Oct 16 20:20:07 2018

                                                      capacity     operations     bandwidth
pool                                                alloc   free   read  write   read  write
--------------------------------------------------  -----  -----  -----  -----  -----  -----
storage                                              417G  3.22T    239      2  29.7M   132K
  usb-Seagate_M3_Portable_NM12QHQF-0:0-part1         417G  3.22T    239      2  29.7M   132K
cache                                                   -      -      -      -      -      -
  ata-INTEL_SSDSC2BA400G3_BTTV41450D92400HGN-part3  52.8G   291G     11      0   927K   128K
  ata-INTEL_SSDSC2BA400G3_BTTV423000XA400HGN-part3  52.9G   291G     13      0  1.48M      0
  ata-INTEL_SSDSC2BA400G3_BTTV423406FG400HGN-part3  52.7G   291G      8      0   324K      0
  ata-INTEL_SSDSC2BA400G3_BTTV423406G6400HGN-part3  52.9G   291G      5      0   336K      0
--------------------------------------------------  -----  -----  -----  -----  -----  -----
  pool: storage
 state: ONLINE
  scan: scrub repaired 0B in 1h56m with 0 errors on Sun Oct 14 02:20:56 2018
config:

        NAME                                                STATE     READ WRITE CKSUM
        storage                                             ONLINE       0     0     0
          usb-Seagate_M3_Portable_NM12QHQF-0:0-part1        ONLINE       0     0     0
        cache
          ata-INTEL_SSDSC2BA400G3_BTTV41450D92400HGN-part3  ONLINE       0     0     0
          ata-INTEL_SSDSC2BA400G3_BTTV423000XA400HGN-part3  ONLINE       0     0     0
          ata-INTEL_SSDSC2BA400G3_BTTV423406FG400HGN-part3  ONLINE       0     0     0
          ata-INTEL_SSDSC2BA400G3_BTTV423406G6400HGN-part3  ONLINE       0     0     0

errors: No known data errors

AIUI, 읽기는 시스템 메모리의 ARC에 캐시됩니다. 특정 수준의 "가득 참"에 도달하면 이 데이터는 L2ARC(1.1TB 고속 SSD)로 이동됩니다.

이 풀의 거의 일정한 디렉터리 중 하나에서 실행하면 tar -c . | pv > /dev/null기본 느린 HDD에서 읽는 속도인 약 40MB/초를 볼 수 있습니다.

문제는 나도 그것을 두 번째로 봤다는 것이다! 때로는 80-100MB/초까지 치솟기도 하지만 때로는 10MB/초로 떨어지는 경우도 있습니다. 나는 99%의 읽기가 메모리나 빠른 L2ARC에서 나올 것으로 예상합니다.

무엇을 제공합니까? 이 상자에는 256GB의 시스템 메모리가 있고 그 중 200GB 이상이 무료이므로 RAM 속도를 확인하고 싶습니다. 이것이 실패하면 수백 GB의 L2ARC가 사용되지 않은 상태로 유지됩니다.

내가 뭘 잘못했나요? 이 데이터를 매우 빠른 속도(>1GB/초)로 ARC에서 읽을 수 없는 이유는 무엇입니까? 이것이 가능하지 않다면 L2ARC(>500MB/초)에서 읽어보는 것은 어떨까요? 대부분의 제거된 시스템에서 40-80MB/초가 표시되는 이유는 무엇입니까?

Ubuntu bionic 18.04.1 x86_64 system.

Linux las2 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

zfs-auto-snapshot/now 1.2.4-1 all [installed,local]
zfs-zed/now 0.7.5-1ubuntu16.4 amd64 [installed,local]
zfsutils-linux/now 0.7.5-1ubuntu16.4 amd64 [installed,local]

답변1

여기에는 두 가지 문제가 있습니다.

첫째, 데이터 세트가 메모리에 맞지 않아 LRU(Least Recent Used)를 기준으로 제거됩니다. 이는 전체 데이터 세트를 실행한 후 처음부터 시작하면 찾고 있는 항목 중 어느 것도 ARC에 포함되지 않음을 의미합니다.

두 번째 문제는 L2ARC가 생각하는 대로 채워지지 않는다는 것입니다. ARC에서 데이터가 제거되면 채워지지만 채우기 속도가 제한됩니다. 기본 제한은 8MB/S로 두 번째 읽기에 약간의 영향을 미칠 것입니다. 이 문제를 해결하려면 "l2arc_write_max" 및 "l2arc_write_boost" ZFS 매개변수를 확인해야 한다고 생각합니다.

관련 정보