format | snapshot/clone | thin-provsion | DISCARD | encryption | compression |
raw over file | N | Y | N | N | N |
raw over sheepdog | Y | Y | Y | N | N |
qcow2 over sheepdog | Y | Y | Y | Y | Y |
Sheepdog默認狀況下是沒有開啓對象緩存的。在本地節點可使用「-w」來開啓對象緩存。「-w」的例子以下:node
sheep -w size=200G # 開啓空間大小爲200G的對象緩存git
sheep -w size=50G,directio # 開啓空間爲50G且使用O_DIRECT方式的對象緩存後端
用戶但願使用更快的磁盤和對象緩存來加速IO性能,您還能夠指定對象緩存目錄所在地,以下:緩存
sheep -w size=200G,dir=/path/to/cache # 開啓200G的空間,而且存儲到/path/to/cache目錄中安全
工做原理:ide
1. 以本地文件做爲QEMU塊設備的後端性能
QEMU 《----》 VM ^ | writeback/readahead pages V | POSIX file 《 --- 》 page cache 《 --- 》 disk | kernel does page wb/ra and reclaim加密
2. 以sheepdog的對象存儲爲後端spa
QEMU 《-----》VM ^ | push/pull objects V | Sheepdog device 《----》 object cache 《---》 Sheepdog replicated object storage. | Sheep daemon does object push/pull and reclaim操作系統
對象是在硬盤上以固定的大小文件的形式實現的,因此對對象緩存,這些對象都是在運行着sheep守護進程的節點上固定大小的文件,sheep在他們身上直接讀寫。在這個意義上, 除了節點上那些對象的元數據 (inode和dentry)之外,咱們不消耗內存。
Discard命令容許操做系統通知底層的存儲器,哪些數據塊不在被視爲"使用中"狀態,並能夠擦除;這是精簡配置機制的一種方式,而且用於SSD和VM;
VM中啓用discard:
環境要求: QEMU>=1.5 , vanilla kernel >= 3.4 or RHEL-based kernel >= 6.3, Sheepdog latest from git repo.
對QEMU設備來講,各類IDE和scsi支持discard支持,virtio-blk 不支持。默認Discard是關閉的。須要經過下面方式來支持
1 # for virtio-scsi device backed by sheepdog volume named 'data' 2 3 $ qemu-system-x86_64 -drive if=none,id=disk,file=sheepdog:data,cache=writeback,discard=on -device scsi-hd,drive=disk
該機制旨在幫助磁盤數據崩潰後仍能保證一致性,並提升寫入性能。Sheepdog日誌僅是順序方式記錄全部的IO操做,該日誌是在向vdi寫入數據前發生的,記錄在node上的
若是咱們用一個專門設備來託管日誌,性能會得到更大提高,由於咱們按照順序記錄寫入,此時咱們將隨機寫入轉變成順序寫入,在HDD盤上會更快。
由於提早記入寫入操做,咱們之後端寫入的方式安全的放棄O_DSYNC(能夠SAS磁盤上提升80倍性能)
size是必要的參數:
1 $ sheep -j dir=/path/to/dir,size=256M, # enable external journaling with the size 256M 2 $ sheep -j dir=/path/to/dir,size=256M,skip # like above, but skip recovery at startup 3 $ sheep -j size=512M # enable internal journaling with the size 512M