Linux에서 JBOD 성능에 대한 SAS 다중 경로 개선


10

Linux를 사용하는 일부 Sun 하드웨어에서 스토리지 설정을 최적화하려고합니다. 어떤 생각이라도 대단히 감사하겠습니다.

우리는 다음과 같은 하드웨어를 가지고 있습니다 :

  • 썬 블레이드 X6270
  • 2 * LSISAS1068E SAS 컨트롤러
  • 1TB 디스크가있는 2 개의 Sun J4400 JBOD (JBOD 당 24 개의 디스크)
  • 페도라 코어 12
  • FC13의 2.6.33 릴리스 커널 (FC12의 최신 2.6.31 커널을 사용해도 동일한 결과)

SAS 하드웨어에 대한 데이터 시트는 다음과 같습니다.

http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf

PCI Express 1.0a, 8x 레인을 사용하고 있습니다. 레인 당 250MB / 초의 대역폭으로 SAS 컨트롤러 당 2000MB / 초를 수행 할 수 있어야합니다.

각 컨트롤러는 포트 당 3Gb / sec를 수행 할 수 있으며 2 개의 4 포트 PHY가 있습니다. 컨트롤러에서 JBOD로 두 PHY를 연결합니다. 따라서 JBOD와 컨트롤러 사이에는 2 개의 PHY * 4 개의 SAS 포트 * 3Gb / sec = 24Gb / sec의 대역폭이 있으며 이는 PCI Express 대역폭보다 더 큽니다.

쓰기 캐싱을 사용하고 큰 쓰기를 수행 할 때 각 디스크는 약 80MB / 초 (디스크 시작 부근)를 유지할 수 있습니다. 디스크 24 개로 JBOD 당 1920MB / 초를 수행 할 수 있습니다.

다중 경로 {
  rr_min_io 100
  UID 0
  path_grouping_policy 멀티 버스
  장애 복구 매뉴얼
  path_selector "라운드 로빈 0"
  rr_weight 우선 순위
  별명 somealias
  no_path_retry 큐
  모드 0644
  여자 0
  wwid somewwid
}

rr_min_io에 50, 100, 1000의 값을 시도했지만 별 차이가없는 것 같습니다.

다양한 rr_min_io와 함께 dd를 시작하는 사이에 약간의 지연을 추가하여 모두 동일한 PHY를 동시에 쓰는 것을 막으려 고했지만 아무런 차이가 없었으므로 I / O가 올바르게 확산되고 있다고 생각합니다.

/ proc / interrupts에 따르면 SAS 컨트롤러는 "IR-IO-APIC-fasteoi"인터럽트 체계를 사용하고 있습니다. 어떤 이유로 머신의 코어 # 0 만 이러한 인터럽트를 처리합니다. 각 SAS 컨트롤러의 인터럽트를 처리하기 위해 별도의 코어를 할당하여 성능을 약간 향상시킬 수 있습니다.

에코 2> / proc / irq / 24 / smp_affinity
에코 4> / proc / irq / 26 / smp_affinity

dd를 사용하여 디스크에 쓰면 코어 # 4에 의해 처리되는 "함수 호출 인터럽트"(무엇인지 알 수 없음)가 생성되므로 다른 프로세스도이 코어에서 제외시킵니다.

48 dd (각 디스크 당 하나씩)를 실행하여 인터럽트를 처리하지 않는 코어에 할당합니다.

taskset -c somecore dd if = / dev / zero of = / dev / mapper / mpathx oflag = direct bs = 128M

oflag = direct는 모든 종류의 버퍼 캐시가 관여하지 않도록합니다.

내 코어 중 어느 것도 최대로 보이지 않습니다. 인터럽트를 다루는 코어는 대부분 유휴 상태이며 다른 모든 코어는 예상대로 I / O를 기다리고 있습니다.

