Я пишу приложение, где производительность диска интересна. Ранее я использовал старый механический диск и использовал технику в эта тема очистить кеш перед измерением производительности:
// Clear cache for benchmarking
sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;
ofs.close();
Это сработало хорошо и дало мне ожидаемые результаты — измеренная скорость последовательного чтения с диска ~ 100 МБ / с при очистке кеша, во много раз выше, когда кеш оставался один.
На днях я установил SSD диск, смонтированный в / media /. После новой перезагрузки компьютера первая пара измерений соответствует ожидаемой (около 300 МБ / с), но когда кэш начинает работать, они, очевидно, намного выше.
Моя проблема сейчас в том, что строки кода, которые я использовал ранее, не имеют никакого эффекта с момента переноса приложения на SSD. Может, этот кеш ведет себя по-другому? Что-нибудь мне нужно сделать по-другому, чтобы очистить это? Единственное, что сейчас работает — перезагрузка компьютера.
Вы не говорите только, что вы делали, и работало ли что-то еще с этими данными. Вы можете только удалить неиспользуемые данные из кеша с помощью drop_caches
— если по какой-либо причине данные должны храниться (например, потому что они грязные и должны быть записаны обратно), они не могут быть выселены. От документация по ядру для drop_caches:
Это неразрушающая операция, которая не освобождает грязные предметы.
Чтобы увеличить количество объектов, освобожденных этой операцией, пользователь может запустить
sync
до написания/proc/sys/vm/drop_caches
, Это сведет к минимуму
количество грязных объектов в системе и создать больше кандидатов на
отброшен.
Других решений пока нет …