2

I have set up /dev/sda3 on my SSD to cache /dev/sdb3 on my HDD as /dev/bcache0 using bcache in Ubuntu 13.10 (kernel 3.11.0-14-generic). I have formatted it as ext4.

I currently mount / (on my SSD) and /home (bcache) using these fstab options

# / (root) -> /dev/sda2 (SSD)
UUID={uuid for /dev/sda2}   /  ext4  discard,noatime,nodiratime,errors=remount-ro   0  1

# /home -> { /dev/bcache0 -> { /dev/sda3 -> /dev/sdb3 } }
UUID={uuid for /dev/bcache0}  /home  ext4  defaults   0  2

What I am wondering is if any mount options (e.g. discard (TRIM), noatime, etc) are useful when mounting bcache, or if bcache its self takes care of optimising the filesystem for the SSD and HDD partitions.

Please let me know if I have not made my question clear, thanks.

2 Answers 2

1

discard is a special case: bcache will (I think) make use of it to discard sectors, but won't pass it down the stack unless you have explicitly asked it to (echo 1 |sudo tee -a /sys/block/*/bcache/discard, which will be remembered across reboots). The best case for performance is that your filesystem sends discards (which means you need to put the flag in /etc/fstab) and bcache passes them down if and only if your SSD is SATA 3.1 (queued TRIM support).

Your filesystem is able to detect bcache as something like an SSD (rotational=0 in sysfs), which it may use to tune itself a bit differently. Aside from discard and noatime, I don't think there's a real need to stray from ext4 defaults.

2
  • I think what I want is for bcache to use discard and noatime on the SSD cache, but not on the HDD storage partition. Are you saying that by mounting the ext4 filesystem with those options and telling bcache to pass them down to each device, they will only be applied to applicable devices? Or will bcache try to use discard on my HDD as well? Or do I not need bcache to pass them down at all to get the benefits on the SSD cache? Apologies for my confusion. Jan 12, 2014 at 14:12
  • If you want bcache to discard buckets on the SSD, you must use bcache's sysfs flag. I'm not sure about the rest; it would take more familiarity with the code.
    – Gabriel
    Jan 12, 2014 at 23:42
0

If you put discard in the fstab mount arguments for a filesystem on a bcache device, then the filesystem will issue TRIM commands to bcache for deleted blocks. In theory bcache could use incoming TRIM commands as hints for freeing cached data, but I don't think it does, and there are hints searching online that bcache doesn't understand incoming TRIM commands at all (I found one unverified report of errors).

However, bcache can itself send TRIM commands when it deletes buckets on its caching SSD device. By default it doesn't enable this because TRIM is not queued on pre-SATA3.1 drives so it's slower, but on modern SSDs enabling discard gives better peformance.

TLDR; don't put "discard" in /etc/fstab for a filesystem on a bcache device, but endable bcache's discard in /sys/block/*/bcache/discard if your cache device is a modern SATA3.1 SSD.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.