Ssd cache for linux

Software Engineering Blog

Tipps und Tricks aus dem Leben eines Systemadministrators.

SSD caching using Linux

17.04.2016 01:04 von Felix Mößbauer

BTRFS + bcache + RAID5

Windows users have always been used to distribute their folders over the various disks, but as a linux user I just want to store everything nice and decent in my home folder. The only problem therewith is that the SSD does not provide enough (cheap) space to store all my data on the fast memory.

To meet this limitation, I mounted my large HDDs into folders in /home/felix/. Hence I had the same problem as the windows users described above. Furthermore this solution is not suitable for a multi-user environment.
Wouldn’t it be nice if I can combine the advantages of both SSD and HDD, and I don’t mean just to buy a consumer grade SSHD? My idea is to create a RAID5 with 3 HDDs and cache them all with bcache.

The target audience of this blog posts are sophisticated linux users who are familiar with the command line. Hence, all commands are posted without sudo to avoid users overwriting their existing filesystems by just copying the lines.

bcache

bcache is a block device cache, backed by a fast SSD and is optimized to detect sequential accesses. Hence, I expect to get the high IOPS rates of a SSD combined with a high throughput when reading large files, as this transfer should entirely bypass the cache. In addition, the relatively small cache is not trashed by large file transfers. The cache can be used in a read and a read/write mode, where the latter is disabled by default. In my opinion the only disadvantage of bcache is that in cannot be installed in-place.

RAID5

As the mean time between failure decreases massively with each disk added to a pool, I use a RAID5 to keep my data save. Using that, you need at least 3 HDDs and a single HDD can break without data loss. A nice side effect is that the throughput to the disk array is higher compared to a single disk, as the data is written to all disks in parallel.

Be aware: RAID is no alternative for backups.

Setup

If you want to try this setup using a different OS, check if your kernel version is at least 3.19. Otherwise you might end up with a corrupted filesystem due to a bug.

But moment: Why not use ZFS with an SSD L2ARC and ZIL cache? At first, ZFS is until version 16.04 not native on Ubuntu. Furthermore, the memory demands of the filesystem are huge. Another aspect is the missing capability to change settings like the RAID mode «on the fly».

Читайте также:  User uid gid linux

Layout

/dev/sda1 ------------------- EXT4 / /dev/sda2 --------- | /dev/sdb -- /dev/bcache0 -| /dev/sdc -- /dev/bcache1 -|- BTRFS /home /dev/sdd -- /dev/bcache2 -|

Commands

Be careful, these commands reflect the setup above. Your disk lables will virtually certain differ from mine. Before doing any changes to the filesystem, make a backup to a disk and remove it from the system.

# create cache make-bcache -C /dev/sda2 make-bcache -B /dev/sdb /dev/sdc /dev/sdd #attache cache, determine cache cset.uuid bcache-super-show /dev/sda2 | grep cset.uuid echo > /sys/block/bcache0/bcache/attach echo > /sys/block/bcache1/bcache/attach echo > /sys/block/bcache2/bcache/attach #create btrfs mkfs.btrfs /dev/bcache0 /dev/bcache1 /dev/bcache2 -d raid5 -m raid5 #mount filesystem to copy home folder mount /dev/bcache0 /mnt #if you trust in your SSD, enable write caching echo 'writeback' /sys/block/bcache*/bcache/cache_mode

Benchmarks

I will definetly provide some IO benchmarks, but currently I do not have the time to specify and run these 🙁 However the subjective feeling is a way higher performance. The time to the fully loaded desktop decreased from around 1 minute to approx. 15 seconds.

Further Information

  • Nice article about bcache (in German): https://www.thomas-krenn.com/de/wiki/Bcache
  • Bcache on ArchLinux: https://wiki.archlinux.org/index.php/Bcache
  • SSD caching using ZFS: https://blogs.oracle.com/brendan/entry/test
  • Blogpost on a even more sophisticated setup: https://www.rath.org/ssd-caching-under-linux.html

Kommentare

Hey there, M.Mößbauer, i was reading you with much interest, a question if you may, is your setup still in working order? i read here from » https://wiki.ubuntu.com/ServerTeam/InstallOnBcache » quote : «I format both ext4 (had a recent issue with bcache + btrfs)».
Are you still happy with btrfs and bcache, as i d like to do it myself on a ubuntu server 16.04 at home, just for sport. Thank you for your time and articles.
Cheers, Cyril.

