![]() Queue settle is a mechanism to wait for all OCF processing on a given queue to finish. In some tests simply waiting for I/O to finish is not enough. Most notably some statistics are potentially incremented after user triggered I/O is finished. This is due to asynchronous nature of I/O operations and OCF approach to statistics update, where only eventual consistency is guaranteed without explicit mechanism available to query whether the final state is reached yet. However it is fully in the adapter power to determine this, as OCF executes in context of API calls from the adapter (like I/O submission, ocf_queue_run, ocf_cleaner_run, management operations) and I/O completion callbacks. Queue settle is a mechanism to assure ocf_queue_run is not being executed by the thread associated with a queue. With queue settle mechanism it is straightforward for the adapter to wait for cache statistics to reach fixed values: 1. wait for all I/O to OCF to finish 2. settle all I/O queues 3. make sure background cleaner is not active Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com> |
||
---|---|---|
.github/ISSUE_TEMPLATE | ||
doc | ||
env/posix | ||
example/simple | ||
inc | ||
src | ||
tests | ||
.pep8speaks.yml | ||
codecov.yml | ||
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
- Source Code
- Deployment
- Examples
- Unit Tests
- Build Test
- Functional Tests
- Contributing
- Security
Documentation
OCF documentation is available on GitHub Pages. Doxygen API documentation is available here.
Source Code
Source code is available in the official OCF GitHub repository:
git clone https://github.com/Open-CAS/ocf.git
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 $OCFDIR src O=$SRCDIR
make -C $OCFDIR 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 $OCFDIR src O=$SRCDIR CMD=cp
make -C $OCFDIR 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 tests 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
Functional Tests
OCF repository contains dedicated functional test framework written in python and executed via pytest. With the use of ctypes it is possible to call, wrap ocf functions and use C compatible data types.
To run functional tests you need to install the following:
- python3 (>=3.6.7)
- pytest (Install with
pip3 install pytest
)
To run all functional tests (in compliance with the configuration file) compile using makefile located in ./tests/functional/Makefile
and then use the following command:
pytest
Contributing
Feel like making OCF better? Don't hesitate to submit a pull request!
You can find more information about our contribution process
here.
In case of any questions feel free to contact maintainer.
Security
To report a potential security vulnerability please follow the instructions here