내 새 NAS에는 5개의 디스크가 있습니다. 그들은 모두 같은 모델입니다.
sde는 마더보드의 컨트롤러에 연결됩니다. sda-sdd는 raid 컨트롤러에 있습니다.
"pv /dev/sd[cde]"를 병렬로 실행합니다.
Device rkB/s wkB/s f_await aqu-sz %util
sdc 161536.00 0.00 0.00 1.50 99.60
sdd 175104.00 0.00 0.00 1.41 98.80
sde 170880.00 0.00 0.00 1.66 100.00
이것이 내가 기대했던 것입니다.
"pv /dev/sd[ae]"를 병렬로 실행:
Device rkB/s wkB/s f_await aqu-sz %util
sda 147456.00 0.00 0.00 1.15 100.00
sdb 142848.00 0.00 0.00 1.74 100.00
sdc 147840.00 0.00 0.00 1.13 99.60
sdd 149120.00 0.00 0.00 1.15 99.60
sde 107008.00 0.00 0.00 1.34 96.40
최대값이 175MB/s에서 150MB/s로 변경된 것은 아마도 버스를 공유하고 해당 버스가 최대 총 대역폭을 갖기 때문일 것입니다.
그러나 sde는 30% 더 느리다는 점에 유의하십시오.
sda-sdd의 경우 Renice 'pv'는 19입니다(sde의 'pv'는 0으로 유지).
Device rkB/s wkB/s f_await aqu-sz %util
sda 137856.00 0.00 0.00 1.04 98.00
sdb 140032.00 0.00 0.00 1.06 99.20
sdc 132480.00 0.00 0.00 1.00 98.80
sdd 132608.00 0.00 0.00 1.02 97.60
sde 140672.00 0.00 0.00 1.73 100.00
이제 sde는 다른 것과 동일한 수준에 있습니다. 이는 일반적인 상황(재조정 없이)에서 예상되는 것입니다.
유휴 시스템에서는 각 드라이브가 초당 80회 검색됩니다(예상대로).
# parallel --tag -j0 -k --ll seekmaniac ::: /dev/sd[a-e]
/dev/sda / 81 seeks per second
/dev/sdb / 81 seeks per second
/dev/sdc / 80 seeks per second
/dev/sdd / 81 seeks per second
/dev/sde / 82 seeks per second
"pv"가 실행 중일 때(위와 같이):
# parallel --tag -j0 -k --ll seekmaniac ::: /dev/sd[a-e]
/dev/sda o 15 seeks per second
/dev/sdb o 13 seeks per second
/dev/sdc o 15 seeks per second
/dev/sdd o 19 seeks per second
/dev/sde o 64 seeks per second
sde가 다른 것보다 어떻게 더 많은 검색을 제공하는지 확인하세요.
내 생각에 이 동작은 sde가 다른 컨트롤러에 있기 때문에 발생하는 것 같습니다.
하지만 컨트롤러가 이러한 효과를 어떻게 얻을 수 있습니까?
이 행동을 어떻게 설명해야 할까요?
편집하다
내가 찾은 차이점 검색(sda=sdb=sdc=sdd):
# diff <(cd /sys/block/sde/; grep . queue/*) <(cd /sys/block/sda/; grep . queue/*)
19c19
< queue/max_segments:64
---
> queue/max_segments:168
23c23
< queue/nr_requests:2
---
> queue/nr_requests:64
34c34
< queue/write_cache:write through
---
> queue/write_cache:write back
내가 하고 있는 일이 읽기뿐이라면 쓰기 캐시는 관련성이 없을 것 같습니다.
답변1
이것은 단지 추측일 뿐입니다. 누군가가 이 추측을 증명하거나 반증할 수 있기를 바랍니다.
sde 컨트롤러의 max_segments=64 및 nr_requests=2입니다.
sda 컨트롤러에는 max_segments=168 및 nr_requests=64가 있습니다.
sde에서 데이터를 가져오기 위해 CPU의 작업량이 더 크다고 가정합니다. 대기열 용량이 작으면 CPU는 지속적으로 대기열을 지워야 하지만, 용량이 더 큰 대기열은 주기적으로만 지워야 합니다.
CPU가 대기열을 지울 기회를 놓치면 대기열이 가득 차고 디스크가 정지됩니다. 대기열 크기가 더 작으면 평균적으로 더 자주 발생합니다.
NAS의 CPU는 저가형의 느린 CPU입니다.
아마도 이것이 읽기 성능의 30% 차이를 설명하는 것 같습니다.
검색의 차이도 유사한 추론으로 설명될 수 있습니까?
대기열 용량이 낮으면 CPU는 새 조회를 예약하는 것이 더 빠르다는 것을 알게 됩니다. 용량이 더 높으면 CPU는 새 조회를 예약할 수 있는지 확인하기 전에 대기열을 지워야 합니다.
다시 말하지만 나는 분명히 문제에 빠졌습니다. 솔직히 그런 일이 일어나고 있는지 모르겠습니다.