vSphere ESXi 5.5의 Linux VM에서 디스크 I / O 대기 시간이 크게 증가한 이유는 무엇입니까?


8

나는 혼란에 빠졌으며 다른 사람 이이 문제의 증상을 인식하기를 바랍니다.

하드웨어 : 새로운 Dell T110 II, 듀얼 코어 Pentium G850 2.9 GHz, 온보드 SATA 컨트롤러, 상자 안에 새 500GB 7200 RPM 케이블 연결된 하드 드라이브 1 개, 아직 내장되지 않은 다른 드라이브. RAID가 없습니다. 소프트웨어 : VMware ESXi 5.5.0 (빌드 1746018) + vSphere Client에서 새로운 CentOS 6.5 가상 머신. 2.5GB RAM이 할당되었습니다. 디스크는 CentOS가 디스크를 설정하는 방법, 즉 별도의 / home을 건너 뛰고 단순히 / 및 / boot를 갖는 것을 제외하고는 LVM 볼륨 그룹 내의 볼륨으로 제공했습니다. CentOS는 패치되어 있고 ESXi는 패치되어 있으며 최신 VMware 도구가 VM에 설치되어 있습니다. 시스템 사용자, 서비스 실행 없음, 디스크 파일 없음, OS 설치 없음 vSphere Client의 VM 가상 콘솔을 통해 VM과 상호 작용하고 있습니다.

더 나아 가기 전에, 내가 어느 정도 합리적으로 구성했는지 확인하고 싶었습니다. VM의 쉘에서 루트로 다음 명령을 실행했습니다.

for i in 1 2 3 4 5 6 7 8 9 10; do
  dd if=/dev/zero of=/test.img bs=8k count=256k conv=fdatasync
done

즉, dd 명령을 10 회 반복하면 매번 전송 속도가 인쇄됩니다. 결과는 어지럽다. 잘 시작됩니다.

262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.451 s, 105 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.4202 s, 105 MB/s
...

그러나이 중 7-8 이후에는

262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GG) copied, 82.9779 s, 25.9 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 84.0396 s, 25.6 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 103.42 s, 20.8 MB/s

30-45 분이라고 말하고 상당한 시간을 기다렸다가 다시 실행하면 다시 105MB / s로 돌아가고 몇 차례 (몇몇, 때로는 10+ 이상) 후에 ~ 20- 다시 25MB.

가능한 원인, 특히 VMware KB 2011861 에 대한 예비 검색을 기반으로 Linux i / o 스케줄러를 noop기본값 대신 " "로 변경했습니다 . cat /sys/block/sda/queue/scheduler효과가 있음을 나타냅니다. 그러나 이것이이 동작에 어떤 영향을 미쳤는지 알 수 없습니다.

vSphere 인터페이스에 디스크 대기 시간을 표시 하면 처리량이 적은 것으로 보고되는 시간 동안 1.2-1.5 에 이르는 높은 디스크 대기 시간이 표시 dd됩니다. (그렇습니다. 상황이 발생하는 동안 반응이 거의 없습니다.)

이 문제의 원인은 무엇입니까?

동일한 시스템에서 다른 두 개의 디스크를 추가 볼륨으로 구성했기 때문에 디스크 장애로 인한 것이 아니라는 점이 편안합니다. 처음에는 해당 볼륨에 문제가 있다고 생각했지만 / etc / fstab에서 볼륨을 주석 처리하고 재부팅 한 후 위에 표시된대로 /에서 테스트를 시도한 후 문제가 다른 곳에 있다는 것이 분명해졌습니다. ESXi 구성 문제 일 수 있지만 ESXi에 대한 경험이 많지 않습니다. 아마도 어리석은 일이지만 며칠 동안 여러 시간 동안 이것을 알아 내려고 시도한 후에 문제를 찾을 수 없으므로 누군가 나를 올바른 방향으로 가리킬 수 있기를 바랍니다.

(PS : 예,이 하드웨어 콤보가 서버로서 속도 상을받지 못한다는 것을 알고 있습니다.이 저급 하드웨어를 사용하고 단일 VM을 실행해야하는 이유가 있지만,이 질문에 대한 요점은 아니라고 생각합니다. 실제로 하드웨어 문제입니다.])

부록 # 1 : 답변과 같은 다른 답변을 읽으면 추가 oflag=direct할 수 dd있습니다. 그러나 결과 패턴에는 차이가 없습니다. 처음에는 많은 라운드에서 숫자가 더 높으면 20-25MB / s로 떨어집니다. (초기 절대 숫자는 50MB / s 범위에 있습니다.)

