Привет!
Домашний десткоп, FreeBSD 8.1-PRERELEASE, два винта 500G (маркетинговых), в начале каждого создан слайс на 250G (настоящих), поверх них gmirror.
Поверх зеркала geom_cache, внутри geom_journal, уже дальше партишны, включая /dev/ufs/home размером в 203G, заполненный на 159G.
Запускаем dump -0 -a -C 32 -f /dev/null /home и периодически жмем Ctrl-T, чтобы увидеть процент готовности и прогноз времени окончания, который быстро
падает. После 5.5% прогресса скорость падения прогноза выравнивается с реальным временем и составляет (ещё) 34 минуты.
Hе прерывая дампа, на ходу отключаем кеширование gcache путем syctl kern.geom.cache.enable=0. Hажимая Ctrl-T, видим что скорость работы
dump резко упала - прогноз начинает расти и к 12.5% (минут через 5) достигает уже 1 часа 17 минут и растет дальше. Включаем geom_cache обратно и тут же
прогнозируемое время начинает падать, к прогрессу 34% (ещё минут через пять, точно не мерял) прогноз времени возвращается до 35 минут.
А всё потому, что geom_cache исполняет свою главную функцию: обеспечивает чтение низлежащего провайдера блоками не менее чем задано. У меня задано
128K при размере кеша gcache в 16 мегабайт. systat -vm 3 показывает, что при включенном gcache чтение с обоих дисков (зеркало читает с обоих)
идет, действительно, блоками по 128K "на транзакцию", а при отключении сразу переключается на 64K (у зеркала дефолтный балансировщик load).
К сожалению, в gcache до сих пор есть мелкая бага (описка), которая не даёт сконфигурить ему размер кеша 64k или больше. Мелкий патч для
исправления этого тут (эксплуатируется с марта на двух машинах без проблем):
http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/144732
