동기식 IO를 벤치마킹할 때 대기열 깊이를 사용하는 것이 합리적입니까?

동기식 IO를 벤치마킹할 때 대기열 깊이를 사용하는 것이 합리적입니까?

동기 IO를 벤치마킹할 때 대기열 크기 > 1이 의미가 있습니까?

QD1에서도 같은 결과를 기대했는데 QD32가 실제로 더 나은 결과를 내는 걸까요?

나는 그것이 무시될 것이라고 생각했다. 피오에서수동옵션의 경우 --iodepth:

ioDeepth를 1 이상으로 늘려도 동기화된 ioengine에는 영향을 미치지 않습니다.

fio 명령:

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=1 --size=512MB --fsync=1  --filename=test.img 
Result:  5.210 IOPS / 20MB/s

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=32 --size=512MB --fsync=1  --filename=test.img 
Result: 20.100 IOPS /  79MB/s

답변1

(다음 내용을 참고하세요.페오)

동기 IO를 벤치마킹할 때 대기열 크기 > 1이 의미가 있습니까?

아니요(간단히 설명했지만 읽을 수 있습니다.특수한 경우에 대한 fio 문서).

무시될 것 같아요.

ioDeepth를 1 이상으로 늘려도 동기화된 ioengine에는 영향을 미치지 않습니다.

posixaio[ioDeepth가 ioengine에 미치는 영향을 보여주는 예시]

posixaioio엔진 동기화(aio = 비동기 I/O:-) 시청하시면https://github.com/axboe/fio/blob/fio-3.23/engines/posixaio.c#L246플래그가 설정되지 않았다는 것을 알 수 있습니다 FIO_SYNCIO(참조https://github.com/axboe/fio/blob/fio-3.23/ioengines.h#L65플래그의 위치를 ​​정의하는 데 사용됩니다).

1보다 큰 비동기 ioengine을 사용하면 iodepth정의에 따라 비동기 I/O 벤치마크를 생성하려고 시도하는 것입니다. 1을 사용하여 비동기 ioengine의 동기 동작을 어느 정도 에뮬레이트할 수 있지만 iodepth중복 비동기 메커니즘을 사용하면 약간의(아마도 작은) 오버헤드를 지불하게 됩니다. 또는 순수 동기식 I/O 엔진(이름에 sync가 포함된 ioengine을 찾으세요.iodepth) 그리고 이것이 결과에 영향을 미치지 않는다는 것을 알아야 합니다 (실제로 동기화되었기 때문입니다!).

관련 정보