Flash Pool Read Policies

In the blog “How to Create and Use Flash Pool?”, I outlined the steps to create and use Flash Pool. I also mentioned that you are not required to tune it manually to place the data properly, as Flash Pool will manage the data movement and placement for you automatically.


What if you enjoy performance tuning and you want to fine tune Flash Pool yourself? No problem. Flash Pool provides users with some knobs to tune. Let’s explore the four Flash Pool’s read policies below.


1. read-cache = none. If this policy is set on a particular volume, no data from that volume will be placed on SSDs for any host read operations from this volume thereafter. You may want to do that if you know data on this volume is infrequently used, or fast read latency from this volume is not a concern.



2. read-cache = meta. Metadata is data structures or entities that the controller uses to keep track of user data. This policy means only metadata (and no user data) will be placed on SSDs for host read operations. In general, the size of metadata is a fraction of the user data size. If the user datasets are too large to be effectively cached on SSDs, you may choose to use this policy.



3. read-cache = random-read. This policy will cause both metadata and randomly read data being placed on SSDs for accelerating subsequent host random read operations. This means if the host reads are sequential in nature, those sequential reads will not be cached on SSDs. This is the default policy, as it is likely the common use case.



4. read-cache = random-read-write. This policy really makes it interesting. What it does is that it’ll let you cache metadata, random reads and random writes on SSDs for accelerating subsequent host random read operations. It is categorized as a read policy. But you wonder why. Why should a read caching policy deal with random writes? I think we can probably come up with a case where a host needs to read the data soon after it has been written to the hard drives.



Note that all these policies can be set on a per-volume basis. For example, you can set read-cache=meta for volume1 and at the same time set read-cache=random-read for volume2.


Thanks for reading.