EnhanceIO + LVM on Debian Jessie

Пакет EnhanceIO в репе experimental
https://packages.debian.org/search?searchon=names&keywords=enhanceio

# cd /usr/local/src
# aptitude install python build-essential dkms
# wget http://ftp.de.debian.org/debian/pool/main/e/enhanceio/enhanceio-dkms_0+git20130620-5_all.deb
# wget http://ftp.de.debian.org/debian/pool/main/e/enhanceio/enhanceio_0+git20130620-5_all.deb
# dpkg -i enhanceio*

Create Cache
# eio_cli create -d /dev/HDDslow -s /dev/SSD -m wt -p lru -c CACHE
-d HDD name of the source device
-s SSD name of the ssd device
-p {rand,fifo,lru} cache replacement policy
-m {wb,wt,ro} cache mode
-b {2048,4096,8192} block size for cache
-c CACHE

более безопасно использовать режим wt (write-through).
Запись идет на медленный диск и на кеширующий диск (раздел).
Чтение поисходит из кеша.
Настроек через sysctl, можно сказать, нет:
# sysctl dev.enhanceio.SSD_cache
dev.enhanceio.SSD_cache.control = 0
dev.enhanceio.SSD_cache.mem_limit_pct = 75
dev.enhanceio.SSD_cache.zero_stats = 0

Немного статистики:

~# cat /proc/enhanceio/SSD_cache/stats
reads 35303064584
writes 403463408
read_hits 30674313560
read_hit_pct 86
write_hits 159204576
write_hit_pct 39
dirty_write_hits 0
dirty_write_hit_pct 0
cached_blocks 12498215
rd_replace 491148196
wr_replace 26920305
noroom 15248
cleanings 0
md_write_dirty 0
md_write_clean 0
md_ssd_writes 0
do_clean 0
nr_blocks 13055744
nr_dirty 0
nr_sets 50999
clean_index 0
uncached_reads 41067000
uncached_writes 12314479
uncached_map_size 0
uncached_map_uncacheable 0
disk_reads 4628751024
disk_writes 403463408
ssd_reads 30674313560
ssd_writes 4403738304
ssd_readfills 4000280272
ssd_readfill_unplugs 40243745
readdisk 41067000
writedisk 41067000
readcache 3834289195
readfill 500035034
writecache 550467288
readcount 417209619
writecount 12317019
kb_reads 17651532292
kb_writes 201731704
rdtime_ms 1214067640
wrtime_ms 486473144

За недолгое время использования в продакшине результаты более чем положительные.

Небезопасный, но очень быстрый режим - wb (WriteBack)
Запись и чтение сразу на кеширующий диск. Запись из кеша на медленный диск происходит при достижении заданного % "грязных" блоков
для режима wb доступны переменные, которыми можно управлять через sysctl:
- autoclean_threshold # automatic "cleaning" of the cache when the pending IO operations for the HDD below it
Control
- dirty_high_threshold # max% is to "dirty" data in the entire cache before the "cleaning" performed
- dirty_low_threshold # min% is performed on "dirty" data in the entire cache so that the "cleaning"
- dirty_set_high_threshold # max% is to "dirty" data in a cache set before the "cleaning" performed
- dirty_set_low_threshold # min% is performed on "dirty" data in a cache set so that the "cleaning"
- do_clean
- mem_limit_pct
- time_based_clean_interval # time that should elapse between two 'cleanings "(Time-Based Cleaning)<!--formatted-->

Стоит заметить, что перед тем как удалять кеширование или менять режим кеширования c wb на другой,
необходимо обязательно записать "грязные" блоки на медленный диск.

Принудительная запись производится установкой do_clean в "1"

# echo 1 > /proc/enhanceio/SSD/do_clean

Число "грязных" блоков отображается в "nr_dirty"
Ждем пока не будет равно 0. После этого можно отключать кеш.

Этот режим работы кеша на проде не использовал, поэтому ничего не могу сказать насколько быстрее работает.

Опубликовано в рубрике linux

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*