115 lines
4.2 KiB
ReStructuredText
115 lines
4.2 KiB
ReStructuredText
|
=================
|
||
|
Writecache target
|
||
|
=================
|
||
|
|
||
|
The writecache target caches writes on persistent memory or on SSD. It
|
||
|
doesn't cache reads because reads are supposed to be cached in page cache
|
||
|
in normal RAM.
|
||
|
|
||
|
When the device is constructed, the first sector should be zeroed or the
|
||
|
first sector should contain valid superblock from previous invocation.
|
||
|
|
||
|
Constructor parameters:
|
||
|
|
||
|
1. type of the cache device - "p" or "s"
|
||
|
- p - persistent memory
|
||
|
- s - SSD
|
||
|
2. the underlying device that will be cached
|
||
|
3. the cache device
|
||
|
4. block size (4096 is recommended; the maximum block size is the page
|
||
|
size)
|
||
|
5. the number of optional parameters (the parameters with an argument
|
||
|
count as two)
|
||
|
|
||
|
start_sector n (default: 0)
|
||
|
offset from the start of cache device in 512-byte sectors
|
||
|
high_watermark n (default: 50)
|
||
|
start writeback when the number of used blocks reach this
|
||
|
watermark
|
||
|
low_watermark x (default: 45)
|
||
|
stop writeback when the number of used blocks drops below
|
||
|
this watermark
|
||
|
writeback_jobs n (default: unlimited)
|
||
|
limit the number of blocks that are in flight during
|
||
|
writeback. Setting this value reduces writeback
|
||
|
throughput, but it may improve latency of read requests
|
||
|
autocommit_blocks n (default: 64 for pmem, 65536 for ssd)
|
||
|
when the application writes this amount of blocks without
|
||
|
issuing the FLUSH request, the blocks are automatically
|
||
|
committed
|
||
|
autocommit_time ms (default: 1000)
|
||
|
autocommit time in milliseconds. The data is automatically
|
||
|
committed if this time passes and no FLUSH request is
|
||
|
received
|
||
|
fua (by default on)
|
||
|
applicable only to persistent memory - use the FUA flag
|
||
|
when writing data from persistent memory back to the
|
||
|
underlying device
|
||
|
nofua
|
||
|
applicable only to persistent memory - don't use the FUA
|
||
|
flag when writing back data and send the FLUSH request
|
||
|
afterwards
|
||
|
|
||
|
- some underlying devices perform better with fua, some
|
||
|
with nofua. The user should test it
|
||
|
cleaner
|
||
|
when this option is activated (either in the constructor
|
||
|
arguments or by a message), the cache will not promote
|
||
|
new writes (however, writes to already cached blocks are
|
||
|
promoted, to avoid data corruption due to misordered
|
||
|
writes) and it will gradually writeback any cached
|
||
|
data. The userspace can then monitor the cleaning
|
||
|
process with "dmsetup status". When the number of cached
|
||
|
blocks drops to zero, userspace can unload the
|
||
|
dm-writecache target and replace it with dm-linear or
|
||
|
other targets.
|
||
|
max_age n
|
||
|
specifies the maximum age of a block in milliseconds. If
|
||
|
a block is stored in the cache for too long, it will be
|
||
|
written to the underlying device and cleaned up.
|
||
|
metadata_only
|
||
|
only metadata is promoted to the cache. This option
|
||
|
improves performance for heavier REQ_META workloads.
|
||
|
pause_writeback n (default: 3000)
|
||
|
pause writeback if there was some write I/O redirected to
|
||
|
the origin volume in the last n milliseconds
|
||
|
|
||
|
Status:
|
||
|
|
||
|
1. error indicator - 0 if there was no error, otherwise error number
|
||
|
2. the number of blocks
|
||
|
3. the number of free blocks
|
||
|
4. the number of blocks under writeback
|
||
|
5. the number of read blocks
|
||
|
6. the number of read blocks that hit the cache
|
||
|
7. the number of write blocks
|
||
|
8. the number of write blocks that hit uncommitted block
|
||
|
9. the number of write blocks that hit committed block
|
||
|
10. the number of write blocks that bypass the cache
|
||
|
11. the number of write blocks that are allocated in the cache
|
||
|
12. the number of write requests that are blocked on the freelist
|
||
|
13. the number of flush requests
|
||
|
14. the number of discarded blocks
|
||
|
|
||
|
Messages:
|
||
|
flush
|
||
|
Flush the cache device. The message returns successfully
|
||
|
if the cache device was flushed without an error
|
||
|
flush_on_suspend
|
||
|
Flush the cache device on next suspend. Use this message
|
||
|
when you are going to remove the cache device. The proper
|
||
|
sequence for removing the cache device is:
|
||
|
|
||
|
1. send the "flush_on_suspend" message
|
||
|
2. load an inactive table with a linear target that maps
|
||
|
to the underlying device
|
||
|
3. suspend the device
|
||
|
4. ask for status and verify that there are no errors
|
||
|
5. resume the device, so that it will use the linear
|
||
|
target
|
||
|
6. the cache device is now inactive and it can be deleted
|
||
|
cleaner
|
||
|
See above "cleaner" constructor documentation.
|
||
|
clear_stats
|
||
|
Clear the statistics that are reported on the status line
|