4.4. VDO 성능에서 I/O 깊이의 영향 테스트
이 테스트에서는 최적의 처리량과 VDO 구성에 가장 낮은 대기 시간을 생성하는 I/O 깊이를 결정합니다. I/O 깊이는 fio
툴이 한 번에 제출하는 I/O 요청 수를 나타냅니다.
VDO는 4KiB 섹터 크기를 사용하기 때문에 테스트에서는 4KiB I/O 작업과 1, 8, 16, 32, 64, 128, 256, 512, 1024의 I/O 깊이를 테스트합니다.
4.4.1. 순차적 100%에서 I/O 깊이의 효과를 VDO에서 테스트
이 테스트에서는 다양한 I/O 깊이 값에서 VDO 볼륨에서 순차적으로 100% 읽기 작업을 수행하는 방식을 결정합니다.
절차
새 VDO 볼륨을 만듭니다.
자세한 내용은 4.2절. “성능 테스트를 위한 VDO 볼륨 생성” 의 내용을 참조하십시오.
테스트 볼륨에서 쓰기
fio
작업을 수행하여 테스트에서 액세스할 수 있는 모든 영역을 미리 채웁니다.# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
순차적 100% 읽기에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do fio --rw=read \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.4.2. VDO에서 순차적 100% 쓰기에서 I/O 깊이의 효과 테스트
이 테스트는 다른 I/O 깊이 값에서 VDO 볼륨에서 순차적으로 100% 쓰기 작업을 수행하는 방식을 결정합니다.
절차
새 VDO 테스트 볼륨을 만듭니다.
자세한 내용은 4.2절. “성능 테스트를 위한 VDO 볼륨 생성” 의 내용을 참조하십시오.
쓰기
fio
작업을 수행하여 테스트에서 액세스할 수 있는 모든 영역을 미리 채웁니다.# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
순차적 100% 쓰기에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do fio --rw=write \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.4.3. VDO에서 임의의 100% 읽기에서 I/O 깊이의 효과 테스트
이 테스트에서는 다양한 I/O 깊이 값에서 VDO 볼륨에서 임의의 100% 읽기 작업을 수행하는 방식을 결정합니다.
절차
새 VDO 테스트 볼륨을 만듭니다.
자세한 내용은 4.2절. “성능 테스트를 위한 VDO 볼륨 생성” 의 내용을 참조하십시오.
쓰기
fio
작업을 수행하여 테스트에서 액세스할 수 있는 모든 영역을 미리 채웁니다.# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
임의 100% 읽기에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for depth in 1 2 4 8 16 32 64 128 256 512 1024 2048; do fio --rw=randread \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=$depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.4.4. VDO에서 임의의 100% 쓰기에서 I/O 깊이의 영향 테스트
이 테스트에서는 다양한 I/O 깊이 값의 VDO 볼륨에서 임의 100% 쓰기 작업이 수행하는 방식을 결정합니다.
각 I/O 심층 테스트 실행 간에 VDO 볼륨을 다시 생성해야 합니다.
절차
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048의 I/O 깊이 값에 대해 다음 일련의 단계를 별도로 수행합니다.
새 VDO 테스트 볼륨을 만듭니다.
자세한 내용은 4.2절. “성능 테스트를 위한 VDO 볼륨 생성” 의 내용을 참조하십시오.
쓰기
fio
작업을 수행하여 테스트에서 액세스할 수 있는 모든 영역을 미리 채웁니다.# fio --rw=write \ --bs=8M \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --thread \ --direct=1 \ --scramble_buffers=1
임의 100% 쓰기에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# fio --rw=randwrite \ --bs=4096 \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=depth-value --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.4.5. 다른 I/O 깊이에서의 VDO 성능 분석
다음 예제에서는 다양한 I/O 깊이 값에 기록된 VDO 처리량 및 대기 시간을 분석합니다.
I/O 깊이가 증가하여 처리량이 감소하는 변동 지점과 범위 전반에 걸친 동작을 확인합니다. 순차적 액세스와 임의 액세스는 서로 다른 값에서 최고치일 수 있지만 모든 유형의 스토리지 구성에서는 피크 시간이 다를 수 있습니다.
예 4.1. I/O 깊이 분석
그림 4.1. VDO 처리량 분석
각 성능 곡선에서 "knee"를 확인합니다.
- 마커 1은 지점 X 에서 최대 순차적 처리량을 식별합니다. 이 특정 구성은 X 보다 큰 순차 4 KiB I/O 깊이에서 혜택을 받지 않습니다.
- 마커 2는 지점 Z 에서 최대 임의 4KiB 처리량을 식별합니다. 이 특정 구성은 Z 보다 큰 임의의 4 KiB I/O 깊이를 사용할 수 없습니다.
X 및 Z 의 I/O 깊이를 넘어 대역폭 증가는 줄어들고 평균 요청 대기 시간이 추가 I/O 요청에 대해 1:1 증가합니다.
다음 이미지는 이전 그래프에서 곡선의 "knee" 뒤의 임의 쓰기 대기 시간의 예를 보여줍니다. 이러한 시점에서 응답 시간이 가장 적은 최대 처리량을 테스트해야 합니다.
그림 4.2. VDO 대기 시간 분석
최적의 I/O 깊이
점 Z 는 최적의 I/O 깊이를 표시합니다. 테스트 계획은 Z 와 동일한 I/O 깊이를 사용하여 추가 데이터를 수집합니다.