최근에 fio를 사용하여 디스크를 테스트하려고합니다. 다음과 같이 FIO의 내 구성은 다음과 같습니다iostat에서 관찰 된 iops와 fio에서 관찰 된 iops가 다른 이유는 무엇입니까?
[global]
invalidate=0 # mandatory
direct=1
#sync=1
fdatasync=1
thread=1
norandommap=1
runtime=10000
time_based=1
[write4k-rand]
stonewall
group_reporting
bs=4k
size=1g
rw=randwrite
numjobs=1
iodepth=1
를이 구성에서, 당신은 내가 직접 IO를 사용하여 임의 쓰기를 할 FIO를 구성했는지 알 수 있습니다. 테스트가 실행되는 동안 iostat를 사용하여 I/O 성능을 모니터링했습니다. 그리고 나는 그것을 찾았습니다 : fdatasync를 1로 설정하면 fio로 관찰 한 iops는 약 64이고 iostat에서 관찰 한 iops는 약 170입니다. 왜 이것이 다른가요? 그리고 "fdatasync"를 구성하지 않으면 두 iops는 거의 같지만 450 정도가 훨씬 더 높습니다. 왜? 내가 아는 한, direct io는 페이지 캐시를 통과하지 못한다. 내 의견으로는 fdatasync가 사용되는지 여부와 상관없이 거의 같은 시간이 걸릴 것이라는 의미이다.
그리고 어떤 경우에는 iostat가 잘못된 통계를 나타낼 수 있다고 들었습니다. 진짜야? 정확히 어떤 상황으로 인해 iostat가 잘못 될 수 있습니까? I/O 성능을 모니터링하는 데 사용할 수있는 다른 도구가 있습니까?