4.5. VDO 성능에서 I/O 요청 크기의 영향 테스트
이러한 테스트를 사용하면 최적의 I/O 깊이에서 VDO의 최상의 성능을 생성하는 블록 크기를 확인할 수 있습니다.
테스트에서는 고정된 I/O 깊이에서 4Ker 테스트를 수행하고, 8KiB ~ 1MiB 범위의 블록 크기가 다양합니다.
사전 요구 사항
최적의 I/O 깊이 값을 결정했습니다. 자세한 내용은 4.4절. “VDO 성능에서 I/O 깊이의 영향 테스트” 의 내용을 참조하십시오.
다음 테스트에서 최적의 깊이를 최적의 I/O 깊이 값으로 바꿉니다.
4.5.1. VDO에서 순차적 쓰기에 I/O 요청 크기의 효과 테스트
이 테스트에서는 다양한 I/O 요청 크기의 VDO 볼륨에서 순차적 쓰기 작업이 수행하는 방식을 결정합니다.
절차
새 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
순차적 쓰기 테스트에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=write \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.5.2. VDO에서 임의의 쓰기에 I/O 요청 크기의 효과 테스트
이 테스트에서는 다양한 I/O 요청 크기의 VDO 볼륨에서 임의의 쓰기 작업을 수행하는 방식을 결정합니다.
각 I/O 요청 크기 테스트 실행 간에 VDO 볼륨을 다시 생성해야 합니다.
절차
4k,
의 I/O 요청 크기를 별도로 다음 시리즈 단계를 수행합니다.
8k,
16k,
32k,
64k
,128k
, 256k
,512k
및1024k
새 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
임의 쓰기 테스트에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# fio --rw=randwrite \ --bs=request-size \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.5.3. VDO에서 순차적 읽기에서 I/O 요청 크기의 효과 테스트
이 테스트에서는 다양한 I/O 요청 크기에서 VDO 볼륨에서 순차 읽기 작업을 수행하는 방식을 결정합니다.
절차
새 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
순차적 읽기 테스트에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=read \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.5.4. VDO에서 임의의 읽기에서 I/O 요청 크기의 효과 테스트
이 테스트에서는 다양한 I/O 요청 크기의 VDO 볼륨에서 임의의 읽기 작업을 수행하는 방식을 결정합니다.
절차
새 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
임의 읽기 테스트에 대해 보고된 처리량 및 대기 시간을 기록합니다.
# for iosize in 4 8 16 32 64 128 256 512 1024; do fio --rw=read \ --bs=${iosize}k \ --name=vdo \ --filename=/dev/mapper/vdo-test \ --ioengine=libaio \ --numjobs=1 \ --thread \ --norandommap \ --runtime=300 \ --direct=1 \ --iodepth=optimal-depth \ --scramble_buffers=1 \ --offset=0 \ --size=100g done
VDO 테스트 볼륨을 제거합니다.
자세한 내용은 4.3절. “VDO 성능 테스트 볼륨 정리” 의 내용을 참조하십시오.
4.5.5. 다양한 I/O 요청 크기에서 VDO 성능 분석
다음 예제에서는 다양한 I/O 요청 크기에 기록된 VDO 처리량 및 대기 시간을 분석합니다.
예 4.2. I/O 요청 크기 분석
그림 4.3. 요청 크기 및 처리량 분석 및 키 변형 지점 비교
예제 결과 분석:
순차적 쓰기는 요청 크기 Y 에서 최대 처리량에 도달합니다.
이 곡선은 구성 가능하거나 특정 요청 크기에 따라 자연스럽게 제어되는 애플리케이션이 성능을 인식하는 방법을 보여줍니다. 4KiB I/O 작업이 병합하면 도움이 될 수 있기 때문에 요청 크기가 커질수록 처리량이 증가합니다.
순차적 읽기는 지점 Z 에서 유사한 최대 처리량에 도달합니다.
이러한 기능이 정점되면 I/O 작업이 완료되기 전의 전체 대기 시간이 추가 처리량 없이 증가합니다. 이 크기보다 큰 I/O 작업을 수락하지 않도록 장치를 튜닝해야 합니다.
임의의 읽기는 지점 X 에서 최대 처리량을 달성합니다.
특정 장치는 대규모 요청 크기 임의 액세스에서 순차적 처리 속도를 거의 달성할 수 있지만, 다른 장치는 순차적으로 순차적으로 액세스하지 않는 경우 더 많은 페널티를 겪게 됩니다.
임의의 쓰기는 지점 Y 에서 최대 처리량을 달성합니다.
임의 쓰기는 중복 제거 장치의 가장 많은 상호 작용을 포함하며, VDO는 특히 요청 크기 또는 I/O 깊이가 큰 경우 고성능을 달성합니다.