Страницы

Сохранить статью у себя в соцсети:

понедельник, 6 мая 2013 г.

§ EnhanceIO: How-to setup.

EnhanceIO Howto.

Продолжение истории о EnchanceIO. На этот раз только практика и совсем чуть-чуть теории.
enhanceio setup

Для установки EnhaceIO необходимо наличие таких инструментов как git, make и GCC. Git необходим для скачивания исходных кодов с репозитория проекта, а make и GCC для сборки и компиляции. Установка выполняется без применения патчей, нужно лишь собрать модули ядра и установить их в каталог модулей (при обновлении ядра, требуется выполнить переустановку).
# git clone https://github.com/stec-inc/EnhanceIO.git
# cd EnhanceIO/Driver/enhanceio/
# make && make install
# cd ../../CLI/
# cp eio_cli /sbin/
# cp eio_cli.8 /usr/share/man/man8

Теперь можно приступить к настройке. Для создания кэшей и управления параметрами кэша существует утилита eio_cli. С помощью нее можно создавать и удалять кэши, а также на лету редактировать такие параметры как режим работы и политики замещения блоков. Кроме того для каждого режима активируется несколько sysctl-ключей для более тонкой подстройки.
Если вас волнует вопрос, что будет с кэшем при перезагрузке, то здесь следует отметить что персистентность кэшей достигается за счет udev-правил создаваемых при первом создании кэша. Таким образом не нужно никаких init скриптов, инициализация происходит при запуске udev.

Теперь несколько примеров использования.
Подключение кэша можно осуществлять к уже смонтированному разделу на котором уже размещены данные. В примере ниже создается кэш с именем root, а если точнее, то к LVM-тому ubuntu-vg/root подключается SSD диск /dev/sda в режиме write-through и политикой замещения LRU.
# eio_cli create -d /dev/ubuntu-vg/root -s /dev/sda -p lru -m wt -c root
Cache Name : root
Source Device : /dev/ubuntu-vg/root
SSD Device : /dev/sda
Policy : lru
Mode : Write Through
Block Size : 4096
Associativity : 256
ENV{DM_UUID}=="LVM-WSdHEfX3a4Y14CSo97BMYKpUHW0HrBwaa2K6QQ1fY1HzD1Nz8mfzcjH2JlTFiIDv", ENV{DEVTYPE}=="disk"
ENV{ID_SERIAL}=="OCZ-VERTEX4_OCZ-P3S75065SF7A358Z", ENV{DEVTYPE}=="disk"
Cache created successfully

Вполне может быть так, что через какое-то время мы захотим изменить параметры кэша. Изменение параметров можно выполнить на лету, без демонтирования файловой системы. Сменим режиме работы на write-back и политику замещения на FIFO.
# eio_cli edit -c root -p fifo -m wb
ENV{DM_UUID}=="LVM-WSdHEfX3a4Y14CSo97BMYKpUHW0HrBwaa2K6QQ1fY1HzD1Nz8mfzcjH2JlTFiIDv", ENV{DEVTYPE}=="disk"
ENV{ID_SERIAL}=="OCZ-VERTEX4_OCZ-P3S75065SF7A358Z", ENV{DEVTYPE}=="disk"
Cache edited Successfully

Также есть возможность просмотр информации о всех доступных EnhanceIO кэшах.
# eio_cli info
Cache Name : root
Source Device : /dev/ubuntu-vg/root
SSD Device : /dev/sda
Policy : fifo
Mode : Write Back
Block Size : 4096
Associativity : 256
State : normal

Ну и конечно же удаление кэша также можно выполнить на лету, без остановки сервисов и демонтирования файловых систем.
# eio_cli delete -c root
Removing file/etc/udev/rules.d/94-enhanceio-root.rules
Done removing rule file