부록 # 2 : sync ; echo 3 > /proc/sys/vm/drop_caches루프에 추가 해도 전혀 차이가 없습니다.

부록 # 3 : 더 많은 변수를 취하기 위해, dd생성 된 파일이 시스템의 RAM 용량보다 더 크게 실행 됩니다. 새로운 명령은 dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct입니다. 이 명령 버전의 초기 처리량은 ~ 50MB / s입니다. 사물이 남쪽으로 가면 20-25 MB / s로 떨어집니다.

부록 # 4 : 다음은 iostat -d -m -x 1성능이 "좋은"동안 또 다른 "나쁜"경우에 다른 터미널 창에서 실행 된 결과입니다 . (이것이 진행되는 동안 나는 달리고있다 dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct.) 첫째, 일이 "좋은"일 때, 이것은 다음을 보여준다 :

여기에 이미지 설명을 입력하십시오

상황이 "나쁜"경우, 다음을 iostat -d -m -x 1보여줍니다.

여기에 이미지 설명을 입력하십시오

부록 # 5 : @ewwhite의 제안에 따라 tuned다른 프로파일과 함께 사용해 보았으며 시도했습니다 iozone. 이 부록에서는 다른 tuned프로파일이 dd위에서 설명한 동작 에 어떤 영향을 미치는지 실험 한 결과를보고합니다 . 나는에 대한 프로필을 변경 시도 virtual-guest, latency-performance그리고 throughput-performance, 다른 모든 동일하게 유지, 각 변경 후 재부팅 한 후마다 실행 dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct. 이전과 마찬가지로 상황이 양호하게 시작되고 여러 번 반복 된 실행이 dd동일한 성능 을 보여 주지만 10-40 실행 후 어느 시점에서 성능이 절반으로 떨어집니다. 다음으로을 사용했습니다 iozone. 이 결과는 더 광범위하므로 아래의 부록 # 6으로 넣습니다.

부록 # 6 : @ewwhite의 제안에 따라 iozone성능을 테스트 하고 설치했습니다 . 다른 tuned프로필에서 실행했으며 매우 큰 최대 파일 크기 (4G) 매개 변수를에 사용했습니다 iozone. (VM에는 2.5GB의 RAM이 할당되고 호스트에는 총 4GB가 있습니다.)이 테스트 실행에는 시간이 다소 걸렸습니다. FWIW에서 원시 데이터 파일은 아래 링크에서 사용할 수 있습니다. 모든 경우에 파일을 생성하는 데 사용 된 명령은 iozone -g 4G -Rab filename입니다.

다음은 내 요약입니다.

어떤 경우에는 이전 실행 후 재부팅했지만 다른 경우에는 재부팅하지 않았고로 iozone프로필을 변경 한 후 간단히 다시 실행 했습니다 tuned. 이것은 전체 결과에 명백한 차이를 보이지는 않았습니다.

tuned프로필이 특정 세부 사항에 영향을 미쳤지 만 다른 프로필 (내 눈에 잘 보이지 않는 눈에 보이지 않는) 은에 의해보고 된 광범위한 행동 에 영향을 미치지 않는 것으로 보입니다 iozone. 첫째, 놀랍게도 일부 프로파일은 매우 큰 파일을 작성하기 위해 성능이 저하되는 임계 값을 변경했습니다. iozone결과를 플롯하면 프로파일에 대해 0.5GB의 깎아 지른 절벽을 볼 수 latency-performance있지만이 드롭 은 프로파일에서 1GB로 나타납니다.enterprise-storage. 둘째, 모든 프로파일이 작은 파일 크기와 작은 레코드 크기의 조합에 대해 이상한 변동성을 나타내지 만 정확한 변동 패턴은 프로파일마다 다릅니다. 다시 말해, 아래에 표시된 도표에서 왼쪽의 균열 패턴은 모든 프로파일에 대해 존재하지만 구덩이의 위치와 깊이는 프로파일마다 다릅니다. (그러나, 나는 변화의 패턴이 실행의 사이에 눈에 띄게 변경 있는지 확인하기 위해 같은 프로파일의 반복 실행을하지 않았다 iozone가 그래서, 같은 프로필 아래에 가능한 프로파일의 차이 어떻게 생겼는지 정말 무작위 변화입니다.)

다음은 iozonetuned프로파일에 대한 다양한 테스트 의 표면 플롯 입니다 latency-performance. 테스트에 대한 설명은에 대한 설명서에서 복사됩니다 iozone.

읽기 테스트 : 이 테스트는 기존 파일을 읽는 성능을 측정합니다.

여기에 이미지 설명을 입력하십시오

쓰기 테스트 : 이 테스트는 새 파일 쓰기 성능을 측정합니다.

