Как работает кеш HDD дисков в linux?
Доброго времени суток.
Помнится где-то слышал что, например, если копировать файл из одного раздела на другой то реально тратится время только на чтение с первого раздела, а файл помещается в оперативную память (если она в нужном объеме доступна), и хранится там пока ее (оперативную память) кто-то не затребует в количестве превышающем свободную, и лишь тогда изменения будут в фоне записываться на диск.
Так ли это, и где это можно настраивать?
У меня ситуация следующая: есть комп с медленными винтами, на нем было 4 гб ОЗУ, думал немного ускорить, докупил еще 8. Но как-бы шустрее не стало. Поэтому возник еще один вопрос: кешируется только данные на запись? Или на чтение тоже? В моем случае под приложения и сервисы 2-4 Гб ОЗУ достаточно, остальное можно было бы под кеш выделить.
Спрашиваю потому что, например при установке чистого debian (с настройками по-умолчанию) на ВМ (qemu+kvm) с, скажем, 2 Гб ОЗУ (под виртуалку), и с qcow2-образом на HDD установка занимает в 2-4 раза дольше, чем если бы этот образ находился в /dev/shm (если не ошибаюсь это ram-диск, на нем доступно почти 6 гб), при этом образ (после установки) занимает 1 Гб. На момент запуска и работы ВМ было загружено 1-2 Гб под остальные программы/службы. Последние с HDD активно не работали - следил с помощью iotop. В общем немного, на мой взгляд, нелогичто система распределяет ресурсы.
Заранее спасибо.
- Для комментирования войдите или зарегистрируйтесь
Не всё так просто
Подробнее процесс кэширования описан здесь: http://www.westnet.com/~gsmith/content/linux-pdflush.htm
Там же предлагаются варианты настроек для ускорения IO. Правда там всё на ангельском.
Увеличение памяти совсем не обязательно приводит к увеличению скорости в IO. В конце-концов, данные должны сначала попасть в память, а на это уходит время. Повторное использование тех же данных конечно будет быстрее, однако первичное всё равно будет медленным. Далее, если данные были изменены, то они из памяти должны быть скопированы на диск, соответственно обращения к диску опять не избежать, хотя его и стараются минимизировать.
Так что если постоянно приходится запускать разнообразные программы, или постоянно изменять данные на диске, то никакого увеличения скорости не заметишь. Разве что свопить будет меньше, но реально, у меня даже с 4-мя гигами особо не свопит (сейчас занято 2 мегабайта)
Чем больше юзерфрендли, тем сложнее юзать.
Так вот в том то и дело что
Так вот в том то и дело что доступ к уже обращенным данным.
Пример: виртуалка, чистая, на ней скажем, устанавливает что-либо "громоздкое", например xorg + какой-нибудь DE (я брал xfce4), первая установка, занимает, скажем, 20 минут, затем удаляем только-что установленное, и ставим заново (но тут есть нюанс, о котором я не думал раньше, с точки зрения хоста те же файлы могут попасть уже в другие сектора виртального HDD), время почти такое же.
Хм, надо будет попробовать на виртуалку залить какой либо фильм, выделить ей, скажем, 256 Мб, и засечь сколько времени займет первая и последующие команды
.
Не могу сказать точно, как работает кеш, но могу поделиться своими наблюдениями. Есть у меня одна система, постоянно (раз в 5 минут) обрабатывающая приличный объем данных (примерно 5Gb). На этой системе не проводилось никаких дополнительных мероприятий по настройкам параметров кеша, т.е. - все по умолчанию. Что касается копирования значительных объемов данных хоть с участием разных физических носителей, хоть в рамках разделов одного и того же носителя, никаких заметных изменений при первой/последующих операциях я не замечал. А вот насчет обработки вышеупомянутого объема данных есть четкая закономерность. Эти данные представляют собой около 250 тыс. файлов, которые при обработке как читаются, так и пишутся. Так вот, если первая операция занимает около двух минут (110-130 сек., если точнее), то все последующие 25-40 сек. Очень-таки неплохой прирост, и так происходит всегда, хотя памяти маловато, и в swap постоянно болтается мегабайт 150-250.
Исходя из наблюдений, я думаю, что кеш мало помогает, когда копируются файлы приличного размера. Хотя я, конечно, могу ошибаться.
время на копирование является определяющим
Даже если исходные файлы для копирования уже есть в памяти, ядру нужно эти копии воспроизвести в памяти. При этом ядро старается по максимуму запользовать свап. Есть в приведённой ссылке описание параметра swappiness. Вполне возможно, что ядро просто начинает свапить "чистую виртуалку".
Чем больше юзерфрендли, тем сложнее юзать.
нет, на swap тоже сначала
нет, на swap тоже сначала начал грешить, и поэтому отключил его.