Cpu0 : 0.0 % us, 1.0 % sy, 0.0 % ni, 91.2 % id, 7.5 % wa, 0.0 % hi, 0.2 % si, 0.0 % st
Cpu1 : 0.0 % us, 0.8 % sy, 0.0 % ni, 93.0 % id, 0.2 % wa, 0.0 % hi, 6.0 % si, 0.0 % st
Cpu2 : 0.0 % us, 0.6 % sy, 0.0 % ni, 94.4 % id, 0.1 % wa, 0.0 % hi, 4.8 % si, 0.0 % st
Cpu3 : 0.0 % us, 7.5 % sy, 0.0 % ni, 36.3 % id, 56.1 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu4 : 0.0 % us, 1.3 % sy, 0.0 % ni, 85.7 % id, 4.9 % wa, 0.0 % hi, 8.1 % si, 0.0 % st
Cpu5 : 0.1 % us, 5.5 % sy, 0.0 % ni, 36.2 % id, 58.3 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu6 : 0.0 % us, 5.0 % sy, 0.0 % ni, 36.3 % id, 58.7 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu7 : 0.0 % us, 5.1 % sy, 0.0 % ni, 36.3 % id, 58.5 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu8 : 0.1 % us, 8.3 % sy, 0.0 % ni, 27.2 % id, 64.4 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu9 : 0.1 % us, 7.9 % sy, 0.0 % ni, 36.2 % id, 55.8 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
CPU10 : 0.0 % us, 7.8 % sy, 0.0 % ni, 36.2 % id, 56.0 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
CPU11 : 0.0 % us, 7.3 % sy, 0.0 % ni, 36.3 % id, 56.4 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Cpu12 : 0.0 % us, 5.6 % sy, 0.0 % ni, 33.1 % id, 61.2 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
CPU13 : 0.1 % us, 5.3 % sy, 0.0 % ni, 36.1 % id, 58.5 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
CPU14 : 0.0 % us, 4.9 % sy, 0.0 % ni, 36.4 % id, 58.7 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
CPU15 : 0.1 % us, 5.4 % sy, 0.0 % ni, 36.5 % id, 58.1 % wa, 0.0 % hi, 0.0 % si, 0.0 % st

이 모든 것을 감안할 때 "dstat 10"을 실행하여보고 된 처리량은 2200-2300MB / 초 범위입니다.

위의 수학을 감안할 때 2 * 1920 ~ = 3600 + MB / 초 범위의 것을 기대합니다.

누락 된 대역폭이 어디로 갔는지 아는 사람이 있습니까?

감사!


LSI SAS 컨트롤러 캐시가 Write-Through로 설정되어 있습니까? (큰 순차적 워크로드의 경우 쓰기가 느려집니다). bs = 1M과 같이 dd에 대해 더 작은 bs로 테스트하고 싶을 수도 있습니다.
Brian

답변:


1

잘 준비된 질문 :)

나는 스피드 스피드 맨이고 나는 당신이 정직하게 돈을 벌고 있다고 생각합니다. 처리량은 처리량보다 낮을 것으로 예상했지만 절반은 미미하고 예상되는 비 효율성이 증가한다고 생각했습니다. 예를 들어, PCIe 버스가 항상 100 %에 도달하기가 매우 어려우므로 전체 90 %의 낮은 속도를 가정하는 것이 좋습니다. 지터가 주어지면 PHY가 항상 100 % '공급'되지 않으므로 캐시, 디스크, 비 coarraced 인터럽트, IO 스케줄링 등에서 약간의 손실이 발생합니다. 경미한 비 효율성 시간 경미한 비 효율성 시간 ... 등으로, 5-10 % 이상의 예상되는 비 효율성 자체가됩니다. HP DL 서버가 W2K3을 사용하여 MSA SAS 상자와 통신 한 다음 NLB가되는 것을 보았습니다. ' 여러 개의 NIC에 대해 ed-실망 스럽지만 이해할 만합니다. 어쨌든 내 2c입니다. 죄송합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.