ZFS 풀 느린 순차 읽기


10

이 문제에 대한 관련 질문이 있지만 너무 복잡하고 커져서 문제를 NFS와 로컬 문제로 분리하기로 결정했습니다. 나는 또한 zfs-discuss 메일 링리스트에서 이것에 대해 많은 성공을 요구하지 않았다.

동일한 서버의 NFS / CIFS 디렉토리 간 느린 복사

개요 : 설정 방법 및 예상 사항

  1. 4 개의 디스크가있는 ZFS 풀이 있습니다. 2TB RED는 스트라이프 된 2 개의 미러로 구성됩니다 (RAID 10). Linux에서는 zfsonlinux입니다. 캐시 또는 로그 장치가 없습니다.
  2. 미러간에 데이터 균형 조정 (ZFS에 중요)
  3. 각 디스크는 147MB / sec에서 병렬로 읽을 수 있으며 (raw w / dd), 처리량은 588MB / sec입니다.
  4. 비슷한 4TB RED 디스크의 벤치 마크를 기준으로 각 디스크에서 약 115MB / 초의 쓰기, 138MB / 초의 읽기 및 50MB / 초의 순차 데이터 다시 쓰기를 기대합니다. 요즘 어떤 디스크도 그렇게 할 수 있기 때문에 100MB / sec 이상의 읽기 또는 쓰기를 기대합니다.
  5. 로드하거나 순차적 데이터를 쓸 때 4 개의 디스크 모두에서 100 % IO 사용률을 볼 것으로 생각했습니다. 그리고 디스크는 100 % 사용률로 100MB / sec 이상을 차지합니다.
  6. 풀이 단일 디스크에서 2 배속 쓰기, 2 배속 다시 쓰기 및 4 배속 읽기 성능을 제공한다고 생각했습니다. 틀렸습니까?
  7. NEW 같은 풀의 ext4 zvol이 ZFS와 거의 같은 속도 일 것이라고 생각했습니다.

내가 실제로 얻는 것

수영장의 읽기 성능이 예상보다 높지 않습니다.

며칠 전부터 풀에서 보니 ++ 벤치 마크

버전 1.97 ------ 순차 출력 -------순차 입력--랜덤-
동시성 1 -Chr 당 ---- 블록--다시 쓰기 -Chr 당 ---- 블록--찾기-
기계 크기 K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP / 초 % CP
igor 63G 99 99232132 47118787 27336 97 257072 22 92.7 6

zpool에서 자체의 단일 4TB RED 드라이브의 bonnie ++

버전 1.97 ------ 순차 출력 -------순차 입력--랜덤-
동시성 1 -Chr 당 ---- 블록--다시 쓰기 -Chr 당 ---- 블록--찾기-
기계 크기 K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP / 초 % CP
igor 63G 101 99 115288 30 49781 14326 97138250 13 111.6 8

이에 따르면 읽기 및 다시 쓰기 속도는 단일 4TB RED 드라이브 (두 배)의 결과에 따라 적절합니다. 그러나 필자가 기대 한 읽기 속도는 약 550MB / 초 (4TB 드라이브 속도의 4 배)였으며 적어도 약 400MB / 초가되기를 바랍니다. 대신 나는 약 260MB / 초를보고있다.

아래 정보를 수집하면서 지금 바로 수영장에서 보니 ++ . 이전과 동일하지 않으며 아무것도 변경되지 않았습니다.

버전 1.97 ------ 순차 출력 -------순차 입력--랜덤-
동시성 1 -Chr 당 ---- 블록--다시 쓰기 -Chr 당 ---- 블록--찾기-
기계 크기 K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP K / 초 % CP / 초 % CP
igor 63G 103 99 207518 43108810 24342 98302350 26 256.4 18

쓰기 중 zpool iostat 나에게 괜찮은 것 같습니다.

                                                 용량 작업 대역폭
