Почему буферизованный ввод-вывод занимает больше времени, чем прямой ввод-вывод с большим буфером записи?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему буферизованный ввод-вывод занимает больше времени, чем прямой ввод-вывод с большим буфером записи?

Сообщение Anonymous »


Я проверил производительность ввода-вывода и заметил интересное поведение, которое не могу объяснить.

Есть одна программа, которая сначала устанавливает размер буфера потока на 4096 байт, а затем записывает один байт 100 000 000 раз. В моей целевой системе эта операция занимает 40,806 с.

struct timespec start, end, delta символ write_buffer[4096]; char buffer_to_write[1] = {[0 ... 0] = 0x00}; ФАЙЛ* fd = fopen("file.txt", "wb"); setbuf (ФД, write_buffer); clock_gettime(CLOCK_REALTIME, &start); for (int i = 0; i < 100000000; i++) { fwrite(buffer_to_write, sizeof(char), sizeof(buffer_to_write), fd); } clock_gettime(CLOCK_REALTIME, &finish); Другая программа использует прямой ввод-вывод и записывает в буфер размером 4096 байт прямой ввод-вывод 24,414 раз. Размер записанных данных примерно такой же. Эта операция занимает всего 0,5 с.

struct timespec start, end, delta charuffer_to_write[4096] = {[0 ... 4095] = 0x00}; int fd = open("file.txt", O_WRONLY, 0); clock_gettime(CLOCK_REALTIME, &start); для (int я = 0; я
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»