![]() In order to synchronize management operations with I/O OCF maintains in-flight request counters. For example such ref counters are used during ocf_mngt_detach to drain requests accessing cache metadata (cache requests counter) and in ocf_mngt_flush where we wait for outstanding requests sent in write back mode (dirty requests counter). Typically I/O threads increment cache/dirty counter when creating request and decrement counter on request completion. Management thread sets atomic variable to signal the start of management operation. I/O threads react to this by changing I/O requests mode so that the cache/dirty reference counter is not incremented. As a result reference counter keeps getting decremented. Management thread waits for the counter to drop to 0 and proceeds with management operation with assumption that no cache/dirty requests are in progress. This patch introduces a handy utility for requests reference counting logic. ocf_refcnt_inc / dec are used to increment/ decrement counter. ocf_refcnt_freeze() makes subsequent ocf_refcnt_inc() calls to return false, indicating that counter cannot be incremented at this moment. ocf_refcnt_register_zero_cb can be used to asynchronously wait for counter to drop to 0. Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com> |
||
---|---|---|
doc | ||
env/posix | ||
example/simple | ||
inc | ||
src | ||
tests | ||
LICENSE | ||
Makefile | ||
README.md |
Open CAS Framework
Open CAS Framework (OCF) is high performance block storage caching meta-library written in C. It's entirely platform and system independent, accessing system API through user provided environment wrappers layer. OCF tightly integrates with the rest of software stack, providing flawless, high performance, low latency caching utility.
In this readme:
Documentation
Doxygen API documentation is available here.
More documentation, tutorial and examples will be available soon.
Source Code
Source code is available in the official OCF GitHub repository:
git clone https://github.com/open-cas/ocf
cd ocf
Deployment
OCF doesn't compile as separate library. It's designed to be included into another software stack. For this purpose OCF provides Makefile with two useful targets for deploying its source into target directories. Assuming OCFDIR is OCF directory, and SRCDIR and INCDIR are respectively your source and include directories, use following commands to deploy OCF into your project:
make -C $OCFDIF src O=$SRCDIR
make -C $OCFDIF inc O=$INCDIR
By default this will not copy OCF source files but create symbolic links to them, to avoid source duplication and allow for easy OCF code modification. If you prefer to copy OCF source files (e.g. you don't want to distribute whole OCF repository as your submodule) you can use following commands:
make -C $OCFDIF src O=$SRCDIR CMD=cp
make -C $OCFDIF inc O=$INCDIR CMD=cp
Examples
OCF is shipped with examples, which are complete, compillable and working programs, containing lot of comments that explain basics of caching. They are great starting point for everyone who wants to start working with OCF.
Examples can be found in directory example/
.
Each example contains Makefile which can be used to compile it.
Unit Tests
OCF is shipped with dedicated unit test framework based on Cmocka.
To run unit test you need to install following packages:
- Cmake (>= 3.8.1)
- Cmocka (>= 1.1.1)
- ctags (>= 5.8)
To run unit tests use following command:
./tests/unit/framework/run_unit_tests.py
Build Test
OCF repository contains basic build test. It uses default POSIX environment. To run this test, use following commands:
cd tests/build/
make
Contributing
Feel like making OCF better? Don't hesitate to submit a pull request!
In case of any questions feel free to contact maintainer.