Blame README.md

Packit Service 310c69
# kvdo
Packit Service 310c69
Packit Service 310c69
A pair of kernel modules which provide pools of deduplicated and/or compressed
Packit Service 310c69
block storage.
Packit Service 310c69
Packit Service 310c69
## Background
Packit Service 310c69
Packit Service 310c69
VDO (which includes [kvdo](https://github.com/dm-vdo/kvdo) and
Packit Service 310c69
[vdo](https://github.com/dm-vdo/vdo)) is software that provides inline
Packit Service 310c69
block-level deduplication, compression, and thin provisioning capabilities for
Packit Service 310c69
primary storage. VDO installs within the Linux device mapper framework, where
Packit Service 310c69
it takes ownership of existing physical block devices and remaps these to new,
Packit Service 310c69
higher-level block devices with data-efficiency capabilities.
Packit Service 310c69
Packit Service 310c69
Deduplication is a technique for reducing the consumption of storage resources
Packit Service 310c69
by eliminating multiple copies of duplicate blocks. Compression takes the
Packit Service 310c69
individual unique blocks and shrinks them with coding algorithms; these reduced
Packit Service 310c69
blocks are then efficiently packed together into physical blocks.  Thin
Packit Service 310c69
provisioning manages the mapping from LBAs presented by VDO to where the data
Packit Service 310c69
has actually been stored, and also eliminates any blocks of all zeroes.
Packit Service 310c69
Packit Service 310c69
With deduplication, instead of writing the same data more than once each
Packit Service 310c69
duplicate block is detected and recorded as a reference to the original
Packit Service 310c69
block. VDO maintains a mapping from logical block addresses (used by the
Packit Service 310c69
storage layer above VDO) to physical block addresses (used by the storage layer
Packit Service 310c69
under VDO). After deduplication, multiple logical block addresses may be mapped
Packit Service 310c69
to the same physical block address; these are called shared blocks and are
Packit Service 310c69
reference-counted by the software.
Packit Service 310c69
Packit Service 310c69
With VDO's compression, multiple blocks (or shared blocks) are compressed with
Packit Service 310c69
the fast LZ4 algorithm, and binned together where possible so that multiple
Packit Service 310c69
compressed blocks fit within a 4 KB block on the underlying storage.  Mapping
Packit Service 310c69
from LBA is to a physical block address and index within it for the desired
Packit Service 310c69
compressed data.  All compressed blocks are individually reference counted for
Packit Service 310c69
correctness.
Packit Service 310c69
Packit Service 310c69
Block sharing and block compression are invisible to applications using the
Packit Service 310c69
storage, which read and write blocks as they would if VDO were not
Packit Service 310c69
present. When a shared block is overwritten, a new physical block is allocated
Packit Service 310c69
for storing the new block data to ensure that other logical block addresses
Packit Service 310c69
that are mapped to the shared physical block are not modified.
Packit Service 310c69
Packit Service 310c69
This public source release of VDO includes two kernel modules, and a set of
Packit Service 310c69
userspace tools for managing them. The "kvdo" module implements fine-grained
Packit Service 310c69
storage virtualization, thin provisioning, block sharing, and compression; the
Packit Service 310c69
"uds" module provides memory-efficient duplicate identification. The userspace
Packit Service 310c69
tools include a pair of python scripts, "vdo" for creating and managing VDO
Packit Service 310c69
volumes, and "vdostats" for extracting statistics from those volumes.
Packit Service 310c69
Packit Service 310c69
## Documentation
Packit Service 310c69
Packit Service 310c69
- [RHEL8 VDO Documentation](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deduplicating_and_compressing_storage/index)
Packit Service 310c69
- [RHEL7 VDO Integration Guide](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/vdo-integration)
Packit Service 310c69
- [RHEL7 VDO Evaluation Guide](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/vdo-evaluation)
Packit Service 310c69
Packit Service 310c69
## Releases
Packit Service 310c69
Packit Service 310c69
Each branch on this project is intended to work with a specific release of
Packit Service 310c69
Enterprise Linux (Red Hat Enterprise Linux, CentOS, etc.). We try to maintain
Packit Service 310c69
compatibility with active Fedora releases, but some modifications may be
Packit Service 310c69
required.
Packit Service 310c69
Packit Service 310c69
Version | Intended Enterprise Linux Release | Supported With Modifications
Packit Service 310c69
------- | --------------------------------- | -------------------------------
Packit Service 310c69
6.1.x.x | EL7 (3.10.0-*.el7) |
Packit Service 310c69
6.2.x.x | EL8 (4.18.0-*.el8) | Fedora 28, Fedora 29, Fedora 30, Rawhide
Packit Service 310c69
* Pre-built versions with the required modifications for the referenced Fedora
Packit Service 310c69
  releases can be found
Packit Service 310c69
  [here](https://copr.fedorainfracloud.org/coprs/rhawalsh/dm-vdo) and can be
Packit Service 310c69
  used by running `dnf copr enable rhawalsh/dm-vdo`.
Packit Service 310c69
Packit Service 310c69
## Status
Packit Service 310c69
Packit Service 310c69
VDO was originally developed by Permabit Technology Corp. as a proprietary set
Packit Service 310c69
of kernel modules and userspace tools. This software and technology has been
Packit Service 310c69
acquired by Red Hat, has been relicensed under the GPL (v2 or later), and this
Packit Service 310c69
repository begins the process of preparing for integration with the upstream
Packit Service 310c69
kernel.
Packit Service 310c69
Packit Service 310c69
While this software has been relicensed there are a number of issues that must
Packit Service 310c69
still be addressed to be ready for upstream.  These include:
Packit Service 310c69
Packit Service 310c69
- Conformance with kernel coding standards
Packit Service 310c69
- Use of existing EXPORT_SYMBOL_GPL kernel interfaces where appropriate
Packit Service 310c69
- Refactoring of primitives (e.g. cryptographic) to appropriate kernel
Packit Service 310c69
  subsystems
Packit Service 310c69
- Support for non-x86-64 platforms
Packit Service 310c69
- Refactoring of platform layer abstractions and other changes requested by
Packit Service 310c69
  upstream maintainers
Packit Service 310c69
Packit Service 310c69
We expect addressing these issues to take some time. In the meanwhile, this
Packit Service 310c69
project allows interested parties to begin using VDO immediately. The
Packit Service 310c69
technology itself is thoroughly tested, mature, and in production use since
Packit Service 310c69
2014 in its previous proprietary form.
Packit Service 310c69
Packit Service 310c69
## Building
Packit Service 310c69
Packit Service 310c69
In order to build the kernel modules, invoke the following command
Packit Service 310c69
from the top directory of this tree:
Packit Service 310c69
Packit Service 310c69
        make -C /usr/src/kernels/`uname -r` M=`pwd`
Packit Service 310c69
Packit Service 310c69
* Patched sources that work with the most recent upstream kernels can be found
Packit Service 310c69
  [here](https://github.com/rhawalsh/kvdo).
Packit Service 310c69
Packit Service 310c69
## Communication channels
Packit Service 310c69
Packit Service 310c69
Community feedback, participation and patches are welcome to the
Packit Service 310c69
vdo-devel@redhat.com mailing list -- subscribe
Packit Service 310c69
[here](https://www.redhat.com/mailman/listinfo/vdo-devel).
Packit Service 310c69
Packit Service 310c69
## Contributing
Packit Service 310c69
Packit Service 310c69
This project is currently a stepping stone towards integration with the Linux
Packit Service 310c69
kernel. As such, contributions are welcome via a process similar to that for
Packit Service 310c69
Linux kernel development. Patches should be submitted to the
Packit Service 310c69
vdo-devel@redhat.com mailing list, where they will be considered for
Packit Service 310c69
inclusion. This project does not accept pull requests.
Packit Service 310c69
Packit Service 310c69
## Licensing
Packit Service 310c69
Packit Service 310c69
[GPL v2.0 or later](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html).
Packit Service 310c69
All contributions retain ownership by their original author, but must also
Packit Service 310c69
be licensed under the GPL 2.0 or later to be merged.
Packit Service 310c69