C несоответствие времени write () - PullRequest
0 голосов
/ 07 августа 2020

Я написал крошечную программу, которая измеряет время для функции c write () в Linux. Что меня удивляет, так это то, что время не одинаково для нескольких итераций. Я видел, что первая запись занимает намного больше времени, чем непосредственная последующая запись. Шаблон продолжается в нескольких комбинациях прогонов / размер файла-буфера.

Вот код: https://drive.google.com/file/d/1akwUz9mykkp0kk-FID9jxPClwJMD7uRI/view?usp=sharing

Вот частичный результат:

это: 0 размер: 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,051 S: MS

it: 1 размер файла: 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,027 S: MS

it: 2 файла : 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,022 S: MS

it: 3 размер файла: 4,00 МБ размер буфера: 1,00 МБ writeTime: 0,021 S: MS

it: 4 размер файла: 4,00 МБ размер буфера : 1,00 КБ writeTime: 0,021 S: MS

it: 5 Размер: 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,021 S: MS

it: 6 Размер буфера: 4,00 МБ размер буфера: 1,00 КБ writeTime : 0,022 S: MS

it: 7 размер файла: 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,022 S: MS

it: 8 размер файла: 4,00 МБ размер буфера: 1,00 МБ writeTime: 0,021 S: MS

it: 9 размер файла: 4,00 МБ размер буфера: 1,00 КБ writeTime: 0,021 S: MS

Обратите внимание, как вызов функции записи на нем: 0 потребовал почти в два раза больше, чем последовательных вызовов. Этот образец повторяется неоднократно. Возможно, это как-то связано с кешем linux страниц, но я не знаю, как именно это работает. Помогите!

1 Ответ

0 голосов
/ 07 августа 2020

Это связано с архитектурой кэш-памяти процессоров. Во время первой итерации вашей программы файлы, хранящиеся на вашем жестком диске или SSD-памяти, перемещаются в кеш для обработки, которая занимает больше времени с увеличением размера файлов. Когда программе снова понадобится тот же файл, она просто будет использовать файл, хранящийся в кеше, пропуская переход в основную память. Это создает разницу во времени записи между первой и остальной итерациями.

...