Skip to content

Releases: OpenMPDK/uNVMe

v19.01

09 Jan 09:00
Compare
Choose a tag to compare

uNVMe-Blobfs
: SPDK Blob filesystem Improvement on LBA SSD

  1. Support Multiqueue
    - spdk_file_read() API now supports multiple io channels, in turn, nvme queues.
    - will further apply Multiqueue on write path later on

  2. Cache / Prefetch Policy
    - Introduce 8 new APIs to leverage SPDK Blobfs cache and readahead

    // set/get retain read cache flag (default = false)
    void spdk_file_set_retain_cache(struct spdk_file *file, bool retain);
    bool spdk_file_get_retain_cache(struct spdk_file *file);
    
    // set/get readahead size (default = 256*2 KB)
    void spdk_file_set_prefetch_size(struct spdk_file *file, int size);
    int spdk_file_get_prefetch_size(struct spdk_file* file);
    
    // set/get readahead threshold (default = 128 KB)
    void spdk_file_set_prefetch_threshold(struct spdk_file *file, int size);
    int spdk_file_get_prefetch_threshold(struct spdk_file *file);
    
    //  set/get direct_io (default = buffered IO)
    void spdk_file_set_direct_io(struct spdk_file *file, uint32_t direct_io);
    uint32_t spdk_file_get_direct_io(struct spdk_file *file);
    
  3. BM tools on uNVMe-blobfs
    - app/Blobfs_perf : a novel BM tool working on blobfs layer
    - app/uNVMe_rocksdb : apply changes to reflect uNVMe-blobfs
    - further includes vanilla rocksdb / spdk /dpdk for comparison with uNVMe-Blobfs (will be removed on public release)

  4. Documents

  1. Bug Fix for KV SSD

    • kv_itearte_open() was not return the error code(KV_ERR_ITERATE_NO_AVAILABLE_HANDLE = 0x91) and (KV_ERR_ITERATE_HANDLE_ALREADY_OPENED = 0x92). Now it is fixed to properly return the error codes.
  2. Refactorings

Notes: The uNVMe-blobfs changes only apply on LBA SSD, not influences on KV SSD.

v18.11

06 Nov 11:05
Compare
Choose a tag to compare

- Note: v18.11 includes changes only for KV SSD, not for normal LBA SSD.

v18.07

06 Jul 05:49
Compare
Choose a tag to compare
  • App
    : introduce rocksdb plugin on a LBA SSD (thanks to Krishna Kanth Reddy)

    • app/rocksdb
    • app/mkfs
    • app/fuse

    : fio

    • unvme2_fio_plugin covers more workload generation - thread:cpu:queue:ssd = a : b : c : d
  • API
    : KV SSD

    • iterate - open / read / read_async / close /info
    • multiple keyspace
    • exist

    : LBA / KV SSD

    • improve functionality for flexible io completion, format, and device status.
  • Installation
    : script/pkgdep.sh - package installation helper
    : applied a patch to cover a wider kernel version during dpdk compilation

  • Documentation
    : /doc/uNVMe2.0_SDK_Evaluation_Guide_v1.0.pdf
    : README

  • Etc
    : improve unittest functionality
    : fix bugs

v18.05

06 Jul 05:48
Compare
Choose a tag to compare

OpenMPDK (Open Memory Platform Development Kit)

The Open Memory Platform Development Kit (OpenMPDK) will provide proper SW stack of OS and application to enabling solution devices (NVMe SSDs and future solution devices).
It will include user level drivers, kernel drivers, sample applications and tools.

The development kit currently includes:
• User Level NVMe driver (uNVMe driver).

uNVMe driver
uNVMe driver is an user space NVMe driver implemented as a library to which the sample applications can be linked with. Using the SDK, the sample will initialize the NVMe devices, submit and process the I/Os directly to the NVMe devices with a polling mode. It can reduce overhead which are occurred by kernel context switched and I/O handling on interrupt mode and provide optimized performance with lower latency SSD such as NVMe SSDs.
This release also includes the sample applications and tools for the uNVMe driver. An application will be combined with the uNVMe driver into one process and takes the ownership of a device upon execution and controls the device. An NVMe device can only be accessed by one application at any given time and an application can access multiple devices simultaneously. The sample applications can control the device using the provided APIs described below.


Prerequisites

  • #sudo apt-get install -y gcc g++ make libcunit1-dev libaio-dev libssl-dev check
  • #sudo apt-get install xfsprogs
  • #sudo apt-get install linux-tools-common linux-cloud-tools-4.2.0-16 linux-tools-4.2.0-16 linux-tools-4.2.0-16-generic linux-cloud-tools-4.2.0-16-generic

In CentOS, some packages like linux-tools-common are not available. Use below commands (Example for CentOS 7 on x86_64):

optional libraries
srandom - fast random generator : https://github.com/josenk/srandom
libcheck - unit test framework for C : https://github.com/libcheck/check


Installation

build dpdk/spdk

  • #make.sh intel

build OpenMPDK-unvme libuio.a

  • #make.sh all (Note: This is identical with ./make.sh driver && ./make.sh io && ./make.sh sdk)

build app

  • #make.sh app

Source tree
uNVMe
├── app
│ ├── external
│ │ └── fio
│ └── fio_plugin
├── driver
│ ├── build
│ │ ├── debug
│ │ └── release
│ ├── core
│ ├── external
│ │ ├── common
│ │ ├── dpdk
│ │ └── spdk
│ ├── include
│ ├── mk
│ └── test
│ ├── command_ut
│ ├── hash_perf
│ ├── iterate
│ ├── iterate_async
│ ├── udd_perf
│ └── udd_perf_async
├── include
├── io
│ ├── deps
│ ├── doxygen
│ ├── kv_perf_scripts
│ ├── src
│ │ ├── common
│ │ └── slab
│ └── tests
└── script