Giter Club home page Giter Club logo

mpool's Introduction

Mpool: Object Storage Media Pool

Notice: HSE versions 2.0 and later do not make use of mpool. As a result, mpool is no longer actively maintained.

Mpool is a Linux® loadable kernel module that implements an object storage device interface for SSDs and other solid-state storage. It provides a high-performance alternative to file systems or raw block devices for applications that can benefit from its simple object storage model and unique features.

Mpool is designed for

  • Traditional block SSDs
  • Emerging SSD interfaces, such as NVMe Zoned Namespaces (ZNS), which often expose controller or media behaviors that impose I/O constraints
  • Persistent memory

Mpool insulates client applications from these storage device and media details.

Mpool currently supports traditional block SSDs only.

Mpool was originally developed for the HSE storage engine, but is made available as a separate project.

Key Features

  • Object storage model comprising immutable blocks (blobs) and appendable logs
  • Objects can optionally be placed on multiple classes of solid-state storage
  • Facilities to memory-map arbitrary collections of block objects into a linear address space
  • Proactive management of block object data in the Linux page cache based on object-level usage metrics
  • Simultaneously access block object data directly and memory-mapped with no performance penalty
  • Management model and CLI similar to that of Linux LVM
  • C API library that can be embedded in any application

Getting Started

The mpool Wiki contains all the information you need to get started with mpool.

mpool's People

Contributors

beckerg avatar bhaveshvasandani avatar hse-devops avatar nabeelmmd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

mpool's Issues

the folder scripts has a CMakeLists empty

hello,

the scripts folder has a CMakeLists empty,

I have tried this following but it miss the tingting syntactic and the file isn't enough typed :

cmake_minimum_required( VERSION 3.6 )

cmake_policy( SET CMP0046 NEW )
cmake-policy( SET CMP0053 NEW )

project ( scripts C )
set( PROJECT_VERSION            "${BUILD_PKG_VERSION}")
set( PROJECT_HOMEPAGE_URL       "https://github.com/hse-project/mpool/tree/master/scripts" )
set( CMAKE_PROJECT_VERSION      "${PROJECT_VERSION}" )
set( CMAKE_PROJECT_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}" )

message( STATUS "Configuring project ${PROJECT_NAME} ${PROJECT_VERSION} ${PROJECT_HOMEPAGE_URL} ${BUILD_PKG_TAG} commo>

set( CMAKE_C_STANDART 99 )
set( CMAKE_INSTALL_PREFIX /usr )

include(deb)
include(modules-load.d)
include(sysctl.d)
include(tmpfiles.d)
include(cmake)
include(dev)
include(rpm)
include(systemd)
include(udev)

set( SCRIPTS_DEB_INSTALL_PREFIX         ${PROJECT_BINARY_DIR}/deb)
set( SCRIPTS_MODULES-LOAD.D_PREFIX      ${PROJECT_BINARY_DIR}/modules-load.d)
set( SCRIPTS_SYSCTL.D_PREFIX            ${PROJECT_BINARY_DIR}/sysctl.d)
set( SCRIPTS_TMPFILES.D_PREFIX          ${PROJECT_BINARY_DIR}/tmpfiles.d)
set( SCRIPTS_CMAKE_DIR                  ${PROJECT_SOURCE_DIR}/cmake)
set( SCRIPTS_DEV_PREFIX                 ${PROJECT_BINARY_DIR}/dev)
set( SCRIPTS_RPM_PREFIX                 ${PROJECT_BINARY_DIR}/rpm)
set( SCRIPTS_SYSTEMD_PREFIX             ${PROJECT_BINARY_DIR}/systemd)
set( SCRIPTS_udev_PREFIX                ${PROJECT_BINARY_DIR}/udev)

set( CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${MPOOL_STAGE_INSTALL_PREFIX}/bin)

add_compile_options(
    ${BUILD_CFLAGS} -g3 -std=gnu99 -Wall -Werror
    -Wlogical-op -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized
    -Wextra -Wno-conversion -Wno-sign-conversion -Wno-sign-compare -Wno-unused-parameter
    )


file( WRITE ${CMAKE_BINARY_DIR}/CTestCustom.cmake.in )

configure_file( ${CMAKE_BINARY_DIR}CTestCustom.cmake.in
        ${RPM_BINARY_DIR}mpool-devel.spec.in 
        ${RPM_BINARY_DIR}mpool-test.spec.in 
        ${RPM_BINARY_DIR}mpool.spec.in
)

when I run the cmake .. in build directory I have following :


[root@localhost scripts]# ls
CMkeLists.txt  build  deb  modules-load.d  sysctl.d  tmpfiles.d
bin            cmake  dev  rpm             systemd   udev
[root@localhost scripts]# cd build
[root@localhost build]# cmake ..
[root@localhhe source directory "/etc/openmpi-4.1.1/mpool/scripts" does not appear to contain CMakeList,s.txt.
Specify --help for usage, or press the help button on the CMake GUI.

in the mpool build directorie the cmake .. answer following :

 [root@localhost build]# cmake ..
-- Configuring project mpool   common...
CMake Error at CMakeLists.txt:25 (include):
  include could not find load file:

    /etc/openmpi-4.1.1/mpool/scripts/


-- Enabling valgrind support
-- Configuring mpool in /etc/openmpi-4.1.1/mpool/src/mpool
-- Configuring mpool in /etc/openmpi-4.1.1/mpool/src/mptest
-- Configuring ui /etc/openmpi-4.1.1/mpool/src/cli
-- Configuring mcache_api in /etc/openmpi-4.1.1/mpool/test/test_apps/mcache_api
-- Configuring mpiotest in /etc/openmpi-4.1.1/mpool/test/test_apps/mpiotest
-- Configuring ui /etc/openmpi-4.1.1/mpool/test/test_apps/mpft
-- Configuring mpool samples in /etc/openmpi-4.1.1/mpool/samples
CMake Error at CMakeLists.txt:231 (include):
  include could not find load file:

    /etc/openmpi-4.1.1/mpool/etc/openmpi-4.1.1/mpool/scripts/CMakeLists.txt


CMake Error: File /etc/openmpi-4.1.1/mpool/etc/openmpi-4.1.1/mpool/scripts/cmake/CTestCustom.cmake.in does not exist.
CMake Error at CMakeLists.txt:237 (configure_file):
  configure_file Problem configuring file


-- Compiler flags:
 --   INCLUDE_DIRECTORIES     /etc/openmpi-4.1.1/mpool/build/ext_install/include;/etc/openmpi-4.1.1/mpool/build/stage/include
--   COMPILE_DEFINITIONS     
--   COMPILE_OPTIONS         -g3;-std=gnu99;-Wall;-Werror;-Wlogical-op;-Wno-missing-field-initializers;-Wuninitialized;-Wmaybe-uniniti1. alized;-Wextra;-Wno-conversion;-Wno-sign-conversion;-Wno-sign-compare;-Wno-unused-parameter;-Wimplic6it-fallthrough=0;-fPIC
--   LINK_DIRECTORIES        
--   LINK_LIBRARIES          
--   LINK_OPTIONS            
-- Configuring incomplete, errors occurred!
See also "/etc/openmpi-4.1.1/mpool/build/CMakeFiles/CMakeOutput.log".

Thank you in advance to help myself fully run scripts of cmake compiling,

Regards.

Azaretdodo.

mpool on ARM

i saw the requirements said x86. so no ARM support correct? if so, where does the limitation exist?

Silently Fails on 5.13

since upgrading to 5.13, puts with HSE report success with an error code of 0, but upon trying to get, the key is reported as not existing.

how shall i begin debugging this?

there was a new warning when building the kernel module since upgrading (because i guess Clear Linux's GCC package was updated in the process too) which i overcame quick and dirty but texting replacing -Werror to "". but i highly doubt that has anything to do with this. but just fyi.

./include/asm-generic/bitops/find.h: In function ‘find_last_bit’:
./include/linux/bits.h:25:36: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]
   25 |                 __is_constexpr((l) > (h)), (l) > (h), 0)))
      |                                    ^
