나는 혼란에 빠졌으며 다른 사람 이이 문제의 증상을 인식하기를 바랍니다.
하드웨어 : 새로운 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
입니다.
- 프로필
latency-performance
:- 원시 결과 : http://cl.ly/0o043W442W2r
- 도표가있는 Excel (OSX 버전) 스프레드 시트 : http://cl.ly/2M3r0U2z3b22
- 프로필
enterprise-storage
:- 원시 결과 : http://cl.ly/333U002p2R1n
- 도표가있는 Excel (OSX 버전) 스프레드 시트 : http://cl.ly/3j0T2B1l0P46
다음은 내 요약입니다.
어떤 경우에는 이전 실행 후 재부팅했지만 다른 경우에는 재부팅하지 않았고로 iozone
프로필을 변경 한 후 간단히 다시 실행 했습니다 tuned
. 이것은 전체 결과에 명백한 차이를 보이지는 않았습니다.
tuned
프로필이 특정 세부 사항에 영향을 미쳤지 만 다른 프로필 (내 눈에 잘 보이지 않는 눈에 보이지 않는) 은에 의해보고 된 광범위한 행동 에 영향을 미치지 않는 것으로 보입니다 iozone
. 첫째, 놀랍게도 일부 프로파일은 매우 큰 파일을 작성하기 위해 성능이 저하되는 임계 값을 변경했습니다. iozone
결과를 플롯하면 프로파일에 대해 0.5GB의 깎아 지른 절벽을 볼 수 latency-performance
있지만이 드롭 은 프로파일에서 1GB로 나타납니다.enterprise-storage
. 둘째, 모든 프로파일이 작은 파일 크기와 작은 레코드 크기의 조합에 대해 이상한 변동성을 나타내지 만 정확한 변동 패턴은 프로파일마다 다릅니다. 다시 말해, 아래에 표시된 도표에서 왼쪽의 균열 패턴은 모든 프로파일에 대해 존재하지만 구덩이의 위치와 깊이는 프로파일마다 다릅니다. (그러나, 나는 변화의 패턴이 실행의 사이에 눈에 띄게 변경 있는지 확인하기 위해 같은 프로파일의 반복 실행을하지 않았다 iozone
가 그래서, 같은 프로필 아래에 가능한 프로파일의 차이 어떻게 생겼는지 정말 무작위 변화입니다.)
다음은 iozone
의 tuned
프로파일에 대한 다양한 테스트 의 표면 플롯 입니다 latency-performance
. 테스트에 대한 설명은에 대한 설명서에서 복사됩니다 iozone
.
읽기 테스트 : 이 테스트는 기존 파일을 읽는 성능을 측정합니다.
쓰기 테스트 : 이 테스트는 새 파일 쓰기 성능을 측정합니다.
랜덤 읽기 : 이 테스트는 파일 내 임의의 위치에 액세스하여 파일을 읽는 성능을 측정합니다.
랜덤 쓰기 : 이 테스트는 파일 내 임의의 위치에 액세스하여 파일을 작성하는 성능을 측정합니다.
Fread : 이 테스트는 라이브러리 함수 fread ()를 사용하여 파일을 읽는 성능을 측정합니다. 버퍼링 및 차단 된 읽기 작업을 수행하는 라이브러리 루틴입니다. 버퍼는 사용자의 주소 공간 내에 있습니다. 응용 프로그램을 매우 작은 크기의 전송으로 읽는 경우 fread ()의 버퍼 및 차단 된 I / O 기능은 운영 체제 호출시 실제 운영 체제 호출 수를 줄이고 전송 크기를 늘림으로써 응용 프로그램의 성능을 향상시킬 수 있습니다. 전화가 걸립니다.
Fwrite : 이 테스트는 라이브러리 함수 fwrite ()를 사용하여 파일을 작성하는 성능을 측정합니다. 버퍼 된 쓰기 작업을 수행하는 라이브러리 루틴입니다. 버퍼는 사용자의 주소 공간 내에 있습니다. 응용 프로그램이 매우 작은 크기의 전송으로 작성되는 경우 fwrite ()의 버퍼 및 차단 된 I / O 기능은 실제 운영 체제 호출 수를 줄이고 운영 체제의 전송 크기를 늘림으로써 응용 프로그램의 성능을 향상시킬 수 있습니다 전화가 걸립니다. 이 테스트는 새 파일을 작성하므로 메타 데이터의 오버 헤드가 측정에 포함됩니다.
마지막으로 iozone
vSphere 5의 클라이언트 인터페이스에서 VM에 대한 성능 그래프도 조사했습니다. 가상 디스크와 데이터 스토어의 실시간 플롯 간을 전환했습니다. 데이터 스토어에 사용 가능한 플로팅 매개 변수가 가상 디스크보다 높았으며, 데이터 스토어 성능 플롯이 디스크 및 가상 디스크 플롯이 수행 한 작업을 반영하는 것처럼 보였으므로 여기서는 프로파일 iozone
아래에서 완료된 후 생성 된 데이터 스토어 그래프의 스냅 샷 만 포함 tuned
합니다. latency-performance
). 색상은 읽기가 약간 어렵지만 가장 눈에 띄는 것은 읽기 의 급격한 수직 급상승입니다.대기 시간 (예 : 4:25에서 4:30 이후에 약간 다시, 4 : 50-4 : 55에서 다시). 참고 : 여기에 포함 된 플롯은 읽을 수 없으므로 http://cl.ly/image/0w2m1z2T1z2b 에도 업로드했습니다 .
나는이 모든 것을 무엇을 만들어야할지 모르겠다. 특히 iozone
줄거리 의 작은 레코드 / 작은 파일 크기 영역의 이상한 움푹 들어간 곳 프로필을 이해하지 못합니다 .
iostat
달렸고 전후에 ~ 90 % 활용도를 보여주었습니다. 그러나 나는 이런 것들을 판단하는 전문가가 아닙니다. 어쩌면 채도가 어딘가에서 일어나고 있습니다. iostat
유용한 경우 출력 을 표시하도록 내 질문을 업데이트하고 있습니다.