2018-03-08 21:25:24 +08:00
|
|
|
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)
|
2018-06-29 09:00:14 +08:00
|
|
|
start_sector n (default: 0)
|
|
|
|
offset from the start of cache device in 512-byte sectors
|
2018-03-08 21:25:24 +08:00
|
|
|
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
|
|
|
|
commited
|
|
|
|
autocommit_time ms (default: 1000)
|
|
|
|
autocommit time in milliseconds. The data is automatically
|
|
|
|
commited 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
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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
|