Antwort von Felix Mößbauer

Hi Cyril,
the setup is still working without any problems and the performance is great. However, compared to your link I do not use btrfs and bcache as rootfs. I would definitely not recommend that, as the time to bring the system back after a crash is way to long for me. If you have to do a recovery, you can’t just mount the partition in a live ubuntu. At first you have to install the appropriate packages and try to reassemble the cache. That is not exactly brilliant.

Another point to mention is even a bcached disk does not deliver the performance of a SSD. My recommendation is to split the SSD in two partitions: One for the OS (30 GB should be sufficient) and the remaining space for bcache.
As your setup is just for sport, try it and share your experience. I guess the problem mentioned in the article is a known bug which has been fixed at least a year ago (https://btrfs.wiki.kernel.org/index.php/Gotchas, Sect. Historical references).

Читайте также:  Email linux log file

Kommentar von Heiri | 17.11.2016

Hallo,
Ich habe diesen Blog mit grosser Aufmerksamkeit gelesen und angewendet.
Ich habe den Eindruck, dass BCache mir ein bisschen viel versteckt: Ich habe eine Harddisk aus dem Array ausgeschaltet. BTrFS zeigt mir keine «missing disk» an. Auch

btrfs device delete missing /dev/bcache0

sagt mir: «ERROR: not a btrfs filesystem: /dev/bcache0»
(Auch mit /dev/sd* klappt’s nicht.)
Hättest Du dazu irgendwelche Infos?

Antwort von Felix Mößbauer

BCache versteckt an und für sich gar nichts, sondern stellt lediglich ein Blockdevice bereit. Aus den drei Blockdevices bcache2 wird dann das btrfs Dateisystem aufgebaut.

Btrfs hat hierbei die Eigenheit, dass selbst bei RAID 5 ein Pool nur gemountet werden kann, wenn er nicht degraded ist (alle Geräte funktionsfähig). Fällt während des Betriebs eine Platte aus, bleibt der Pool weiterhin eingehängt.

Möchte man einen degraded Pool mounten, so muss «degraded» als Option übergeben werden:

mount /dev/bcache0 -o degraded

Wobei hier bcache0 durch ein noch vorhandenes Gerät des Pools ersetzt werden muss, d.h. falls bcache0 ausgefallen ist, einfach bcache1 nehmen. Siehe hierzu auch https://wiki.ubuntuusers.de/Installieren_auf_Btrfs-Dateisystem/#Probleme-und-Abhilfe

Ist der Pool wieder eingehängt, so kann die fehlende Platte mit `btrfs device delete missing` entfernt werden, oder mittels `btrfs replace` ersetzt werden.

Ich hoffe, ich konnte dir weiterhelfen.

Источник

Настройка SSD кеширования LVM Cache в CentOS

date

20.11.2020

user

VyacheslavK

directory

CentOS, Linux

comments

комментария 3

В этой статье мы покажем, как использовать SSD диск в качестве кэширующего устройства для двух SATA дисков, объединенных в RAID 1 на сервере с CentOS Linux на примере LVM Cache. В такой конфигурации кэширующее и кэшируемое устройство должно входить в одну группу томов LVM, а отключение/включение кэша можно выполнять без на ходу без без перезагрузок и перемонтирования.

SSD-кэширование — технология, когда твердотельные SSD накопители используются в качестве буфера для часто запрашиваемых данных. Система определяет данные по степени “теплоты” и перемещает их на быстрый накопитель, используемый в качестве кэширующего диска. Кэш позволяется системе получать доступ к данным в несколько раз быстрее, чем если бы они были получены с более медленного жесткого диска.

После установки ОС на RAID1 из двух SATA дисков, мы подключили отдельный SSD диск на 240 Гб. Проверим, что он доступен:

ssd диск в linux centos

С помощью менеджера пакетов установите утилиту lvm2, которая будет использоваться для реализации кэша .

установка lvm2

После установки ПО, нужно определить блочное устройство SSD-диска и раздел, к которому примонтирована нужная директория. В моем случае это будет директория home, раздел для которой я создал при установке ОС.

определить нвзвание раздела директории

Директории /home соответствует раздел /dev/md126p2. Обратите на это внимание, так как дальнейшая настройка будет связана именно с этим разделом.

Теперь можно перейти к настройке кэша. Отмонтируйте директорию:

umount /home

Для создания кэширующего SSD устройства выполните следующие команды

Читайте также:  Linux media cd rom

# pvcreate /dev/md126p2
# pvcreate /dev/sdb
# vgcreate ssdcache /dev/md126p2 /dev/sdb
# lvcreate -l 100%FREE -n hdd_data ssdcache /dev/md126p2
# lvcreate -L 16G -n ssd_meta ssdcache /dev/sdb
# lvcreate -l 90%FREE -n ssd_data ssdcache /dev/sdb
# lvconvert —type cache-pool —poolmetadata ssdcache/ssd_meta ssdcache/ssd_data
# lvconvert —type cache —cachemode writeback —cachepool ssdcache/ssd_data ssdcache/hdd_data

создание LVM кэша на SSD диске в linux

  • pvcreate — инициализирует физический том для LVM
  • vgcreate – создать группу томов
  • lvcreate -l – создать логический том, размер тома указывается в процентах
  • lvcreate -L – создание логического тома с метаданными для кэша
  • lvconvert — объединяем кэш-пул и логический том через метаданные. Задаем режима кеширования, в нашем случае writeback.

Есть два режима кеширования:

  • Writeback — данные сначала пишутся в кэш, затем на диск. Это более производительный вариант. При сбое кэширующего SSD диска, вы потеряете данные, которые не успели записаться на HDD. Хотя и не рекомендуется использовать этот режим на серверах с SSD без RAID, мне кажется с учетом надежности SSD дисков, это вполне рабочее решение.
  • Writethrough — данные сразу пишутся одновременно на диск и в кэш, после чего наиболее часто используемые попадают в кэш. Это безопасный вариант, подходит для серверов с 1*SSD, но гораздо менее производительный.

Выбранный режим кэширования относится только к операциям записи. На скорость чтения данных с LVM тома с кэшем он не влияет.

После выполнения всех настроек, можно проверить кэш на наличие ошибок:

Если ошибок нет, значит вы все сделали верно. Данная команда покажет процент использования кэша. На данный момент размер кэша будет чуть практически нулевой.

инвормация о lvm томах

Теперь создадим файловую систему на новом LVM разделе:

создать файловую систему на LVM разделе mkfs.ext4

После создания раздела, нужно определить его UUID, чтобы заменить его в fstab:

/dev/mapper/ssdcache-hdd_data: UUID="a89f0bb8-7bb2-4d83-87e2-39918154135b" TYPE="ext4"

получить UUID раздела

После замены UUID в fstab для нужного раздела, перезагрузите сервер и проверяем текущие настройки:

информация о разделах df

Чтобы узнать текущий режим работы SSD кэша, используйте команду:

lvs -o+cache_mode ssdcache режим работы ssd кэша

Для смены режима, используются команды:

# lvchange —cachemode writeback ssdcache
# lvchange —cachemode writethrough ssdcache

Если вам нужно заменить SSD диск, обязательно нужно удалить кэш:

# lvconvert —uncache /dev/ssdcache/hdd_data
# lvremove /dev/ssdcache/ssd_meta
# vgreduce ssdcache /dev/sdb
# pvremove /dev/sdb

После этого вы смело можете отключить сервер, заменить диске и добавить кэш заново с помощью следующих команд:

# pvcreate /dev/sdb
# vgextend ssdcache /dev/sdb
# lvcreate -L 16G -n ssd_meta ssdcache /dev/sdb
# lvcreate -l 90%FREE -n ssd_data ssdcache /dev/sdb
# lvconvert —type cache-pool —poolmetadata ssdcache/ssd_meta ssdcache/ssd_data
# lvconvert —type cache —cachemode writeback —cachepool ssdcache/ssd_data

На этом работа по настройке SSD-кэширования окончена. Определить скорость работы ssd-кэша обычными утилитами для замера операций чтения/записи, невозможно. Скорость будет такая же как на обычном SATA диске, но это все из-за специфики работы кэша, как ранее мы описывали, он срабатывает именно для “горячих” данных. При тестировании работы в различных приложениях, повышение скорости действительно ощутимо, где-то в 3-4 раза.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Источник

Оцените статью
Adblock
detector