librbd 选项

详情见块设备

缓存选项

内核缓存

Ceph 块设备的内核驱动可利用 Linux 页缓存来提升性能。

Ceph 块设备的用户空间实现(即 librbd )不能利用 Linux 页缓存,所以它自己实现了内存缓存,名为“ RBD 缓存”。 RBD 缓存行为就像硬盘缓存一样端正。当 OS 发送了 barrier 或 flush 请求时,所有脏数据都会写入 OSDs 。这意味着只要 VM 会正确地发送 flush 命令(即内核版本大于 2.6.32 ),使用回写缓存和常见物理硬盘一样安全。此缓存用最近最少使用( Least Recently Used, LRU )算法,而且在回写模式下它能合并相邻请求以提高吞吐量。

New in version 0.46.

Ceph 支持为 RBD 提供回写缓存。要启用此功能,在 ceph.conf 配置文件的 [client] 段下添加 rbdcache=truelibrbd 默认不会进行任何缓存。写和读都直接到达存储集群,而且只有当数据的所有副本都写入磁盘后写操作才会返回。启用缓存后,写操作会立即返回,除非未刷写的字节数大于 rbdcachemaxdirty 。这种情况下,写动作会触发回写机制并一直阻塞,直到足够多的字节数被刷写。

New in version 0.47.

Ceph 支持为 RBD 提供透写缓存。你可以设置缓存的大小,以及从回写缓存切换到透写缓存的目标和临界值。要启用透写模式,把 rbdcachemaxdirty 置为 0。这意味着只有当数据的所有副本都写入磁盘后写操作才会返回,但可能会直接从缓存中读取数据。缓存信息保存在客户端的内存中,每个 RBD 映像有其自己的缓存。对客户端来说缓存位于本地,所以如果有其他用户访问某个映像,不会存在缓存一致性的问题。打开缓存时,在 RBD 之上不能运行 GFS 或 OCFS 。

RBD 选项应该位于 ceph.conf 配置文件的 [client] 段下,可用选项有:

rbdcache
描述:允许为 RADOS 块设备( RBD )提供缓存。
类型:Boolean
是否必需:No
默认值:true
rbdcachesize
描述:RBD 缓存大小,单位是字节。
类型:64-bit Integer
是否必需:No
默认值:32MiB
rbdcachemaxdirty
描述:使缓存触发回写的 dirty 临界值,单位是字节。若为 0 ,直接使用透写缓存。
类型:64-bit Integer
是否必需:No
约束条件:必须小于 rbdcachesize
默认值:24MiB
rbdcachetargetdirty
描述:缓存开始向数据存储写回数据前的 dirtytarget 。不会阻塞到缓存的写动作。
类型:64-bit Integer
是否必需:No
约束条件:必须小于 rbdcachemaxdirty.
默认值:16MiB
rbdcachemaxdirtyage
描述:写回开始前,脏数据在缓存中的暂存时间。
类型:Float
是否必需:No
默认值:1.0

New in version 0.60.

rbdcachewritethroughuntilflush
描述:开始进入透写模式,并且在收到首个 flush 请求后切换到回写模式。启用该项保守但安全,以防 rbd 之上的虚拟机内核太老而不能发送 flush ,例如 Linux 2.6.32 之前的 virtio 驱动。
类型:Boolean
是否必需:No
默认值:true

预读选项

New in version 0.86.

RBD 支持预读或预取功能,以此优化小块的顺序读。此功能通常应该由访客操作系统(在虚拟机的情况下)处理,但是引导加载程序可能不会发出高效的读请求。如果停用缓存功能,预读也会自动被禁用。

rbdreadaheadtriggerrequests
描述:触发预读的顺序读请求数量。
类型:Integer
是否必需:No
默认值:10
rbdreadaheadmaxbytes
描述:预读请求的最大尺寸。如果是零,禁用预读。
类型:64-bit Integer
是否必需:No
默认值:512KiB
rbdreadaheaddisableafterbytes
描述:从 RBD 映像读取这么多字节后,预读功能将被禁用,直到关闭。这样访客操作系统一旦启动后就可以接管预读了。设为 0 时仍开启预读。
类型:64-bit Integer
是否必需:No
默认值:50MiB