풀 할당량 무료 읽기 쓰기 읽기 쓰기
-------------------------------------------- ------ ---- ----- ----- ----- -----
수영장 2 1.23T 2.39T 0 1.89K 1.60K 238M
  거울 631G 1.20T 0 979 1.60K 120M
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--0 1007 1.60K 124M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--975120120M
  거울 631G 1.20T 0 953 0 117M
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--0 1.01K 0 128M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--0 953 0 117M

다시 쓰기 중 zpool iostat 나에게 괜찮은 것 같아요 .

                                                 용량 작업 대역폭
풀 할당량 무료 읽기 쓰기 읽기 쓰기
-------------------------------------------- ------ ---- ----- ----- ----- -----
수영장 2 1.27T 2.35T 1015923125M 101M
  거울 651G 1.18T 505 465 62.2M 51.8M
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--198438 24.4M 51.7M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--306384 37.8M 45.1M
  거울 651G 1.18T 510457 63.2M 49.6M
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--304 371 37.8M 43.3M
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--206423 25.5M 49.6M

내가 무슨 일인지 궁금해

읽기 중 zpool iostat

                                                 용량 작업 대역폭
풀 할당량 무료 읽기 쓰기 읽기 쓰기
-------------------------------------------- ------ ---- ----- ----- ----- -----
수영장 2 1.27T 2.35T 2.68K 32 339M 141K
  거울 651G 1.18T 1.34K 20169M 90.0K
    ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--748 9 92.5M 96.8K
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--623 10 76.8M 96.8K
  거울 651G 1.18T 1.34K 11170M 50.8K
    ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--774 5 95.7M 56.0K
    ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--599 6 74.0M 56.0K

동일한 읽기 작업 중 iostat -x IO %가 100 %가 아닌 방법에 유의하십시오.

장치 : rrqm / s wrqm / sr / sw / s rkB / s wkB / s avgrq-sz avgqu-sz await r_await w_await svctm % util
sdb 0.60 0.00 661.30 6.00 83652.80 49.20 250.87 2.32 3.47 3.46 4.87 1.20 79.76
sdd 0.80 0.00 735.40 5.30 93273.20 49.20 251.98 2.60 3.51 3.51 4.15 1.20 89.04
sdf 0.50 0.00 656.70 3.80 83196.80 31.20 252.02 2.23 3.38 3.36 6.63 1.17 77.12
sda 0.70 0.00 738.30 3.30 93572.00 31.20 252.44 2.45 3.33 3.31 7.03 1.14 84.24

zpool 및 테스트 데이터 세트 설정 :

  • 한 번 꺼져
  • 압축이 해제되었습니다
  • 교대는 0입니다 (자동 감지-이해하면 괜찮습니다)
  • zdb에 따르면 디스크는 모두 교대
  • 모듈-옵션 zfs zvol_threads = 32 zfs_arc_max = 17179869184
  • 동기화 = 표준

편집-2015 년 10 월 30 일

좀 더 시험해 봤어

  • 데이터 셋 bonnie ++ w / recordsize = 1M = 226MB 쓰기, 392MB 읽기가 훨씬 우수
  • 데이터 세트 dd w / record size = 1M = 260MB write, 392MB read 훨씬 더 잘
  • zvol w / ext4 dd bs = 1M = 128MB 쓰기, 107MB 읽기가 왜 그렇게 느립니까?
  • 데이터 세트 2 프로세스 병렬 = 227MB 쓰기, 396MB 읽기
  • dd direct io는 데이터 세트와 zvol에서 다르지 않습니다.

레코드 크기가 커지면 성능이 훨씬 좋아집니다. 풀의 거의 모든 파일은 1MB를 넘습니다. 그래서 그대로 두겠습니다. 디스크는 여전히 100 % 사용률을 얻지 못하므로 디스크 속도가 훨씬 빠를 지 궁금합니다. 그리고 이제 zvol 성능이 왜 그렇게 가벼운 지 궁금합니다.

의견 / 응답에 요청 된 정보를 제공해 드리겠습니다. 내 다른 질문에 게시 된 많은 정보가 있습니다 . 동일한 서버의 NFS / CIFS 디렉토리간에 느린 복사