Кроме eio_cli есть дополнительные средства статистики расположенные в файловой системе /proc, где по каждому кэшу можно обнаружить дополнительную информацию:
  • /proc/enhanceio/<cache_name>/config - конфигурация кэша;
  • /proc/enhanceio/<cache_name>/errors - статистика ошибок чтения/записи, ошибок в памяти и т.п;
  • /proc/enhanceio/<cache_name>/io_hist - гистограмма операций ввода-вывода (блоки какого размера и как часто использовались в операциях ввода-вывода);
  • /proc/enhanceio/<cache_name>/stats - расширенная статистика EnhanceIO.
Также доступны несколько sysctl-ключей (пример ключей для кэша с именем root). Состав доступных ключей зависит от режима работы кэша:
  • dev.enhanceio.root.autoclean_threshold - автоматический сброс "грязных" данных выполняется до тех пор, пока число запросов ввода-вывода не превышает указанный предел (защита от перегрузки);
  • dev.enhanceio.root.dirty_high_threshold - верхняя граница уровня "грязных" блоков в % для всего кэша;
  • dev.enhanceio.root.dirty_low_threshold - нижняя граница уровня "грязных" блоков в % для всего кэша;
  • dev.enhanceio.root.dirty_set_high_threshold - верхняя граница уровня "грязных" блоков в % для одного кэша-сета;
  • dev.enhanceio.root.dirty_set_low_threshold - нижняя граница уровня "грязных" блоков в % для одного кэш-сета;
  • dev.enhanceio.root.do_clean - запустить очистку кэша;
  • dev.enhanceio.root.time_based_clean_interval - интервалы с которыми будет запускаться сброс "грязных" блоков в минутах;
  • dev.enhanceio.root.zero_stats - сбросить статистику.
Большинство sysctl-ключей активируются лишь при write-back режиме в силу его специфичности. Так в режиме write-back существует механизм сброса "грязных" блоков, который работает в фоновом режиме и запускается только при определенных условиях. К примеру сброс "грязных" блоков запускается при превышении отметок dirty_high_threshold и останавливается лишь при достижении dirty_low_threshold. Таким образом данные попадают на жесткий диск, а пороговые значения могут быть отрегулированы администратором.

Вот такой нехитрый функционал предлагает EnhanceIO для работы. По моему удобно и достаточно просто.

На главную "Virtualizing Linux"

4 комментария:

  1. Установил EnhanceIO.
    При попытке создать кеш командой

    sudo eio_cli create -d /dev/sda2 -s /dev/sdb1 -c cachedev

    получаю ошибку:

    No such file or directory: '/dev/eiodev'

    Подскажите, что делать?

    ОтветитьУдалить
  2. Проверьте подгружен ли модуль.

    ОтветитьУдалить
  3. а как его поставить на proxmox ? debian 7 / proxmox 3.0

    make && make install
    grep: /etc/redhat-release: Нет такого файла или каталога
    make -C /lib/modules/2.6.32-20-pve/build M=/root/EnhanceIO/Driver/enhanceio modules V=0
    expr: синтаксическая ошибка
    make[1]: Entering directory `/usr/src/linux-headers-2.6.32-20-pve'
    grep: /etc/redhat-release: Нет такого файла или каталога
    CC [M] /root/EnhanceIO/Driver/enhanceio/eio_conf.o
    In file included from /root/EnhanceIO/Driver/enhanceio/eio_conf.c:40:0:
    /root/EnhanceIO/Driver/enhanceio/eio_ttc.h:27:20: error: conflicting types for ‘bio_rw_flagged’
    In file included from include/linux/blkdev.h:16:0,
    from /root/EnhanceIO/Driver/enhanceio/eio.h:40,
    from /root/EnhanceIO/Driver/enhanceio/eio_conf.c:39:
    include/linux/bio.h:124:20: note: previous definition of ‘bio_rw_flagged’ was here
    make[2]: *** [/root/EnhanceIO/Driver/enhanceio/eio_conf.o] Ошибка 1
    make[1]: *** [_module_/root/EnhanceIO/Driver/enhanceio] Ошибка 2
    make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-20-pve'
    make: *** [modules] Ошибка 2

    ОтветитьУдалить
    Ответы
    1. попробуйте завести задачу в их треккере
      https://github.com/stec-inc/EnhanceIO/issues

      Удалить

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика