понимание blktrace из тестов fio - PullRequest
0 голосов
/ 19 января 2020

Я купил виртуальный сервер с 8 виртуальными ЦП, 16 ГБ памяти и 500 ГБ тома SSD (который поддерживается ceph rbd). Затем я использовал fio для проверки производительности сервера ввода-вывода. Чтобы лучше понять результаты fio, во время теста я также использовал blktrace для захвата трассировки IO блочного слоя.

  1. seqwriete

    fio --filename = / dev / vd c --ioengine = libaio --bs = 4k --rw = запись --size = 8G --iodepth = 64 --numjobs = 8 --direct = 1 --runtime = 960 --name = seqwrite - -group_reporting

вывод fio для seqwrite анализируемый вывод blktrace для seqwrite

randread

fio --filename = / dev / vd c --ioengine = libaio --bs = 4k --rw = randread --size = 8G --iodepth = 64 --numjobs = 8 --direct = 1 --runtime = 960 --name = randread --group_reporting

Вывод fio для randread проанализированный blktrace вывод для randread

Я пытаюсь понять разницу на уровне блоков между seqwrite и randread.

  1. , почему randread имеет большую часть I2D, а seqwrite нет ?
  2. почему Randread не имеет Q2M?

1 Ответ

0 голосов
/ 27 января 2020

(Обратите внимание, что на самом деле это не программный вопрос, поэтому Stackoverflow - неправильное место, чтобы задать это ... Может быть, Суперпользователь или Ошибка сервера будет лучшим выбором?)

почему randread имеет большую часть I2D, а seqwrite - нет?

Вы понимали, что каждое из ваших 8 numjobs перезаписывает ту же область, что и остальные numjobs? Это означает, что блочный уровень может отбрасывать последующие запросы, если перезапись для той же области происходит достаточно близко (что довольно вероятно в последовательном случае) ...

почему не randread имеет Q2M?

Трудно объединить случайный ввод-вывод с существующим вводом-выводом в очереди, так как он часто прерывается!

...