./include/linux/build_bug.h:16:62: note: in definition of macro ‘BUILD_BUG_ON_ZERO’
   16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
      |                                                              ^
./include/linux/bits.h:25:17: note: in expansion of macro ‘__is_constexpr’
   25 |                 __is_constexpr((l) > (h)), (l) > (h), 0)))
      |                 ^~~~~~~~~~~~~~
./include/linux/bits.h:38:10: note: in expansion of macro ‘GENMASK_INPUT_CHECK’
   38 |         (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
      |          ^~~~~~~~~~~~~~~~~~~
./include/asm-generic/bitops/find.h:162:45: note: in expansion of macro ‘GENMASK’
  162 |                 unsigned long val = *addr & GENMASK(size - 1, 0);
      | 

upstream hope/timeline?

Any hope/timeline to get the kernel module upstreamed? Cursory google didn't turn up relevant threads.

Add more API documentation

Hi HSE Team,
Thanks for releasing this code.

The Wiki / API Reference page says "See the mpool API documentation in the mpool.h header file." That file contains functions for operating on various data structures and objects. How about adding some explanations of those data structures and how to use them? This would make the code more useful.

  • mpool
    • params
    • properties
    • device properties
  • mclass
  • mlog
    • This needs extra careful explanation of the structure of mlog objects.
    • What does it mean to skip bytes inside it?
    • Does mpool_mlog_erase() actually zero the bytes or just send a "trim" command to the SSD?
  • objid, OID
  • mdc
    • mdc_capacity
    • properties
    • compaction
  • mblock
    • properties
  • mpool_mcache_map
  • Details of how to properly use asynchronous modes of certain functions. Explain how to detect completion and errors.
  • Explain the proper way to handle errors from the API.
  • State the runtimes of functions. For example, say whether or not mpool_mlog_len() reads the whole object.

Best,
Michael

Occasional Lingering Open Mpool When SIGKILL-ing Process

not every time... but every few dozen times that i pkill -KILL processname my mpool gets stuck.

so when i try to destroy it I get resource busy (even though the process is 100% dead)...

root@clr-fc2a36cf35a645a0a1e17af84fb1eab8~ # mpool destroy hotmpool
mpool: Unable to destroy mpool hotmpool (mpool/mpctl.c:142: Device or resource busy)

have you ever seen this before? is there any way I can force destroy it in these circumstances besides rebooting the machine?

also makes me a bit worried that if the application was killed by the OS in production that the mpool would be unrecoverable without a reboot... or at the very least terminal-ing into the machine.

i can collect any data you need so that next time it happens i can share them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.