Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Отдача больших фа йлов
Михаил Монашёв wrote:
Здравствуйте, MZ.
Смотря как читать, round-robin возможно (и то, если отдается только один
файл на текущий момент, и опять же, это не замедляет!, а всего лишь
приводит к скорости одиночного диска), но на самом деле нет препятствий
чтобы читать большой файл с того диска в зеркале откуда это удобней
(читай - быстрее) делать.
Жду от Вас патча для gmirror.
Там проблема вроде в том, что geom оперирует блоками, а не файлами.
M> Патч давно доступный:
M> http://www.freebsd.org/cgi/query-pr.cgi?pr=113885
M> Где "там" и в чем суть проблемы ?
Патч интересный. Жаль, что он помнит только последний прочитанный
блок. Там бы чуть иначе написать: если в зеркале 3 диска, то читать
все блоки, имеющие offset в первой трети зеркале, с первого диска, во
второй - со второй, в третьей - с третьего. Правда для равномерной
нагрузки придётся зеркало сильно заполнить данными. Но и это можно
исправить: побить все пространство не на 3 части в случае с тремя
дисками в зеркале, а скажем на 300...
Записал задачку к себе в TODO...
Направление правильное, когда каждый диск обслуживает свою небольшую
зону мы получаем дополнительный прирост производительности.
3 vs 300 - у нас диск изначально побит на BYTES/512 блоков )
вопрос в том как их учитывать, чтоб нагрузить все диски по максимуму.
У меня есть пару мыслей, но для полной реализации мне нужно сканировать
всю очередь активных, но незавершенных запросов для указанного geom-а, я
пока-что не нашел как это сделать :(
Как вариант - хранить и обновлять такую очередь прямо в модуле gmirror
для каждого диска, но это лишний код и лишние возможности для глюков, но
если по другому нельзя - придется так и сделать.
--
С уважением,
Михаил Монашёв, SoftSearch.ru
mailto:postmaster@xxxxxxxxxxxxx
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.
|