여기에 이미지 설명을 입력하십시오

랜덤 읽기 : 이 테스트는 파일 내 임의의 위치에 액세스하여 파일을 읽는 성능을 측정합니다.

여기에 이미지 설명을 입력하십시오

랜덤 쓰기 : 이 테스트는 파일 내 임의의 위치에 액세스하여 파일을 작성하는 성능을 측정합니다.

여기에 이미지 설명을 입력하십시오

Fread : 이 테스트는 라이브러리 함수 fread ()를 사용하여 파일을 읽는 성능을 측정합니다. 버퍼링 및 차단 된 읽기 작업을 수행하는 라이브러리 루틴입니다. 버퍼는 사용자의 주소 공간 내에 있습니다. 응용 프로그램을 매우 작은 크기의 전송으로 읽는 경우 fread ()의 버퍼 및 차단 된 I / O 기능은 운영 체제 호출시 실제 운영 체제 호출 수를 줄이고 전송 크기를 늘림으로써 응용 프로그램의 성능을 향상시킬 수 있습니다. 전화가 걸립니다.

여기에 이미지 설명을 입력하십시오

Fwrite : 이 테스트는 라이브러리 함수 fwrite ()를 사용하여 파일을 작성하는 성능을 측정합니다. 버퍼 된 쓰기 작업을 수행하는 라이브러리 루틴입니다. 버퍼는 사용자의 주소 공간 내에 있습니다. 응용 프로그램이 매우 작은 크기의 전송으로 작성되는 경우 fwrite ()의 버퍼 및 차단 된 I / O 기능은 실제 운영 체제 호출 수를 줄이고 운영 체제의 전송 크기를 늘림으로써 응용 프로그램의 성능을 향상시킬 수 있습니다 전화가 걸립니다. 이 테스트는 새 파일을 작성하므로 메타 데이터의 오버 헤드가 측정에 포함됩니다.

여기에 이미지 설명을 입력하십시오

마지막으로 iozonevSphere 5의 클라이언트 인터페이스에서 VM에 대한 성능 그래프도 조사했습니다. 가상 디스크와 데이터 스토어의 실시간 플롯 간을 전환했습니다. 데이터 스토어에 사용 가능한 플로팅 매개 변수가 가상 디스크보다 높았으며, 데이터 스토어 성능 플롯이 디스크 및 가상 디스크 플롯이 수행 한 작업을 반영하는 것처럼 보였으므로 여기서는 프로파일 iozone아래에서 완료된 후 생성 된 데이터 스토어 그래프의 스냅 샷 만 포함 tuned합니다. latency-performance). 색상은 읽기가 약간 어렵지만 가장 눈에 띄는 것은 읽기 의 급격한 수직 급상승입니다.대기 시간 (예 : 4:25에서 4:30 이후에 약간 다시, 4 : 50-4 : 55에서 다시). 참고 : 여기에 포함 된 플롯은 읽을 수 없으므로 http://cl.ly/image/0w2m1z2T1z2b 에도 업로드했습니다 .

VM의 vSphere 실시간 플롯

나는이 모든 것을 무엇을 만들어야할지 모르겠다. 특히 iozone줄거리 의 작은 레코드 / 작은 파일 크기 영역의 이상한 움푹 들어간 곳 프로필을 이해하지 못합니다 .


IOPS 측면에서 오랜 시간 동안 디스크 사용률이 높았다 고 가정하면 어느 정도 (OS 디스크 쓰기 큐 수준 또는 하드 디스크 수준에서) 디스크 포화 상태가 발생할 수 있습니다. 현재 디스크에서 처리 할 수있는 것보다 많은 요청이 있습니다. 디스크 채도를 겪고 있는지 여부를 결정하는 방법에 대해 충분히 경험하지 못했지만 이것이 조사의 대상이라고 생각합니다.
Jason Zhu

@JasonZhu 좋은 질문입니다. 시스템이 다른 작업을 수행하지 않고 동일한 명령을 반복적으로 실행하기 때문에 디스크 사용량 수준이 거의 일정하다고 가정했습니다. 그러나 이것에도 불구하고 행동이 나타나기까지 오랜 시간이 걸립니다. 나는 iostat달렸고 전후에 ~ 90 % 활용도를 보여주었습니다. 그러나 나는 이런 것들을 판단하는 전문가가 아닙니다. 어쩌면 채도가 어딘가에서 일어나고 있습니다. iostat유용한 경우 출력 을 표시하도록 내 질문을 업데이트하고 있습니다.
mhucka

