21 Sep, 2016

1 commit

  • For a host to access an Open-Channel SSD, it has to know its geometry,
    so that it writes and reads at the appropriate device bounds.

    Currently, the geometry information is kept within the kernel, and not
    exported to user-space for consumption. This patch exposes the
    configuration through sysfs and enables user-space libraries, such as
    liblightnvm, to use the sysfs implementation to get the geometry of an
    Open-Channel SSD.

    The sysfs entries are stored within the device hierarchy, and can be
    found using the "lightnvm" device type.

    An example configuration looks like this:

    /sys/class/nvme/
    └── nvme0n1
    ├── capabilities: 3
    ├── device_mode: 1
    ├── erase_max: 1000000
    ├── erase_typ: 1000000
    ├── flash_media_type: 0
    ├── media_capabilities: 0x00000001
    ├── media_type: 0
    ├── multiplane: 0x00010101
    ├── num_blocks: 1022
    ├── num_channels: 1
    ├── num_luns: 4
    ├── num_pages: 64
    ├── num_planes: 1
    ├── page_size: 4096
    ├── prog_max: 100000
    ├── prog_typ: 100000
    ├── read_max: 10000
    ├── read_typ: 10000
    ├── sector_oob_size: 0
    ├── sector_size: 4096
    ├── media_manager: gennvm
    ├── ppa_format: 0x380830082808001010102008
    ├── vendor_opcode: 0
    ├── max_phys_secs: 64
    └── version: 1

    Signed-off-by: Simon A. F. Lund
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Simon A. F. Lund
     

12 Jan, 2016

1 commit

  • An Open-Channel SSD shall be initialized before use. To initialize, we
    define an on-disk format, that keeps a small set of metadata to bring up
    the media manager on top of the device.

    The initial step is introduced to allow a user to format the disks for a
    given media manager. During format, a system block is stored on one to
    three separate luns on the device. Each lun has the system block
    duplicated. During initialization, the system block can be retrieved and
    the appropriate media manager can initialized.

    The on-disk format currently covers (struct nvm_system_block):

    - Magic value "NVMS".
    - Monotonic increasing sequence number.
    - The physical block erase count.
    - Version of the system block format.
    - Media manager type.
    - Media manager superblock physical address.

    The interface provides three functions to manage the system block:

    int nvm_init_sysblock(struct nvm_dev *, struct nvm_sb_info *)
    int nvm_get_sysblock(struct nvm *dev, struct nvm_sb_info *)
    int nvm_update_sysblock(struct nvm *dev, struct nvm_sb_info *)

    Each implement a part of the logic to manage the system block. The
    initialization creates the first system blocks and mark them on the
    device. Get retrieves the latest system block by scanning all pages in
    the associated system blocks. The update sysblock writes new metadata
    and allocates new block if necessary.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     

29 Oct, 2015

3 commits

  • This target allows an Open-Channel SSD to be exposed asas a block
    device.

    It implements a round-robin approach for sector allocation,
    together with a greedy cost-based garbage collector.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     
  • The implementation for Open-Channel SSDs is divided into media
    management and targets. This patch implements a generic media manager
    for open-channel SSDs. After a media manager has been initialized,
    single or multiple targets can be instantiated with the media managed as
    the backend.

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling
     
  • Open-channel SSDs are devices that share responsibilities with the host
    in order to implement and maintain features that typical SSDs keep
    strictly in firmware. These include (i) the Flash Translation Layer
    (FTL), (ii) bad block management, and (iii) hardware units such as the
    flash controller, the interface controller, and large amounts of flash
    chips. In this way, Open-channels SSDs exposes direct access to their
    physical flash storage, while keeping a subset of the internal features
    of SSDs.

    LightNVM is a specification that gives support to Open-channel SSDs
    LightNVM allows the host to manage data placement, garbage collection,
    and parallelism. Device specific responsibilities such as bad block
    management, FTL extensions to support atomic IOs, or metadata
    persistence are still handled by the device.

    The implementation of LightNVM consists of two parts: core and
    (multiple) targets. The core implements functionality shared across
    targets. This is initialization, teardown and statistics. The targets
    implement the interface that exposes physical flash to user-space
    applications. Examples of such targets include key-value store,
    object-store, as well as traditional block devices, which can be
    application-specific.

    Contributions in this patch from:

    Javier Gonzalez
    Dongsheng Yang
    Jesper Madsen

    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe

    Matias Bjørling