Go to file
David Lee 6184ad7759 alru: add parameter `max_dirty_ratio'
With a high dirty ratio and occupancy, OCF might unable to map cache lines
for new requests, thus pass-through the I/O to core devices.  IOPS will
drop afterwards.  We need to control the dirty ratio.

Existing `alru' policy gives user the chance to control the stale buffer
time, activity threshold etc.  They can affect the dirty ratio of the cache
device, but in an empirical manner, more or less.  Introducing
`max_dirty_ratio' can make it explicit.

At first glance, it might be better to implement a dedicated cleaner policy
directly targeting dirty ratio goal, so that the `alru' parameters remains
orthogonal.  But one the other hand, we still need to flush dirty cache
lines periodically, instead of just keeping a watermark of dirty ratio.
It indicates that existing `alru' parameters are still required if we
develop a new policy, and it seems reasonable to make it a parameter.

To sum up, this patch does the following:
- added a 'max_dirty_ratio' parameter with default value 100;
- with default value 100, `alru' cleaner is identical to what is was;
- with value N less than 100, the cleaner (when waken up) will active
  brought dirty ratio to N, regardless of staleness time.

Signed-off-by: David Lee <live4thee@gmail.com>
2022-10-01 17:48:14 +08:00
.github copyright/license: Extend file header check 2022-09-08 13:13:18 +02:00
doc doc: Add composite volume requirements documentation 2022-06-02 09:49:39 +02:00
env/posix posix env: assert in rwsem unlock 2022-09-23 07:09:41 +02:00
example/simple a few typo fixes 2022-10-01 17:48:07 +08:00
inc alru: add parameter `max_dirty_ratio' 2022-10-01 17:48:14 +08:00
src alru: add parameter `max_dirty_ratio' 2022-10-01 17:48:14 +08:00
tests copyright/license: Add missing copyright header 2022-09-08 13:13:18 +02:00
.pep8speaks.yml Adapt all python code to PEP8 style standards 2019-06-13 17:55:41 +02:00
codecov.yml Added codecov.yml configuration file 2020-01-09 11:20:19 +01:00
LICENSE Fix license 2021-10-28 13:08:50 +02:00
Makefile Fix license 2021-10-28 13:08:50 +02:00
README.md Fix status badges URLs 2020-11-05 15:38:04 +01:00

Open CAS Framework

Build Status Tests Status Coverity status codecov License

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

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