이것이 ESX 디스크 캐싱 때문일 가능성이 있습니까? 테스트중인 디스크가 성능 또는 안전에 최적화되어 있습니까? 또한 성능에 최적화 된 경우 테스트하는 동안 ESX 캐시 사용률을 확인할 수 있습니까? 이 처리량의 쓰기 IO 변경은 쓰기가 캐시에 도달 한 후 용량이 부족할 때 디 스테이지 속도가 느려지는 것처럼 보입니다.
바질

RAID 컨트롤러 캐시와 관련이 있습니까? 꽉 찰 때까지 높은 IOPS / 처리량을 달성 한 다음 원시 HDD 성능으로 되돌아가십니까? 그냥 추측 ...
마리오 렌츠

@MarioLenz 설명에서 언급했듯이 이것은 RAID가 없습니다.
mhucka 2016 년

답변:


2

정확한 ESXi 빌드 번호를 줄 수 있습니까? 실제 기준선을 얻으려면 fio 또는 iozone 과 같은 특수 목적의 디스크 성능 분석 도구를 사용하여 테스트를 다시 시도하십시오 . 사용하는 dd것이 실제로 생산적이지는 않습니다.

일반적으로 EL6의 기본 I / O 스케줄러는 그리 좋지 않습니다. 마감일 또는 noop I / O 엘리베이터로 전환하거나 조정 된 프레임 워크를 설치하는 것이 좋습니다 .

시도 : yum install tuned tuned-utils그리고 tuned-adm profile virtual-guest, 다시 테스트합니다.


Argh, 나는 실제로 스케줄러를 noop로 변경했다고 언급하지 않았다. 그런 질문을하기 위해 질문을 편집하겠습니다. 빌드 번호는 1746018입니다. 조정 된 프레임 워크 및 기타 도구 제안 해 주셔서 감사합니다.
mhucka

나는 tuned프로파일을 사용 virtual-guest하고 다른 모든 것을 동일하게 유지 하려고 시도했다 (적절한 실험 기술-둘 이상의 변수를 변경하지 마십시오). 이전과 마찬가지로 문제가 발생하지 않았지만 반복 된 많은 실행 (10-30) 후에 dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct성능이 절반으로 떨어졌습니다. 나는 또한 프로필을 시도했다 latency-performance-같은 결과. 나는 현재 노력하고 throughput-performance있습니다.
mhucka

dd달리기를 포함하지 않는 것을 시도해 볼 수 있습니까 ? 아마도 fio또는 iozone앞서 언급 했습니까?
ewwhite

나는 할 것이다. 그러나 먼저 행동이 바뀌 었는지 확인하기 위해 동일한 테스트를 반복하는 것이 합리적이었습니다.
mhucka

2

같은 문제가 발생하여 가상 시스템 내에서 드라이브 성능이 매우 느리다는 것을 알았습니다. Seagate ST33000650NS에서 ESXi 5.5를 사용하고 있습니다.

다음으로 기술 자료 문서를 나는 변경 Disk.DiskMaxIOSize내 디스크 블록 크기. 내 경우에는 4096.

이것에 대한 VMware 노트는 테스트 할 수 있기 때문에 매우 좋습니다.

참고 : ESX / ESXi 호스트를 재부팅하거나 ESX / ESXi 호스트를 유지 관리 모드로 두지 않고도이 변경을 수행 할 수 있습니다.

나는이 질문이 매우 오래되었다는 것을 알고 있지만, mhucka는 그의 게시물에 너무 많은 에너지와 정보를 넣어서 대답해야했습니다.

편집 # 1 : 하루 동안 4096을 사용한 후 이전 값으로 다시 전환했습니다 32767. IO 테스트와 모든 것이 여전히 안정적인 것으로 보입니다. 내 생각 엔과 일반 HDD에 ESXi를을 것을 실행 Disk.DiskMaxIOSize으로 설정 32767몇 시간 또는 어쩌면 일에 대한 의지 잘 작동. 성능을 점차적으로 낮추려면 VM에서 약간의로드가 필요할 수 있습니다.

조사하고 나중에 다시 시도합니다 ...


이것을 공유해 주셔서 감사합니다. 디스크 블록 크기 변경에 대해 알고 있으면 유용합니다. 더 이상이 구성이 없기 때문에 테스트 할 수없는 것을 후회합니다 (마침내 도랑을 벗고 CentOS와 베어 메탈로갔습니다). .
mhucka 2016 년

ProLiant 380 Gen9 시스템의 esxi 6.5에서 대기 시간이 길다는 것을 파악하려고했습니다. Disk.DiskMaxIOSize나를 위해 트릭을했다. 나는 지금 2 주 동안 연구하고 측정하고있었습니다. 공유해 주셔서 감사합니다.
EvanBlack

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