나는 단지 무언가를 이해하지 못하고 이것이 전혀 문제가되지 않을 것이라는 것을 완전히 알고 있습니다. 미리 감사드립니다.

그것은 명확하게하기 위해, 질문은 : 왜는 ZFS가 빠른 속도로 내가 예상대로 풀 아닌가요? 그리고 다른 문제가 있습니까?


1
튜닝 없음, 의심스러운 것 같습니다 ... 디스크의 어시스턴트를 조정 했습니까? zfs.conf 설정이 있습니까? 시간이 켜져 있습니까? 이상한 동기화 설정이 있습니까?
ewwhite

@ewwhite 질문에 세부 사항을 추가했습니다.
Ryan Babchishin

다음을 참조하십시오 : tomshardware.com/reviews/red-wd20efrx-wd30efrx-nas,3248-5.html WD Red 드라이브에는 심하게 탐색하는 시간이 있습니다. 그들은 잘 스트리밍하지만 실제 사용 환경에서는 탐색해야하며 IO 통계는 탐색 시간이 성능에 거의 영향을 줄 정도로 충분한 IO 작업 / 초를 보여줍니다. zvol을 만들고 dd어떤 종류의 성능을 얻는 지 사용하십시오. 캐싱의 이중 버퍼링이 성능에 영향을 줄 수있는 스트리밍 속도에 도달 할 때 직접 IO를 시도 할 수도 있습니다. FWIW, 이론적 총 원시 4 디스크 읽기 성능의 3/4이 좋습니다.
Andrew Henle

(공간이 부족합니다.) 또한 단일 스레드 IO 작업으로는 디스크를 완전히 사용하기에 충분하지 않은 디스크가 충분합니다. 그것은 당신의 %util숫자를 설명 할 수 있습니다.
Andrew Henle

@AndrewHenle 감사합니다. 모든 것이 매우 합리적으로 들립니다. 이제 살펴 보겠습니다.
Ryan Babchishin

답변:


10

나는 기대했던 숫자에 매우 가까운 속도를 얻었습니다.

400MB / sec 을 찾고 392MB / sec을 관리 했습니다 . 그래서 나는 그것이 문제가 해결되었다고 말합니다. 나중에 캐시 장치를 추가하면서 458MB / sec의 읽기를 관리 했습니다 (캐시 된 캐시).

1. 이것은 처음에 ZFS 데이터 세트 recordsize값을1M

zfs set recordsize=1M pool2/test

이 변경으로 인해 디스크 활동이 줄어들 기 때문에보다 효율적인 대규모 동기 읽기 및 쓰기가 가능합니다. 정확히 내가 요구 한 것.

변경 후 결과

  • 보니 ++ = 226MB 쓰기, 392MB 읽기
  • dd = 260MB 쓰기, 392MB 읽기
  • 병렬로 2 개의 프로세스 = 227MB 쓰기, 396MB 읽기

2. 캐시 장치 (120GB SSD)를 추가 할 때 훨씬 더 잘 관리했습니다. 쓰기 속도가 느리다. 왜 그런지 모르겠다.

Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
igor            63G           208325  48 129343  28           458513  35 326.8  16

캐시 장치의 트릭 l2arc_noprefetch=0/etc/modprobe.d/zfs.conf 에 설정 되었습니다 . ZFS는 스트리밍 / 순차 데이터를 캐시 할 수 있습니다. 캐시 장치가 내 어레이와 같은 어레이보다 빠른 경우에만이 작업을 수행하십시오.

데이터 세트의 레코드 변경으로 인한 이점을 얻은 후 zvol 성능 저하를 처리하는 비슷한 방법이라고 생각했습니다.

나는을 사용하여 좋은 성능을 얻었음을 언급하면서 심한 사람들을 만났 volblocksize=64k으므로 시도했습니다. 불운.

zfs create -b 64k -V 120G pool/volume

