Почему буферизованный ввод-вывод занимает больше времени, чем прямой ввод-вывод с большим буфером записи? ⇐ Linux
Почему буферизованный ввод-вывод занимает больше времени, чем прямой ввод-вывод с большим буфером записи?
Я проверил производительность ввода-вывода и заметил интересное поведение, которое не могу объяснить.
Есть одна программа, которая сначала устанавливает размер буфера потока на 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; я
Я проверил производительность ввода-вывода и заметил интересное поведение, которое не могу объяснить.
Есть одна программа, которая сначала устанавливает размер буфера потока на 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; я
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Высокая загрузка 3D, вызов OpenCL с большим буфером на настольном графическом процессоре
Anonymous » » в форуме C++ - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-