I’m pleased to anounce that new releases of both Open CAS Framework and Open CAS Linux are now officially available. Let’s look what’s new in the v19.9 release.
Open CAS Framework v19.9
For OCF this release was marked by optimizations in memory allocations and metadata locking. The name of the game is performance. In the latest OCF version we reduced lock contention by increasing locking granularity, which enables OCF to handle higher bandwidths. We also reduced number of allocations in IO path to provide better latency.
The major new feature of this release is eviction noise reduction a.k.a. Promotion Policy. The Promotion Policy is simply a stateful filter which decides wheter given request should be inserted into the cache or not. There are two promotion policies available, ALWAYS and NHIT. ALWAYS is the delfault and it just marks all requests for insertion. That means there is no filtering at all and so it provides the same behavior as it was before promotion policy was introduced. Therefore the hero of this feature is the second available policy, NHIT, which does the actual filtering. NHIT counts number of accesses to individual core lines and marks for insertion those that has been accessed enough times to reach the threshold value. The NHIT policy remembers twice as many corelines as number of cachelines in the cache and forgets the least recently added (based on a ring buffer). Given that cache device is typically quite capacious, it gives core lines containing hot data plenty of time to reach the threshold value.
The statistics API has been exteded by adding per-io-class cache and core block statistics. This allows for more detailed inspection of ioclass functioning which is useful with increasingly advancing OCL classification mechanisms. Statistics API was in this release also slightly cleaned up by removing deprecated functions.
Name based management API
Cache and core IDs have been removed from OCF API and replaced with the names. This change was dictated by the fact that cache and especially core object in most cases are represented by the names in the adapter anyway, so enabling the use of the same names in OCF API seems to be logical step towards simplification of adapters. Providing unique cache/core name during its creation is now mandatory. The names are stored in the cache persistent meatadata and restored during the load/recovery operation.
IO API changes
Due to memory allocation improvements there was a small change in IO API.
queue are passed directly
ocf_volume_new_io() functions instead of being
ocf_io_set_queue() helpers. This makes it
possible to allocate all the io related data in the single allocation.
Now sychronization primitives constructors may return error codes, which is needed for compatibility with some environments. We also added destructors for some synchronization primitives that were missing them.
We constatnly work on improving our test coverage and so in this release we have added quite a few new tests and improvements in pyocf and the test framework.
Open CAS Linux v19.9
New version of OCL is based on OCF v19.9 and so it embodies all the improvements and features provided by the latest OCF release and some more.
More fine-grained io classification
In this release we extended list of available io classification criteria by few brand new powerful options:
- Request size
- Request address
- File extension
- Process name
- Process ID
This allows users to more precisely define which data they want to cache, and thus improve the performance gain.
As of now we use multi-queue kernel API for submitting IO to backend devices.
Support for newer kernels
We extended broad range of kernel versions on which Open CAS Linux works by covering kernels up to v5.2.