그러나 나는 그 ext4에 같은 RAID에 대한 지원 옵션을합니다 (내가 함께 테스트 된 파일 시스템) 읽기 stridestripe-width내가 전에 사용한 적이 없으니까. 그래서이 사이트를 사용하여 필요한 설정을 계산했습니다 : https://busybox.net/~aldot/mkfs_stride.html 그리고 zvol을 다시 포맷했습니다.

mkfs.ext3 -b 4096 -E stride=16,stripe-width=32 /dev/zvol/pool/volume

나는 도망 bonnie++간단한 벤치 마크를 수행하고 결과는 우수했다. 나는 불행히도 나에게 결과를 얻지 못했지만, 내가 기억할 때 쓰기 속도는 5-6 배 이상 빠릅니다. 다시 벤치마킹하면이 답변을 다시 업데이트하겠습니다.


1
거의 1 년 후 다시 와서 자세한 답변을 작성하여 추가 +1을 줄 수 있다면 그렇게하겠습니다. 감사!
Jed Daniels

0

RAID1 (및 RAID10)이 제공하는 읽기 성능 향상을 과장합니다. 요점은 2 웨이 미러링 이 단일 디스크의 읽기 속도 / IOP 를 최대 2 배까지 높일 수 있지만 실제 성능은 1x-2x 사이 일 수 있다는 것입니다.

예를 들어 설명하겠습니다. 각 디스크가 100MB / s (순차) 및 200 IOPS를 지원하는 양방향 미러 시스템을 상상해보십시오. 큐 깊이가 1 (최대 하나의 단일, 미해결 요청) 인 경우이 어레이는 단일 디스크에 비해 이점 이 없습니다 . RAID1은 IO 요청을 두 개의 디스크 큐에서 분할 하지만 단일 요청을 두 개의 디스크로 분할 하지는 않습니다 (최소한, 내가 본 구현은 이러한 방식으로 작동합니다). 반면에 IO 대기열이 더 큰 경우 (예 : 미해결 요청이 4/8 인 경우) 총 디스크 처리량은 단일 디스크보다 훨씬 높습니다.

RAID0에 대해 비슷한 점을 수행 할 수 있지만이 경우 평균 개선 사항을 결정하는 것은 대기열 크기뿐만 아니라 IO 요청 크기의 기능이기도합니다 . 평균 IO 크기가 청크 크기보다 작 으면 스트라이프 되지 않습니다 두 개 이상의 디스크에 있지만 하나의 디스크로 제공됩니다. 증가 된 Bonnie ++ 레코드를 사용한 결과는 이러한 정확한 동작을 보여줍니다. 스트라이핑은 더 큰 IO 크기로 인해 큰 이점을 얻습니다.

이제 RAID10 어레이에서 두 개의 RAID 레벨을 결합 해도 선형 성능 스케일링으로 이어지지 는 않지만 상한선 을 설정합니다. 여러 dd / bonnie ++ 인스턴스를 실행하거나 fioIO 대기열을 직접 조작 하는 데 사용 하면 IO 배열에보다 완전한 방식으로 세금을 부과하기 때문에 원래 예상과 더 일치하는 결과를 얻을 것이라고 확신합니다 ( 단일 순차 IO 요청 만로드하는 대신 여러 개의 순차 / 임의 IO 요청을 여러 번 수행).


내 기대는 400MB / sec와 거의 동일합니다. 초당 392MB를 얻습니다. 합리적인 것 같습니다. 매우 합리적입니다. 또한 여러 개의 dd 및 bonnie ++ 프로세스 를 병렬로 실행했으며 성능이 전혀 향상되지 않았습니다. zvol 성능이 왜 그렇게 좋지 않은지 설명하지 않았습니다.
Ryan Babchishin

큰 레코드 크기 (> = 1MB / s)를 가진 Bonnie ++ 만 사용하면 392MB / s를 얻을 수 있으며 그 이유를 설명했습니다. ZVOL을 통한 EXT4는 테스트 한 적이없는 구성이므로 다른 사람들이 주석으로 남겨 두었습니다.
shodanshok
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.