Lines Matching +full:cache +full:- +full:block +full:- +full:size
2 A block layer cache (bcache)
6 nice if you could use them as cache... Hence bcache.
11 This is the git repository of bcache-tools:
12 https://git.kernel.org/pub/scm/linux/kernel/git/colyli/bcache-tools.git/
17 It's designed around the performance characteristics of SSDs - it only allocates
18 in erase block sized buckets, and it uses a hybrid btree/log to track cached
19 extents (which can be anywhere from a single sector to the bucket size). It's
20 designed to avoid random writes at all costs; it fills up an erase block
25 great lengths to protect your data - it reliably handles unclean shutdown. (It
29 Writeback caching can use most of the cache for buffering writes - writing
36 average is above the cutoff it will skip all IO from that task - instead of
38 thus entirely bypass the cache.
41 from disk or invalidating cache entries. For unrecoverable errors (meta data
43 in the cache it first disables writeback caching and waits for all dirty data
47 You'll need bcache util from the bcache-tools repository. Both the cache device
50 bcache make -B /dev/sdb
51 bcache make -C /dev/sdc
53 `bcache make` has the ability to format multiple devices at the same time - if
54 you format your backing devices and cache device at the same time, you won't
57 bcache make -B /dev/sda /dev/sdb -C /dev/sdc
59 If your bcache-tools is not updated to latest version and does not have the
60 unified `bcache` utility, you may use the legacy `make-bcache` utility to format
61 bcache device with same -B and -C parameters.
63 bcache-tools now ships udev rules, and bcache devices are known to the kernel
71 device, it'll be running in passthrough mode until you attach it to a cache.
73 slow devices as bcache backing devices without a cache, and you can choose to add
83 /dev/bcache/by-uuid/<uuid>
84 /dev/bcache/by-label/<label>
91 You can control bcache devices through sysfs at /sys/block/bcache<N>/bcache .
92 You can also control them through /sys/fs//bcache/<cset-uuid>/ .
94 Cache devices are managed as sets; multiple caches per set isn't supported yet
96 cache set shows up as /sys/fs/bcache/<UUID>
99 ---------
101 After your cache device and backing device are registered, the backing device
102 must be attached to your cache set to enable caching. Attaching a backing
103 device to a cache set is done thusly, with the UUID of the cache set in
106 echo <CSET-UUID> > /sys/block/bcache0/bcache/attach
109 your bcache devices. If a backing device has data in a cache somewhere, the
110 /dev/bcache<N> device won't be created until the cache shows up - particularly
113 If you're booting up and your cache device is gone and never coming back, you
116 echo 1 > /sys/block/sdb/bcache/running
118 (You need to use /sys/block/sdb (or whatever your backing device is called), not
119 /sys/block/bcache0, because bcache0 doesn't exist yet. If you're using a
120 partition, the bcache directory would be at /sys/block/sdb/sdb2/bcache)
122 The backing device will still use that cache set if it shows up in the future,
124 cache, don't expect the filesystem to be recoverable - you will have massive
128 --------------
130 Bcache tries to transparently handle IO errors to/from the cache device without
132 configurable, and defaults to 0) it shuts down the cache device and switches all
135 - For reads from the cache, if they error we just retry the read from the
138 - For writethrough writes, if the write to the cache errors we just switch to
139 invalidating the data at that lba in the cache (i.e. the same thing we do for
140 a write that bypasses the cache)
142 - For writeback writes, we currently pass that error back up to the
143 filesystem/userspace. This could be improved - we could retry it as a write
144 that skips the cache so we don't have to error the write.
146 - When we detach, we first try to flush any dirty data (if we were running in
152 --------------
157 to force it to run without the cache::
164 start your bcache without its cache, like so::
166 host:/sys/block/sdb/sdb1/bcache# echo 1 > running
171 B) Bcache does not find its cache::
173 host:/sys/block/md5/bcache# echo 0226553a-37cf-41d5-b3ce-8b1e944543a8 > attach
175 [ 1933.478179] bcache: __cached_dev_store() Can't attach 0226553a-37cf-41d5-b3ce-8b1e944543a8
176 [ 1933.478179] : cache set not found
179 or disappeared and came back, and needs to be (re-)registered::
181 host:/sys/block/md5/bcache# echo /dev/sdh2 > /sys/fs/bcache/register
187 Please report it to the bcache development list: linux-bcache@vger.kernel.org
197 of the backing device created with --offset 8K, or any value defined by
198 --data-offset when you originally formatted bcache with `bcache make`.
202 losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev
206 If your cache is in writethrough mode, then you can safely discard the
207 cache device without losing data.
210 E) Wiping a cache device
214 host:~# wipefs -a /dev/sdh2
218 After you boot back with bcache enabled, you recreate the cache and attach it::
220 host:~# bcache make -C /dev/sdh2
221 UUID: 7be7e175-8f4c-4f99-94b2-9c904d227045
222 Set UUID: 5bc072a8-ab17-446d-9744-e247949913c1
231 [ 650.549228] bcache: register_cache() registered cache device sdh2
233 start backing device with missing cache::
235 host:/sys/block/md5/bcache# echo 1 > running
237 attach new cache::
239 host:/sys/block/md5/bcache# echo 5bc072a8-ab17-446d-9744-e247949913c1 > attach
240 … bcache: bch_cached_dev_attach() Caching md5 as bcache0 on set 5bc072a8-ab17-446d-9744-e247949913c1
245 host:/sys/block/sda/sda7/bcache# echo 1 > detach
248 host:~# wipefs -a /dev/nvme0n1p4
254 host:/sys/fs/bcache/b7ba27a1-2398-4649-8ae3-0959f57ba128# ls -l cache0
255 …lrwxrwxrwx 1 root root 0 Feb 25 18:33 cache0 -> ../../../devices/pci0000:00/0000:00:1d.0/0000:70:0…
256 host:/sys/fs/bcache/b7ba27a1-2398-4649-8ae3-0959f57ba128# echo 1 > stop
257 …kernel: [ 917.041908] bcache: cache_set_free() Cache set b7ba27a1-2398-4649-8ae3-0959f57ba128 unr…
261 host:~# wipefs -a /dev/nvme0n1p4
265 G) dm-crypt and bcache
275 fdisk run and re-register a changed partition table, which won't work
282 host:/sys/block/bcache0/bcache# echo 1 > stop
286 host:/sys/block/bcache0# cd bcache
289 In this case, you may have to unregister the dmcrypt block device that
294 bcache: cache_set_free() Cache set 5bc072a8-ab17-446d-9744-e247949913c1 unregistered
297 then it can be reused. This would be true of any block device stacking
302 host:/sys/fs/bcache# ls -l */{cache?,bdev?}
303 …xrwx 1 root root 0 Mar 5 09:39 0226553a-37cf-41d5-b3ce-8b1e944543a8/bdev1 -> ../../../devices/vir…
304 …xrwx 1 root root 0 Mar 5 09:39 0226553a-37cf-41d5-b3ce-8b1e944543a8/cache0 -> ../../../devices/vi…
305 …39 5bc072a8-ab17-446d-9744-e247949913c1/cache0 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01…
308 and stop the cache::
310 host:/sys/fs/bcache/5bc072a8-ab17-446d-9744-e247949913c1# echo 1 > stop
318 ---------------------------
324 - Backing device alignment
326 The default metadata size in bcache is 8k. If your backing device is
328 width using `bcache make --data-offset`. If you intend to expand your
330 raid stripe size to get the disk multiples that you would like.
332 For example: If you have a 64k stripe size, then the following offset
338 volume to the following data-spindle counts without re-aligning::
342 - Bad write performance
349 # echo writeback > /sys/block/bcache0/bcache/cache_mode
351 - Bad performance, or traffic not going to the SSD that you'd expect
353 By default, bcache doesn't cache everything. It tries to skip sequential IO -
356 accessed data out of your cache.
358 But if you want to benchmark reads from cache, and you start out with fio
359 writing an 8 gigabyte test file - so you want to disable that::
361 # echo 0 > /sys/block/bcache0/bcache/sequential_cutoff
365 # echo 4M > /sys/block/bcache0/bcache/sequential_cutoff
367 - Traffic's still going to the spindle/still getting cache misses
369 In the real world, SSDs don't always keep up with disks - particularly with
374 To avoid that bcache tracks latency to the cache device, and gradually
380 # echo 0 > /sys/fs/bcache/<cache set>/congested_read_threshold_us
381 # echo 0 > /sys/fs/bcache/<cache set>/congested_write_threshold_us
385 - Still getting cache misses, of the same data
388 the way cache coherency is handled for cache misses. If a btree node is full,
389 a cache miss won't be able to insert a key for the new data and the data
390 won't be written to the cache.
396 benchmarking, if you're trying to warm the cache by reading a bunch of data
397 and there's no other traffic - that can be a problem.
399 Solution: warm the cache by doing writes, or use the testing branch (there's
403 Sysfs - backing device
404 ----------------------
406 Available at /sys/block/<bdev>/bcache, /sys/block/bcache*/bcache and
407 (if attached) /sys/fs/bcache/<cset-uuid>/bdev*
410 Echo the UUID of a cache set to this file to enable caching.
420 Write to this file to detach from a cache set. If there is dirty data in the
421 cache, it will be flushed first.
424 Amount of dirty data for this backing device in the cache. Continuously
425 updated unlike the cache set's version, but may be slightly off.
431 Size of readahead that should be performed. Defaults to 0. If set to e.g.
432 1M, it will round cache miss reads up to that size, but without overlapping
433 existing cache entries.
440 A sequential IO will bypass the cache once it passes this threshold; the
449 maximum acceptable sequential size for any single request.
454 no cache: Has never been attached to a cache set.
456 clean: Part of a cache set, and there is no cached dirty data.
458 dirty: Part of a cache set, and there is cached dirty data.
461 dirty data cached but the cache set was unavailable; whatever data was on the
469 When dirty data is written to the cache and it previously did not contain
474 If nonzero, bcache tries to keep around this percentage of the cache dirty by
479 Rate in sectors per second - if writeback_percent is nonzero, background
485 still be added to the cache until it is mostly full; only meant for
488 Sysfs - backing device stats
493 aggregated in the cache set directory as well.
496 Amount of IO (both reads and writes) that has bypassed the cache
503 Hits and misses for IO that is intended to skip the cache are still counted,
507 Counts instances where data was going to be inserted into the cache from a
508 cache miss, but raced with a write and data was already present (usually 0
509 since the synchronization for cache misses was rewritten)
511 Sysfs - cache set
514 Available at /sys/fs/bcache/<cset-uuid>
523 Block size of the cache devices.
526 Amount of memory currently used by the btree cache
529 Size of buckets
531 cache<0..n>
532 Symlink to each of the cache devices comprising this cache set.
535 Percentage of cache device which doesn't contain dirty data, and could
541 Clears the statistics associated with this cache
544 Amount of dirty data is in the cache (updated when garbage collection runs).
547 Echoing a size to this file (in human readable units, k/M/G) creates a thinly
548 provisioned volume backed by the cache set.
551 These determines how many errors we accept before disabling the cache.
553 reaches io_error_limit dirty data is written out and the cache is disabled.
556 Journal writes will delay for up to this many milliseconds, unless a cache
564 Write to this file to shut down the cache set - waits until all attached
571 Detaches all backing devices and closes the cache devices; if dirty data is
574 Sysfs - cache set internal
594 Longest chain in the btree node cache's hash table
597 Counts instances where while data was being read from the cache, the bucket
598 was reused and invalidated - i.e. where the pointer was stale after the read
604 Sysfs - Cache device
607 Available at /sys/block/<cdev>/bcache
610 Minimum granularity of writes - should match hardware sector size.
616 Size of buckets
627 Size of the freelist as a percentage of nbuckets. Can be written to to
629 artificially reduce the size of the cache at runtime. Mostly for testing
630 purposes (i.e. testing how different size caches affect your hit rate), but
642 Total buckets in this cache
645 Statistics about how recently data in the cache has been accessed.
646 This can reveal your working set size. Unused is the percentage of
647 the cache that doesn't contain any data. Metadata is bcache's
648 metadata overhead. Average is the average priority of cache buckets.
652 Sum of all data that has been written to the cache; comparison with