LINUX.ORG.RU

printf, буферизация и heavy I/O

 , , ,


1

1

Пишу на Си не суть важно что, но это что-то читает блочное устройство в цикле по 512 байт за раз (по размеру блока). Т.к. блочное устройство — SSD, скорость чтения большая (~300–400 МиБ в секунду, подтверждается через IO_RATE в htop'е).

Допустим, я хочу каждую секунду выводить значение текущей скорости чтения. Раз в 1000 циклов чтения проверяю, прошла ли секунда, если да, то пишу статистику в консоль через printf.

Проблема в том, что это не работает. Точнее, работает, но с задержкой в 7–8 секунд. Если инфу выводить не через printf, а форматить вручную и писать через write(STDOUT_FILENO, buf, strlen(buf)), то всё выводится, как и нужно. Если после printf делать fflush(stdout), то тоже работает.

Собственно, два вопроса:

  1. правильно ли я понимаю, что это из-за буферизации вывода через printf?
  2. связано ли это с 12309?
Ответ на: комментарий от post-factum

Почему при интенсивном дисковом IO консольный буфер сбрасывается чёрти-когда?

Я не могу тебе ответить в терминах дискового IO, потому что не знаю, причастен ли он к проблеме. Прикола ради замени чтения на тупые паузы.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.