- или купить еще один такой же винчестер и объединить их в raid-0.
- или купить небольшой SSD и организовать на нем быстрый кэш. Варианты:
- dm-cache. Был добавлен в ядро 3.9, ставится просто.
- bcache. Судя по обзорам самый быстрый. Основной минус — надо форматировать диски перед началом использования. Официально добавлен в ядро 3.10, распространяется как пропатченое ядро 3.9.
- EnhanceIO. В обзорах я встретил упоминание его, как самого медленного, но простого в использовании. Добавлен в ядро 3.10.
Взвесив плюсы и минусы, а так же спросив отзывы знакомых, я решил остановиться на bcache. О нем и расскажу подробнее.
Сборка ядра bcache
Чтобы попробовать bcache — надо собрать пропатченое ядро 3.9. Проект активно развивается и его исходники даже не распространяются как tar.bz2. Хочешь скачать — качай репозиторий (700Мб где-то).
# устанавливаем все необходимое для сборки ядра sudo apt-get install kernel-package fakeroot build-essential ncurses-dev bc # забираем последние исходники bcache git clone http://evilpiepirate.org/git/linux-bcache.git cd linux-bcache # за основу конфига ядра с bcache используем конфиг текущего ядра cat /boot/config-`uname -r`>.config make oldconfig
После этого шага надо будет выбрать какие опции использовать для добавившихся параметров ядра. Я оставил все по умолчанию, только bcache собрал как модуль ядра. Debug ключи bcache оставил в выключенном состоянии.
make-kpkg clean # С ключем -j можно задать число параллельных процессов сборки. sudo time fakeroot make-kpkg -j8 --initrd kernel_image kernel_headers # Через 24 минуты ядро было готово. Можно устанавливать. sudo dpkg -i ../linux-image-3.9.0+_3.9.0+-10.00.Custom_amd64.deb ../linux-headers-3.9.0+_3.9.0+-10.00.Custom_amd64.deb # следом установим и bcache-tools cd .. git clone http://evilpiepirate.org/git/bcache-tools.git cd bcache-tools make sudo make install
Если это ядро самое свежее по версии — оно загрузится автоматически, если у вас установлено что-то более новое — ядро с bcache можно будет выбрать при загрузке в grub2 в меню Advanced boot options.
Настраиваем bcache
Для работы с bcache диски надо предварительно отформатировать. (не забудьте забэкапить данные)
sudo -i umount /dev/sdb4 # форматируем раздел HDD make-bcache -B /dev/sdb4 # форматируем SSD для кэша make-bcache -С /dev/sda
Далее диски надо зарегистрировать в ядре.
echo /dev/sdb4 > /sys/fs/bcache/register echo /dev/sda > /sys/fs/bcache/register
После регистрации диск появится как /dev/bcache0, а кэш как /sys/fs/bcache/<UDID>. Форматируем диск в файловую систему по выбору и монтируем его.
mkfs.ext4 /dev/bcache0 mount /dev/bcache0 /mnt
Что бы диск знал с которым кэшем ему работать, кэш надо подключить. Пока кэш-сет, это один диск, но в будущем планируют добавить работу с несколькими кэш устройствами в кэш-сете. Один кэш-сет можно добавить к нескольким дискам, что очень удобно для систем с несколькими медленными дисками. Для подключения кэша нам понадобится его UDID.
echo <UUID> > /sys/block/bcache0/bcache/attach
Ну вот и все. У вас в системе есть диск который с подключенным к нему writetrough кэшем. Если основная нагрузка на базу — это выборки, без модификации данных — такого режима кэширования будет достаточно и SSD проживет дольше. Writeback можно включить коммандой:
echo writeback > /sys/block/bcache0/cache_mode
Впечатления от bcache
После заполнения кэша база стала работать в разы шустрее. Привести какие-то цифры мне тяжело, т.к. до перехода на bcache я не делал референсных запросов. Но приблизительное отношение скоростей я показать смогу. Так сферический запрос с пустым кэшем выполняется за 171 секунду. Повторно он же выполняется за 3.2 секунды. Чтобы время исключить влияние кэшей базы данных на скорость обработки, я перезапустил БД, после чего запрос выполнился за 4 секунды. С таким приростом скорости обработка данных всей планеты не кажется невыполнимой задачей на нашем относительно слабом железе.
Приятным дополнением к bcache является его статистика, которую он бережно собирает. Можно посмотреть на статистику работы кэша, сколько miss, сколько hits, сколько процентов приходится на hits, сколько кэша заполнено, сколько информации было записано в кэш и т.д. Вот что он показывает у меня в настоящий момент:
$ cd /sys/block/bcache0/bcache/stats_hour $ cat cache_hit_ratio 90 $ cat cache_hits 836233 $ cat cache_misses 91086 $ cd cache/cache0 $ cat btree_written 92.3M $ cat metadata_written 481M $ cat written 41.3G
Спасибо за внимание. О опечатках и неточностях сообщайте в личку, на вопросы постараюсь ответить в комментариях.
p.s. Документация к bcache очень подробная и хорошо написана, рекомендую к прочтению.
ссылка на оригинал статьи http://habrahabr.ru/post/182372/
Добавить комментарий