Программно очистить кеш на смонтированном (SSD) диске в Linux

Я пишу приложение, где производительность диска интересна. Ранее я использовал более старый механический диск и использовал технику в этот поток для очистки кеша перед измерением производительности:

// Clear cache for benchmarking                                               
sync();    
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;
ofs.close();

Это сработало хорошо и дало ожидаемые результаты — измеренная скорость последовательного чтения с диска составила ~ 100 МБ/с при очистке кеша, что во много раз выше, когда кеш не трогали.

На днях я установил SSD-диск, смонтированный в /media/. После новой перезагрузки компьютера первые несколько измерений оказались такими, как и ожидалось (около 300 МБ/с), но когда кеш срабатывает, они, очевидно, намного выше.

Теперь моя проблема заключается в том, что строки кода, которые я ранее использовал, не действуют после переноса приложения на SSD. Может быть, этот кеш ведет себя по-другому? Что-то мне нужно сделать по-другому, чтобы очистить его? Единственное, что сейчас работает, это перезагрузка компьютера.


person Victor Sand    schedule 21.08.2013    source источник
comment
Для человека, который проголосовал против этого: пожалуйста, оставьте комментарий и укажите, почему, чтобы я мог это исправить.   -  person Victor Sand    schedule 21.08.2013
comment
Это странно, эти диски должны вести себя одинаково, так как кеш находится на более высоком уровне ОС... может быть это что-то другое, например кеш чтения НА SSD (примечание: я даже не уверен, что он у них есть... )?   -  person Karoly Horvath    schedule 21.08.2013
comment
@KarolyHorvath: Не могли бы вы подробнее рассказать об идее кэширования чтения? Я новичок в большинстве этих вещей.   -  person Victor Sand    schedule 21.08.2013
comment
superuser .com/questions/309613/ ... это имеет значение только в том случае, если вы мало читаете. Если вы читаете сотни мегабайт, первые несколько мегабайт сохраненного контента не должны иметь большого значения.   -  person Karoly Horvath    schedule 21.08.2013


Ответы (1)


Вы не говорите, что вы делали и работало ли что-то еще с этими данными. Вы можете удалить неиспользуемые данные из кеша только с помощью drop_caches - если по какой-то причине данные необходимо сохранить (например, потому что они грязные и должны быть записаны обратно), их нельзя будет удалить. Из документации ядра для drop_caches:

Это неразрушающая операция, которая не освобождает никакие грязные объекты. Чтобы увеличить количество объектов, освобождаемых этой операцией, пользователь может запустить sync перед записью в /proc/sys/vm/drop_caches. Это сведет к минимуму количество грязных объектов в системе и создаст больше кандидатов на удаление.

person Anon    schedule 22.02.2018