71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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
 | 
						|
		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
 |