|
@@ -86,16 +86,27 @@ If passthrough is selected, useful when the cache contents are not known
|
|
|
to be coherent with the origin device, then all reads are served from
|
|
|
the origin device (all reads miss the cache) and all writes are
|
|
|
forwarded to the origin device; additionally, write hits cause cache
|
|
|
-block invalidates. Passthrough mode allows a cache device to be
|
|
|
-activated without having to worry about coherency. Coherency that
|
|
|
-exists is maintained, although the cache will gradually cool as writes
|
|
|
-take place. If the coherency of the cache can later be verified, or
|
|
|
-established, the cache device can can be transitioned to writethrough or
|
|
|
-writeback mode while still warm. Otherwise, the cache contents can be
|
|
|
-discarded prior to transitioning to the desired operating mode.
|
|
|
+block invalidates. To enable passthrough mode the cache must be clean.
|
|
|
+Passthrough mode allows a cache device to be activated without having to
|
|
|
+worry about coherency. Coherency that exists is maintained, although
|
|
|
+the cache will gradually cool as writes take place. If the coherency of
|
|
|
+the cache can later be verified, or established through use of the
|
|
|
+"invalidate_cblocks" message, the cache device can be transitioned to
|
|
|
+writethrough or writeback mode while still warm. Otherwise, the cache
|
|
|
+contents can be discarded prior to transitioning to the desired
|
|
|
+operating mode.
|
|
|
|
|
|
A simple cleaner policy is provided, which will clean (write back) all
|
|
|
-dirty blocks in a cache. Useful for decommissioning a cache.
|
|
|
+dirty blocks in a cache. Useful for decommissioning a cache or when
|
|
|
+shrinking a cache. Shrinking the cache's fast device requires all cache
|
|
|
+blocks, in the area of the cache being removed, to be clean. If the
|
|
|
+area being removed from the cache still contains dirty blocks the resize
|
|
|
+will fail. Care must be taken to never reduce the volume used for the
|
|
|
+cache's fast device until the cache is clean. This is of particular
|
|
|
+importance if writeback mode is used. Writethrough and passthrough
|
|
|
+modes already maintain a clean cache. Future support to partially clean
|
|
|
+the cache, above a specified threshold, will allow for keeping the cache
|
|
|
+warm and in writeback mode during resize.
|
|
|
|
|
|
Migration throttling
|
|
|
--------------------
|
|
@@ -174,7 +185,7 @@ Constructor
|
|
|
block size : cache unit size in sectors
|
|
|
|
|
|
#feature args : number of feature arguments passed
|
|
|
- feature args : writethrough. (The default is writeback.)
|
|
|
+ feature args : writethrough or passthrough (The default is writeback.)
|
|
|
|
|
|
policy : the replacement policy to use
|
|
|
#policy args : an even number of arguments corresponding to
|
|
@@ -190,6 +201,13 @@ Optional feature arguments are:
|
|
|
back cache block contents later for performance reasons,
|
|
|
so they may differ from the corresponding origin blocks.
|
|
|
|
|
|
+ passthrough : a degraded mode useful for various cache coherency
|
|
|
+ situations (e.g., rolling back snapshots of
|
|
|
+ underlying storage). Reads and writes always go to
|
|
|
+ the origin. If a write goes to a cached origin
|
|
|
+ block, then the cache block is invalidated.
|
|
|
+ To enable passthrough mode the cache must be clean.
|
|
|
+
|
|
|
A policy called 'default' is always registered. This is an alias for
|
|
|
the policy we currently think is giving best all round performance.
|
|
|
|
|
@@ -247,7 +265,11 @@ E.g.
|
|
|
|
|
|
Invalidation is removing an entry from the cache without writing it
|
|
|
back. Cache blocks can be invalidated via the invalidate_cblocks
|
|
|
-message, which takes an arbitrary number of cblock ranges.
|
|
|
+message, which takes an arbitrary number of cblock ranges. Each cblock
|
|
|
+must be expressed as a decimal value, in the future a variant message
|
|
|
+that takes cblock ranges expressed in hexidecimal may be needed to
|
|
|
+better support efficient invalidation of larger caches. The cache must
|
|
|
+be in passthrough mode when invalidate_cblocks is used.
|
|
|
|
|
|
invalidate_cblocks [<cblock>|<cblock begin>-<cblock end>]*
|
|
|
|