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

Performance improvements

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.

Promotion Policy

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.

API improvements

Statistics API

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. Now the addr, size, io_class, flags and queue are passed directly to ocf_core_new_io() and ocf_volume_new_io() functions instead of being set by ocf_io_configure() and ocf_io_set_queue() helpers. This makes it possible to allocate all the io related data in the single allocation.

Env improvements

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.

More tests

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.

Multi-queue support

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.