| ================= | |
| 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 | |
| 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 |