Poseidon OS (POS) is a light-weight storage OS

Overview

Poseidon OS

Poseidon OS (POS) is a light-weight storage OS that offers the best performance and valuable features over storage network. POS exploits the benefit of NVMe SSDs by optimizing storage stack and leveraging the state-of-the-art high speed interface. Please find project details at documentations page.

Table of Contents

Source Code

git clone https://github.com/poseidonos/poseidonos.git

Prerequisites

This script will automatically install the minimum dependencies required to build Poseidon OS.

cd script
sudo ./pkgdep.sh

How to Build

1. Build Library

cd lib
sudo ./build_ibof_lib.sh all

2. Build Source Code

cd script
sudo ./build_ibofos.sh

Preparation

cd script/
sudo ./setup_env.sh

Run POS

sudo ./bin/ibofos

Learning POS Commands

This document demonstrates how to start up POS and manage storage resources. The target audience is whoever wants to learn about POS and explore its capabilities. The minimum knowledge of Linux administration would be sufficient.

Prerequisites

Hardware: Poseidon server
 - Reference server h/w implementation engineered by Samsung and Inspur
 - The number of processors: 2
 - The number of memory slots: 32
 - Memory speed: 3200 MT/s
 - Network speed: up to 600 GbE
 - PCIe generation: gen4
 - Storage: E1.S SSD * 32 ea
OS: Ubuntu 18.04 (kernel: 5.3.0-19-generic)
Application binary: ibofos, cli
Application config: /etc/ibofos/conf/ibofos.conf
Application scripts to configure environments
Writable file system for RPC socket, application logs/dump, and hugepage info

Step 1. Start POS application

# Check if you have local NVMe devices attached to the OS with its Kernel Device Driver.
[email protected]:~$ sudo fdisk -l | grep nvme
Disk /dev/nvme0n1: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk /dev/nvme1n1: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk /dev/nvme2n1: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk /dev/nvme3n1: 64 GiB, 68719476736 bytes, 134217728 sectors
 
# Become root and run POS application as a daemon process.
[email protected]:~$ sudo -s
 
# Start POS
[email protected]:IBOF_HOME/script# ./start_ibofos.sh
 
# The first four messages show that the local NVMe devices have been detached from the OS, which exploits its Kernel Device Driver. The last four messages show that they are now attached to SPDK, which exploits Userspace Device Driver.
0000:04:00.0 (15ad 07f0): uio_pci_generic -> nvme
0000:0c:00.0 (15ad 07f0): uio_pci_generic -> nvme
0000:13:00.0 (15ad 07f0): uio_pci_generic -> nvme
0000:1b:00.0 (15ad 07f0): uio_pci_generic -> nvme
0000:04:00.0 (15ad 07f0): nvme -> uio_pci_generic
0000:0c:00.0 (15ad 07f0): nvme -> uio_pci_generic
0000:13:00.0 (15ad 07f0): nvme -> uio_pci_generic
0000:1b:00.0 (15ad 07f0): nvme -> uio_pci_generic
 
# The hugepage reservation is done at this step, but no message is displayed.
# Hugepages are reserved for about 1/3 of total size of primary memory in the target system.
 
/home/ibof/projects/ibofos-devel/script
apport.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apport
Current maximum # of memory map areas per process is 65535.
Setup env. done!
 
 
ibofos is running in background...logfile=ibofos.log
 
# Verify if the application is up and running
[email protected]:IBOF_HOME/script# ps -ef | grep ibofos | grep -v grep
root      1400     1 99 Nov 26 ?      10-12:03:09 ../bin/ibofos
 
# At this point, you shouldn't see NVMe devices except for the OS device itself if it is also an NVMe device.
# All of them should have been detached from the OS and attached to SPDK library with Userspace Device Driver.
[email protected]:~$ sudo fdisk -l | grep nvme

Step 2. Create Write Buffer within DRAM

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py bdev_malloc_create -h
usage: rpc.py bdev_malloc_create [-h] [-b NAME] [-u UUID]
                                 total_size block_size
 
positional arguments:
  total_size            Size of malloc bdev in MB (float > 0)
  block_size            Block size for this bdev
 
optional arguments:
  -h, --help            show this help message and exit
  -b NAME, --name NAME  Name of the bdev
  -u UUID, --uuid UUID  UUID of the bdev
 
# This command will create a SPDK block device called "malloc bdev" that is a userspace ramdisk with the total size of 8192 MB, the block size of 512 B, and name as "uram0".
# Currently, only 512 bytes of block size is supported for the write buffer.
[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py bdev_malloc_create -b uram0 8192 512
uram0
The recommended size of uram0 may differ by environment. Please refer to "bdev" section in Learning POS Environment for further details.

Step 3. Check POS information and version

# Root is not necessary in order to run "cli" commands.
# The actual output may differ from this according to the env you execute the command
[email protected]:IBOF_HOME/bin$ ./cli system info
  
  
Request to Poseidon OS
    xrId        :  2825009e-2f88-11eb-8607-005056adb61a
    command     :  GETIBOFOSINFO
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "capacity": "0GB (0B)",
    "rebuildingProgress": "0",
    "situation": "DEFAULT",
    "state": "OFFLINE",
    "used": "0GB (0B)"
}
  
[email protected]:IBOF_HOME/bin$ ./cli system version
  
  
Request to Poseidon OS
    xrId        :  3256290e-2f88-11eb-96a6-005056adb61a
    command     :  GETVERSION
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "version": "pos-0.7.3"
}

Step 4. Scan NVMe Devices

# If this is the first run, you wouldn't see any devices showing up in the output as in the following.
[email protected]:IBOF_HOME/bin$ ./cli device list
  
  
Request to Poseidon OS
    xrId        :  2067c0c1-2f8a-11eb-a513-005056adb61a
    command     :  LISTDEVICE
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
 
  
# Let POS scan devices. POS should discover NVMe devices and remember their information (in memory)
[email protected]:IBOF_HOME/bin$ ./cli device scan
  
  
Request to Poseidon OS
    xrId        :  4ce8066f-2f8a-11eb-9d5b-005056adb61a
    command     :  SCANDEVICE
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
  
# Let's give it one more try with "list". Since the local NVMe devices have been scanned, POS should
# be able to give us the list.
[email protected]:IBOF_HOME/bin$ ./cli device list
  
  
Request to Poseidon OS
    xrId        :  53d159b7-2f8a-11eb-8579-005056adb61a
    command     :  LISTDEVICE
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "devicelist": [
        {
            "addr": "0000:04:00.0",
            "class": "SYSTEM",
            "mn": "VMware Virtual NVMe Disk",
            "name": "unvme-ns-0",
            "size": 68719476736,
            "sn": "VMWare NVME-0002",
            "type": "SSD"
        },
        {
            "addr": "0000:0c:00.0",
            "class": "SYSTEM",
            "mn": "VMware Virtual NVMe Disk",
            "name": "unvme-ns-1",
            "size": 68719476736,
            "sn": "VMWare NVME-0003",
            "type": "SSD"
        },
        {
            "addr": "0000:13:00.0",
            "class": "SYSTEM",
            "mn": "VMware Virtual NVMe Disk",
            "name": "unvme-ns-2",
            "size": 68719476736,
            "sn": "VMWare NVME-0000",
            "type": "SSD"
        },
        {
            "addr": "0000:1b:00.0",
            "class": "SYSTEM",
            "mn": "VMware Virtual NVMe Disk",
            "name": "unvme-ns-3",
            "size": 68719476736,
            "sn": "VMWare NVME-0001",
            "type": "SSD"
        },
        {
            "addr": "",
            "class": "SYSTEM",
            "mn": "uram0",
            "name": "uram0",
            "size": 1073741824,
            "sn": "uram0",
            "type": "NVRAM"
        }
    ]
}

Step 5. Import POS Array

If you have not created any POS array before, you could start with a new one and import into the POS (Step 5a). Otherwise, you could load existing POS arrays if POS is not aware of them due to host reboot or POS restart (Step 5b).

5a. Create new POS Array

Now that POS has completed the scanning, it should be able to create POS array with a set of block devices we choose.

[email protected]:IBOF_HOME/bin$ ./cli array create -b uram0 -d unvme-ns-0,unvme-ns-1,unvme-ns-2 -s unvme-ns-3  --name POSArray --raidtype RAID5
  
  
Request to Poseidon OS
    xrId        :  8b68a56b-2f8a-11eb-af95-005056adb61a
    command     :  CREATEARRAY
    Param       :
{
    "name": "POSArray",
    "raidtype": "RAID5",
    "buffer": [
        {
            "deviceName": "uram0"
        }
    ],
    "data": [
        {
            "deviceName": "unvme-ns-0"
        },
        {
            "deviceName": "unvme-ns-1"
        },
        {
            "deviceName": "unvme-ns-2"
        }
    ],
    "spare": [
        {
            "deviceName": "unvme-ns-3"
        }
    ]
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :

As you may have noticed, some of the parameters should be passed in from the output of the previous step ("cli device list" command).

  • The write buffer device (-b) should be the name of a device whose "type" is "NVRAM".
  • The data devices (-d) should be comma-separated list of devices, the type of which being "SSD".
  • The name of POS array must comply with a naming convention described in Creating POS Array.
  • As of Nov/30/2020, the available RAID types (--raidtype) are only ["RAID5"]

Once POS array has been created, you could query the POS array information as in the following:

[email protected]:IBOF_HOME/bin$ ./cli array list_device --name POSArray
  
  
Request to Poseidon OS
    xrId        :  f16396ea-2f8a-11eb-bd77-005056adb61a
    command     :  LISTARRAYDEVICE
    Param       :
{
    "name": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "devicelist": [
        {
            "name": "uram0",
            "type": "BUFFER"
        },
        {
            "name": "unvme-ns-0",
            "type": "DATA"
        },
        {
            "name": "unvme-ns-1",
            "type": "DATA"
        },
        {
            "name": "unvme-ns-2",
            "type": "DATA"
        },
        {
            "name": "unvme-ns-3",
            "type": "SPARE"
        }
    ]
}

Step 5b. Load existing POS Array

"Load" command is to support a case that POS/host has restarted and lost its in-memory state. The following command will retrieve the array information from MBR partition and import into POS.

[email protected]:IBOF_HOME/bin$ ./cli array load --name POSArray
 
 
Request to Poseidon OS
    xrId        :  f6fa9d6b-4f16-11eb-b888-005056adb61a
    command     :  LOADARRAY
    Param       :
{
    "name": "POSArray"
}
 
 
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :

Please make sure that Step 2 (creating write buffer) and Step 4 (scanning NVMe devices) should run before the LOADARRAY command. After a reboot/restart, the write buffer should be recreated and rescanned. Otherwise, LOADARRAY command would fail.

Step 6. Mount POS Array

Even though we have POS array provisioned, we can't use it until it is mounted. Let's check out what happens with system state around POS array mount.

[email protected]:IBOF_HOME/bin$ ./cli system info
 
 
Request to Poseidon OS
    xrId        :  7d7dcf05-32ab-11eb-b334-005056adb61a
    command     :  GETIBOFOSINFO
 
 
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "capacity": "0GB (0B)",
    "rebuildingProgress": "0",
    "situation": "DEFAULT",
    "state": "OFFLINE",
    "used": "0GB (0B)"
}
 
[email protected]:IBOF_HOME/bin$ ./cli system mount
  
  
Request to Poseidon OS
    xrId        :  31dbc740-2f8c-11eb-ae95-005056adb61a
    command     :  MOUNTIBOFOS
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
  
  
[email protected]:IBOF_HOME/bin$ ./cli system info
  
  
Request to Poseidon OS
    xrId        :  3f30be48-2f8c-11eb-9afa-005056adb61a
    command     :  GETIBOFOSINFO
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "capacity": "120.31277138GB (120312771380B)",
    "rebuildingProgress": "0",
    "situation": "NORMAL",
    "state": "NORMAL",
    "used": "0GB (0B)"
}

Please note that state field in the output has changed from OFFLINE to NORMAL. Also, "capacity" is now reflecting the size of the NVMe storage pool available to POS.

Please note that, as of Nov/30/2020, POS supports a single POS array only, which is why "mount" command belongs to "system" (i.e., it's currently "cli system mount", but not "cli array mount --name POSArray"). Once POS gets a new feature to support multi array, the command will change accordingly. 

Step 7. Configure NVM Subsystems for NVMe Over Fabric Target

POS is ready to perform volume management task, but still unable to expose its volume over network since we haven't configured an NVM subsystem yet. POS is not ready to expose its volume over network since it does not have NVM subsystem in which NVM namespaces(s) are created. Creating NVM subsystem remains in manual fashion (vs. running automatically during POS startup) by design. Administrators need to understand its functionality so that they can easily come up with a workaround when needed. Once we have enough understanding about various user environments, this step could be automated in a future release.

Create NVMe-oF Subsystem

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_create_subsystem -h
usage: rpc.py nvmf_create_subsystem [-h] [-t TGT_NAME] [-s SERIAL_NUMBER]
                                    [-d MODEL_NUMBER] [-a] [-m MAX_NAMESPACES]
                                    nqn
  
positional arguments:
  nqn                   Subsystem NQN (ASCII)
  
optional arguments:
  -h, --help            show this help message and exit
  -t TGT_NAME, --tgt_name TGT_NAME
                        The name of the parent NVMe-oF target (optional)
  -s SERIAL_NUMBER, --serial-number SERIAL_NUMBER
                        Format: 'sn' etc Example: 'SPDK00000000000001'
  -d MODEL_NUMBER, --model-number MODEL_NUMBER
                        Format: 'mn' etc Example: 'SPDK Controller'
  -a, --allow-any-host  Allow any host to connect (don't enforce host NQN
                        whitelist)
  -m MAX_NAMESPACES, --max-namespaces MAX_NAMESPACES
                        Maximum number of namespaces allowed
  
[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_create_subsystem nqn.2019-04.ibof:subsystem1 -a -s IBOF00000000000001 -d IBOF_VOLUME_EXTENSION -m 256

The following command configures TCP transport to use when network connection is established between an initiator and a target. is between initiator and target.

Create NVMe-oF Transport

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_create_transport -h
usage: rpc.py nvmf_create_transport [-h] -t TRTYPE [-g TGT_NAME]
                                    [-q MAX_QUEUE_DEPTH]
                                    [-p MAX_QPAIRS_PER_CTRLR]
                                    [-c IN_CAPSULE_DATA_SIZE] [-i MAX_IO_SIZE]
                                    [-u IO_UNIT_SIZE] [-a MAX_AQ_DEPTH]
                                    [-n NUM_SHARED_BUFFERS]
                                    [-b BUF_CACHE_SIZE] [-s MAX_SRQ_DEPTH]
                                    [-r] [-o] [-f] [-y SOCK_PRIORITY]
  
optional arguments:
  -h, --help            show this help message and exit
  -t TRTYPE, --trtype TRTYPE
                        Transport type (ex. RDMA)
  -g TGT_NAME, --tgt_name TGT_NAME
                        The name of the parent NVMe-oF target (optional)
  -q MAX_QUEUE_DEPTH, --max-queue-depth MAX_QUEUE_DEPTH
                        Max number of outstanding I/O per queue
  -p MAX_QPAIRS_PER_CTRLR, --max-qpairs-per-ctrlr MAX_QPAIRS_PER_CTRLR
                        Max number of SQ and CQ per controller
  -c IN_CAPSULE_DATA_SIZE, --in-capsule-data-size IN_CAPSULE_DATA_SIZE
                        Max number of in-capsule data size
  -i MAX_IO_SIZE, --max-io-size MAX_IO_SIZE
                        Max I/O size (bytes)
  -u IO_UNIT_SIZE, --io-unit-size IO_UNIT_SIZE
                        I/O unit size (bytes)
  -a MAX_AQ_DEPTH, --max-aq-depth MAX_AQ_DEPTH
                        Max number of admin cmds per AQ
  -n NUM_SHARED_BUFFERS, --num-shared-buffers NUM_SHARED_BUFFERS
                        The number of pooled data buffers available to the
                        transport
  -b BUF_CACHE_SIZE, --buf-cache-size BUF_CACHE_SIZE
                        The number of shared buffers to reserve for each poll
                        group
  -s MAX_SRQ_DEPTH, --max-srq-depth MAX_SRQ_DEPTH
                        Max number of outstanding I/O per SRQ. Relevant only
                        for RDMA transport
  -r, --no-srq          Disable per-thread shared receive queue. Relevant only
                        for RDMA transport
  -o, --c2h-success     Disable C2H success optimization. Relevant only for
                        TCP transport
  -f, --dif-insert-or-strip
                        Enable DIF insert/strip. Relevant only for TCP
                        transport
  -y SOCK_PRIORITY, --sock-priority SOCK_PRIORITY
                        The sock priority of the tcp connection. Relevant only
                        for TCP transport
  
[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_create_transport -t tcp -b 64 -n 2048

The following command makes a given NVM subsystem listen on a TCP port and serve incoming NVMe-oF requests.

Add NVMe-oF Subsystem Listener

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_subsystem_add_listener -h
usage: rpc.py nvmf_subsystem_add_listener [-h] -t TRTYPE -a TRADDR
                                          [-p TGT_NAME] [-f ADRFAM]
                                          [-s TRSVCID]
                                          nqn
 
positional arguments:
  nqn                   NVMe-oF subsystem NQN
 
optional arguments:
  -h, --help            show this help message and exit
  -t TRTYPE, --trtype TRTYPE
                        NVMe-oF transport type: e.g., rdma
  -a TRADDR, --traddr TRADDR
                        NVMe-oF transport address: e.g., an ip address
  -p TGT_NAME, --tgt_name TGT_NAME
                        The name of the parent NVMe-oF target (optional)
  -f ADRFAM, --adrfam ADRFAM
                        NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc,
                        intra_host
  -s TRSVCID, --trsvcid TRSVCID
                        NVMe-oF transport service id: e.g., a port number
 
 
[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ifconfig
br-ffbb105da0b0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:bc:6d:42:c0  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:5a:48:ef:31  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.11.20  netmask 255.255.0.0  broadcast 10.1.255.255
        inet6 fe80::250:56ff:fead:b61a  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:ad:b6:1a  txqueuelen 1000  (Ethernet)
        RX packets 10347809  bytes 5642325066 (5.6 GB)
        RX errors 0  dropped 1807  overruns 0  frame 0
        TX packets 2678399  bytes 1342733373 (1.3 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
ens192f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 10.100.11.20  netmask 255.255.0.0  broadcast 10.100.255.255
        inet6 fe80::250:56ff:fead:62e3  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:ad:62:e3  txqueuelen 1000  (Ethernet)
        RX packets 49543  bytes 9172204 (9.1 MB)
        RX errors 0  dropped 522  overruns 0  frame 0
        TX packets 7280  bytes 636436 (636.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 35058288  bytes 21787309364 (21.7 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35058288  bytes 21787309364 (21.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  
  
  
[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_subsystem_add_listener nqn.2019-04.ibof:subsystem1 -t tcp -a 10.100.11.20 -s 1158

In the above example, the NVM subsystem called "nqn.2019-04.ibof:subsystem1" has been configured to listen on (10.100.11.20, 1158) and use TCP transport. If you miss this step, POS wouldn't be able to mount POS volumes even though it could create new ones. At this point, you should be able to retrieve the configured NVM subsystem like in the following:

Retrieve NVM subsystem information

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_get_subsystems
[
  {
    "nqn": "nqn.2014-08.org.nvmexpress.discovery",
    "subtype": "Discovery",
    "listen_addresses": [],
    "allow_any_host": true,
    "hosts": []
  },
  {
    "nqn": "nqn.2019-04.ibof:subsystem1",
    "subtype": "NVMe",
    "listen_addresses": [
      {
        "transport": "TCP",
        "trtype": "TCP",
        "adrfam": "IPv4",
        "traddr": "10.100.11.20",
        "trsvcid": "1158"
      }
    ],
    "allow_any_host": true,
    "hosts": [],
    "serial_number": "IBOF00000000000001",
    "model_number": "IBOF_VOLUME_EXTENSION",
    "max_namespaces": 256,
    "namespaces": []
  }
]

Step 8. Create POS Volume

This step is to create a logical entry point of the target side IO which will be shown as a namespace in an NVM subsystem. POS volume is wrapped as a "bdev" and can be attached to a particular NVM subsystem. "bdev" is a block device abstraction offered by SPDK library.

Create a volume

[email protected]:IBOF_HOME/bin$ ./cli volume create --name vol1 --size 1073741824 --maxiops 0 --maxbw 0 --array POSArray
  
  
Request to Poseidon OS
    xrId        :  05fcfcc1-2f8e-11eb-9cac-005056adb61a
    command     :  CREATEVOLUME
    Param       :
{
    "name": "vol1",
    "array": "POSArray",
    "size": 1073741824
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :

Retrieve volume information

[email protected]:IBOF_HOME/bin$ ./cli volume list --array POSArray
  
  
Request to Poseidon OS
    xrId        :  3e3ea57c-2f8e-11eb-a2ad-005056adb61a
    command     :  LISTVOLUME
    Param       :
{
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "volumes": [
        {
            "id": 0,
            "maxbw": 0,
            "maxiops": 0,
            "name": "vol1",
            "remain": "1.073741824GB (1073741824B)",
            "status": "Unmounted",
            "total": "1.073741824GB (1073741824B)"
        }
    ]
}

Please note that the initial status of POS volume is Unmounted.

Step 9. Mount POS Volume

This is to make a particular POS volume ready to perform IO. After this step, POS volume is attached as bdev to an NVM subsystem and seen as an NVM namespace.

[email protected]:IBOF_HOME/bin$ ./cli volume mount --name vol1 --array POSArray
  
Request to Poseidon OS
    xrId        :  b4224be2-2f97-11eb-bd11-005056adb61a
    command     :  MOUNTVOLUME
    Param       :
{
    "name": "vol1",
    "array": "POSArray"
}
 
[email protected]:IBOF_HOME/bin$ ./cli volume list --array POSArray
  
  
Request to Poseidon OS
    xrId        :  ea8e0b0c-2f97-11eb-9d8a-005056adb61a
    command     :  LISTVOLUME
    Param       :
{
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "volumes": [
        {
            "id": 0,
            "maxbw": 0,
            "maxiops": 0,
            "name": "vol1",
            "remain": "1.073741824GB (1073741824B)",
            "status": "Mounted",
            "total": "1.073741824GB (1073741824B)"
        }
    ]
}

Please note that the status of the volume has become Mounted. If we check the NVM subsystem again, we can notice an NVM namespace has been added to an NVM subsystem with its bdev_name as follows.

Retrieve NVM subsystem information

[email protected]:IBOF_HOME/lib/spdk-19.10/scripts# ./rpc.py nvmf_get_subsystems
[
  {
    "nqn": "nqn.2014-08.org.nvmexpress.discovery",
    "subtype": "Discovery",
    "listen_addresses": [],
    "allow_any_host": true,
    "hosts": []
  },
  {
    "nqn": "nqn.2019-04.ibof:subsystem1",
    "subtype": "NVMe",
    "listen_addresses": [
      {
        "transport": "TCP",
        "trtype": "TCP",
        "adrfam": "IPv4",
        "traddr": "10.100.11.20",
        "trsvcid": "1158"
      }
    ],
    "allow_any_host": true,
    "hosts": [],
    "serial_number": "IBOF00000000000001",
    "model_number": "IBOF_VOLUME_EXTENSION",
    "max_namespaces": 256,
    "namespaces": [
      {
        "nsid": 1,
        "bdev_name": "bdev0",
        "name": "bdev0",
        "uuid": "06d53d40-33b7-4d05-be20-58220496a43d"
      }
    ]
  }
]
Once mounted, the connection is established between an initiator and an NVM subsystem. Then, POS volume becomes accessible over network by an initiator.

Step 10. Unmount POS Volume

[email protected]:IBOF_HOME/bin$ ./cli volume unmount --name vol1 --array POSArray
  
  
Request to Poseidon OS
    xrId        :  319c6a9f-2fb4-11eb-a9bd-005056adb61a
    command     :  UNMOUNTVOLUME
    Param       :
{
    "name": "vol1",
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
  
  
[email protected]:IBOF_HOME/bin$ ./cli volume list --array POSArray
  
  
Request to Poseidon OS
    xrId        :  352d6cce-2fb4-11eb-ab45-005056adb61a
    command     :  LISTVOLUME
    Param       :
{
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "volumes": [
        {
            "id": 0,
            "maxbw": 0,
            "maxiops": 0,
            "name": "vol1",
            "remain": "1.073741824GB (1073741824B)",
            "status": "Unmounted",
            "total": "1.073741824GB (1073741824B)"
        }
    ]
}
Please note that the status of the POS volume has changed from "Mounted" to "Unmounted".

Step 11. Delete POS Volume

[email protected]:IBOF_HOME/bin$ ./cli volume delete --name vol1 --array POSArray
  
  
Request to Poseidon OS
    xrId        :  95e706cc-2fb4-11eb-b82f-005056adb61a
    command     :  DELETEVOLUME
    Param       :
{
    "name": "vol1",
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
  
  
[email protected]:IBOF_HOME/bin$ ./cli volume list --array POSArray
  
  
Request to Poseidon OS
    xrId        :  97b9746e-2fb4-11eb-b2f1-005056adb61a
    command     :  LISTVOLUME
    Param       :
{
    "array": "POSArray"
}
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :

POS volume can be deleted only when it is in Unmounted state.

Step 12. Unmount POS Array

[email protected]:IBOF_HOME/bin$ ./cli system unmount
  
  
Request to Poseidon OS
    xrId        :  d32e2fbd-2fb4-11eb-91a3-005056adb61a
    command     :  UNMOUNTIBOFOS
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
  
  
[email protected]:IBOF_HOME/bin$ ./cli system info
  
  
Request to Poseidon OS
    xrId        :  d601d366-2fb4-11eb-874c-005056adb61a
    command     :  GETIBOFOSINFO
  
  
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "capacity": "0GB (0B)",
    "rebuildingProgress": "0",
    "situation": "DEFAULT",
    "state": "OFFLINE",
    "used": "0GB (0B)"
}

Step 13. Delete POS Array

[email protected]:IBOF_HOME/bin$ ./cli array delete --name POSArray
 
 
Request to Poseidon OS
    xrId        :  39434590-32d4-11eb-ae61-005056adb61a
    command     :  DELETEARRAY
    Param       :
{
    "name": "POSArray"
}
 
 
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
 
 
[email protected]:IBOF_HOME/bin$ ./cli array info --name POSArray
 
 
Request to Poseidon OS
    xrId        :  3cb6ebf0-32d4-11eb-bba1-005056adb61a
    command     :  ARRAYINFO
    Param       :
{
    "name": "POSArray"
}
 
 
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :
    Data         :
 {
    "name": "POSArray",
    "state": "NOT_EXIST"
}

POS array can be deleted only when it is in OFFLINE state.

Step 14. Shut down POS application

[email protected]:IBOF_HOME/bin$ ./cli system exit
 
 
Request to Poseidon OS
    xrId        :  81f12c3c-32d4-11eb-8a99-005056adb61a
    command     :  EXITIBOFOS
 
 
Response from Poseidon OS
    Code         :  0
    Level        :  INFO
    Description  :  Success
    Problem      :
    Solution     :

Please make sure that POS is not running anymore as in the following.

[email protected]:IBOF_HOME/bin$ ps -ef | grep ibofos | grep -v grep
Comments
  • Poseidon does not start.

    Poseidon does not start.

    I am back trying to get an evaluation up and running as I am no longer trying to emulate the NVMe drives. I was able to download the code and build it. But when I try to start the application using the "sudo ./start_poseidonos.sh" script, I get the following output:

    [email protected]:~/dev/ibofos/poseidonos/script$ sudo ./start_poseidonos.sh [sudo] password for keith: 0000:0b:00.0 (144d a808): Already using the nvme driver 0000:1b:00.0 (1987 5013): Already using the nvme driver 0000:13:00.0 (1179 0113): Already using the nvme driver Setting maximum # of Huge Page Size is 2/3 of Total Memory Size 0000:13:00.0 (1179 0113): nvme -> uio_pci_generic 0000:0b:00.0 (144d a808): nvme -> uio_pci_generic 0000:1b:00.0 (1987 5013): nvme -> uio_pci_generic /home/keith/dev/ibofos/poseidonos/script apport.service is not a native service, redirecting to systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install disable apport Current maximum # of memory map areas per process is 65530. Setting maximum # of memory map areas per process to 65535. vm.max_map_count = 65535 Setup env. done! Execute poseidonos Error: Could not connect to the CLI server. Is PoseidonOS running? (internal error message: context deadline exceeded) Usage: poseidonos-cli system info [flags]

    Flags: -h, --help help for info

    Global Flags: --debug Print response for debug. --fs string Field separator for the output. (default "|") --ip string Set IPv4 address to PoseidonOS for this command. (default "127.0.0.1") --json-req Print request in JSON form. --json-res Print response in JSON form. --node string Name of the node to send this command. When both --ip and this flag are specified, this flag is applied only. --port string Set the port number to PoseidonOS for this command. (default "18716") --timeout uint32 Timeout for this command in seconds. (Note: array unmount command has 30 minutes timeout.) (default 180) --unit Display unit (B, KB, MB, ...) when displaying capacity.

    ./start_poseidonos.sh: line 42: 2: command not found Wait poseidonos for 1 seconds

    pos.log

    pos_major.log

    syslog.log

    I attached logs for review. In the pos.log and pos_major.log, I only have the entries for the time I attempted to start the application. Syslog I provided the whole thing in case there is something obscure in there. I do not see any "errors" in the pos.log. I am at a little bit at a loss of what next to look at. Any help would be greatly appreciated.

    opened by neteng1 16
  • build_ibofos make fails

    build_ibofos make fails

    Hi, We tried to build the Poseidon OS and it shows the make error as below. We tested the version of cmake and the results are uploaded below. Please suggest your ideas. Screenshot from 2021-11-05 14-23-00

    Screenshot from 2021-11-05 14-26-14 )

    opened by aagi-girish 13
  • Mr

    Mr

    Hi, We have run the below command and it runs without any error. ./poseidonos-cli device scan

    But, the below command does not fetch any NVMe from the hardware. ./poseidonos-cli device list --unit

    Checked the PoseidonOS is running by the command below; ps -ef | grep poseidonos | grep -v grep

    The below command shows two drives in the hardware: fdisk -l | grep nvme

    Please help!!! Thanks in advance

    opened by aagi-girish 10
  • CPU allowed list improperly set

    CPU allowed list improperly set

    I am a hobbyist that is attempting to build a storage system with commodity hardware and was attempting on using Poseidon with its GUI for that. My first attempt before purchasing hardware was to try it in a VM. I am using VMware's fusion and created a VM with 3 NVMe drives and a SATA for the OS to run on.

    I followed the instructions and was able to build it with no errors. However, whenever I start it, I get the following errors:

    [2022-10-17 13:59:27.071068739][4585][4585][30532707][-1000][ info] N/A - POS Version v0.12.0-rc0 (cause: N/A, solution: N/A, variables: N/A), source: poseidonos.cpp:385 _LoadVersion(), pos_version: v0.12.0-rc0

    [2022-10-17 13:59:27.071730062][4585][4599][30532707][-1000][ info] N/A - Use core description from config file (cause: N/A, solution: N/A, variables: N/A), source: affinity_config_parser.cpp:100 AffinityConfigParser(), pos_version: v0.12.0-rc0

    [2022-10-17 13:59:27.071902635][4585][4599][30532707][-1000][ info] N/A - Use EventWorker and IOWorker (cause: N/A, solution: N/A, variables: N/A), source: affinity_config_parser.cpp:112 AffinityConfigParser(), pos_version: v0.12.0-rc0

    [2022-10-17 13:59:27.073685218][4585][4599][30532707][-1000][critical] N/A - Cpu allowed list is wrongly set (cause: N/A, solution: N/A, variables: N/A), source: string_descripted_cpu_set_generator.cpp:185 _SetCpuRange(), pos_version: v0.12.0-rc0

    I am guessing the CPU error is why it is not starting. Can I not run this in a virtual environment? Is that what my issue is?

    opened by neteng1 5
  • Compilation errors on Ubuntu 20.04 / 18.04

    Compilation errors on Ubuntu 20.04 / 18.04

    On a fresh Ubuntu 20.04.3, I got errors compiling both the library and Poseidon-OS.

    Following the steps described on the README:

    git clone https://github.com/poseidonos/poseidonos.git
    cd poseidonos/script
    sudo ./pkgdep.sh
    cd ../lib
    sudo ./build_lib.sh
    cd ../script
    sudo ./build_ibofos.sh
    

    This is the error from building the library:

    (...)
    /home/martin/poseidonos/lib/grpc                                                                                                                                                                                                                                                                                              
    /home/martin/poseidonos/lib/grpc/cmake/build /home/martin/poseidonos/lib/grpc                                                                                                                                                                                                                                                 
    -- The C compiler identification is GNU 9.3.0                                                                                                                                                                                                                                                                                 
    -- The CXX compiler identification is GNU 9.3.0                                                                                                                                                                                                                                                                               
    -- Check for working C compiler: /usr/bin/cc                                                                                                                                                                                                                                                                                  
    -- Check for working C compiler: /usr/bin/cc -- works                                                                                                                                                                                                                                                                         
    -- Detecting C compiler ABI info                                                                                                                                                                                                                                                                                              
    -- Detecting C compiler ABI info - done                                                                                                                                                                                                                                                                                       
    -- Detecting C compile features                                                                                                                                                                                                                                                                                               
    -- Detecting C compile features - done                                                                                                                                                                                                                                                                                        
    -- Check for working CXX compiler: /usr/bin/c++                                                                                                                                                                                                                                                                               
    -- Check for working CXX compiler: /usr/bin/c++ -- works                                                                                                                                                                                                                                                                      
    -- Detecting CXX compiler ABI info                                                                                                                                                                                                                                                                                            
    -- Detecting CXX compiler ABI info - done                                                                                                                                                                                                                                                                                     
    -- Detecting CXX compile features                                                                                                                                                                                                                                                                                             
    -- Detecting CXX compile features - done                                                                                                                                                                                                                                                                                      
    -- Looking for pthread.h                                                                                                                                                                                                                                                                                                      
    -- Looking for pthread.h - found                                                                                                                                                                                                                                                                                              
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD                                                                                                                                                                                                                                                                                    
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed                                                                                                            
    -- Looking for pthread_create in pthreads                                                                                                                                                                                                                                                                                     
    -- Looking for pthread_create in pthreads - not found                                                                                                                                                                                                                                                                         
    -- Looking for pthread_create in pthread                                                                                                                                                                                                                                                                                      
    -- Looking for pthread_create in pthread - found                               
    -- Found Threads: TRUE                                                                                                                                         
    -- Could NOT find c-ares (missing: c-ares_DIR)                                                                                                                 
    -- Found c-ares: /usr/include (found suitable version "1.15.0", minimum required is "1.13.0")                                                                  
    -- Found Protobuf: /usr/local/lib/libprotobuf.a;-lpthread (found version "3.15.8")                                                                             
    -- Found RE2 via CMake.                                                                                                                                        
    CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):                                                                
      Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the                                                                                    
      system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY                                                                                            
      OPENSSL_INCLUDE_DIR)                                                                                                                                         
    Call Stack (most recent call first):                                                                                                                           
      /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)                                                               
      /usr/share/cmake-3.16/Modules/FindOpenSSL.cmake:447 (find_package_handle_standard_args)                                                                      
      cmake/ssl.cmake:66 (find_package)                                                                                                                            
      CMakeLists.txt:257 (include)                                                                                                                                 
                                                                                                                                                                   
                                                                                                                                                                   
    -- Configuring incomplete, errors occurred!                                                                                                                    
    See also "/home/martin/poseidonos/lib/grpc/cmake/build/CMakeFiles/CMakeOutput.log".                                                                            
    See also "/home/martin/poseidonos/lib/grpc/cmake/build/CMakeFiles/CMakeError.log".                                                                             
    make[3]: warning: -j4 forced in submake: resetting jobserver mode.                                                                                             
    make[3]: *** No targets specified and no makefile found.  Stop.                                                                                                
    make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.                                                                              
    make[3]: *** No rule to make target 'install'.  Stop.                                                                                                          
    /home/martin/poseidonos/lib/grpc                                               
    GRPC installation success                                                                                                                                      
    [ 92%] Built target grpc                                                                                                                                       
    -- spdk download command succeeded.  See also /home/martin/poseidonos/lib/spdk-prefix/src/spdk-stamp/spdk-download-*.log
    

    I thought that this was due to the missing package libssl-dev, but I checked and it was already installed.

    And this is the error from sudo ./build_ibofos.sh:

    /home/martin/poseidonos/src/allocator/context_manager/rebuild_ctx/rebuild_ctx.cpp: In constructor ‘pos::RebuildCtx::RebuildCtx(pos::TelemetryPublisher*, pos::AllocatorAddressInfo*)’:
    /home/martin/poseidonos/src/allocator/context_manager/rebuild_ctx/rebuild_ctx.cpp:69:31: error: ‘*<unknown>.pos::RebuildCtx::tp’ is used uninitialized in this function [-Werror=uninitialized]
       69 | : RebuildCtx(tp, nullptr, info)
    
    
    opened by iomartin 5
  • Build script is broken

    Build script is broken

    git commit id commit 3b5054bb6a48a657552164f27ac6953f6895a55a (HEAD -> main, origin/main, origin/HEAD)

    $ sudo ./lib/build_lib.sh CMake Error: The source directory "/home/thkrishn/poseidonos" does not appear to contain CMakeLists.txt. Specify --help for usage, or press the help button on the CMake GUI. Makefile:261: /home/thkrishn/poseidonos/lib/spdk/mk/spdk.deps.mk: No such file or directory make: *** No rule to make target '/home/t.krishna/poseidonos/lib/spdk/mk/spdk.deps.mk'. Stop.

    opened by thkrishn 5
  • [AWIBOF-5035] Design change to add quick rebuild operation

    [AWIBOF-5035] Design change to add quick rebuild operation

    Signed-off-by: minjoon.ahn [email protected] Objectives: Need to support quick-rebuild Changes: Design changes to add restoration function through copy

    SRM 
    opened by minjoon-ahn 4
  • [AWIBOF-6559] Add a design diagram for management architecture

    [AWIBOF-6559] Add a design diagram for management architecture

    Add a design diagram for management archtiecture.

    The diagram written in Mermaid diagram form. It will be rendered in GitHub.

    Signed-off-by: mjlee34 [email protected]

    documentation 
    opened by mjlee34 4
  • losing NVMe drives after executing ./start_poseidonos.sh

    losing NVMe drives after executing ./start_poseidonos.sh

    I am still trying to bring up a virtual environment for evaluation. I now can get the application to run. However, I do not see al the NVMe drives. Any help would be greatly appreciated. Here is what I start with:

    [email protected]:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 1.4M 0 disk sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 19G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm / sr0 11:0 1 68.1M 0 rom
    sr1 11:1 1 969M 0 rom
    nvme0n1 259:0 0 20G 0 disk nvme0n2 259:1 0 20G 0 disk nvme0n3 259:2 0 20G 0 disk [email protected]:~$

    After I start poseidonos using ./start_poseidonos.sh I no longer see them here.

    [email protected]:~/workspace/ibofos/poseidonos$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 1.4M 0 disk sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 19G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 19G 0 lvm / sr0 11:0 1 68.1M 0 rom
    sr1 11:1 1 969M 0 rom
    [email protected]:~/workspace/ibofos/poseidonos$

    I then scan to see if maybe Poseidonos sees them and I get the following:

    [email protected]:~/workspace/ibofos/poseidonos$ sudo ./bin/poseidonos-cli device scan [email protected]:~/workspace/ibofos/poseidonos$ sudo ./bin/poseidonos-cli device list --unit Name |SerialNumber |Address |Class |ModelNumber |NUMA |Size -------------- |------------------- |-------------- |------------- |-------------------------- |------ |------------------ unvme-ns-0 |VMware NVME_0000 |0000:03:00.0 |SYSTEM |VMware Virtual NVMe Disk |0 |20G

    Should I not see all three at this point?

    I attached the pos.log and syslog files. The time to look for is around 10-21-2022 14:41

    syslog.log pos.log

    opened by neteng1 3
  • Support Rocky Linux 8

    Support Rocky Linux 8

    This commit adds pkgdep_rocky8.sh for installing dependencies in Rocky Linux 8, fixes compile issues (which is mostly from using different version of gcc), and some other issues.

    We tried not to break on Ubuntu environments and we have tested on our machine, but we would like to hear from you if there are any issues.

    Note that running build_lib.sh and build_ibofos.sh separately (and thus building library twice) caused compile/runtime error on Rocky systems, so we stuck to running only build_ibofos.sh, or manually running configure and make after build_lib.sh.

    Signed-off-by: Hyunseung Park [email protected]

    opened by hspark0582 3
  • [AWIBOF-6773] Copy pos_event.yaml for unit testing

    [AWIBOF-6773] Copy pos_event.yaml for unit testing

    Copy pos_event.yaml to the pos_conf directory for unit testing.

    Previously, unit testing failed because pos_event.yaml was not copied to the config directory. It was because unit testing script did not execute $make install, which copies pos_event.yaml to the config directory.

    To fix the problem, this commit adds a copy command to the unit testing script for github action.

    Signed-off-by: mjlee34 [email protected]

    bug log unit-testing 
    opened by mjlee34 3
  • [AWIBOF-7441] Implement async write for volume copy

    [AWIBOF-7441] Implement async write for volume copy

    [Revieweee]

    • Review 목적: 2Node HA - Volume copy를 위한 write path 추가
    • 참고 문서:
    • 주요 review 파일: GrpcPosIo::WriteBlocks(), PosReplicatorManager::HAIOSubmission()
    • 검증 방법 또는 TC: System Test

    [Reviewer]

    • Checklist: 512B Chunk단위로 쪼개진 grpc message를 하나로 묶은 뒤 write를 request하도록 구현하였습니다. 관련하여 문제없는지 같이 검토해주시면 감사하겠습니다.
    • Unit Test는 아직 작성을 못했는데 이부분도 추가 작성하여 올리겠습니다
    opened by cheolho-kang 0
  • Awibof 7492 gc rba locking logic improvement

    Awibof 7492 gc rba locking logic improvement

    1. GC에서 업데이트 할 RBA 목록 관리 효율화

    기존: 매번 생성, 매 호출시 정렬 및 distinct 변경: 1회 생성 후 distinct하여 저장하여 생성 및 정렬 오버헤드 줄임

    1. GC 이후 map update 위한 rba Ownership 획득실패시 map의 유효성 체크하여 invalid 한 rba blocks 제거
    2. 할당받을 총 Buffer pool갯수를 입력받고 확보가능여부를 판단후 한번에 확보하여 buffer pool 관리 오버헤드 줄이기
    opened by minjoon-ahn 0
  • [AWIBOF-6629] Add write bypass feature to make fast GC sustain

    [AWIBOF-6629] Add write bypass feature to make fast GC sustain

    • Add WriteBypass flag to do only complete callback without writing data to SSD
    • Add WBT command to set WritBypass flags in runtime
    • Add ARION test scenario to make GC sustain

    Signed-off-by: dageon.hwang [email protected]

    opened by cheolho-kang 0
Owner
null
Spacex Storage is an offchain storage work inspector of Mannheim Network running inside TEE enclave.

Spacex Storage Spacex Storage is an offchain storage work inspector of Mannheim Network running inside TEE enclave. Contribution Thank you for conside

Mannheim Network 10 Oct 21, 2022
A light-weight Flutter Engine Embedder based on HADK ,which for Android devices that runs without any java code

flutter-hadk A light-weight Flutter Engine Embedder based on HADK ,which for Android devices that runs without any java code 1.Build by android-ndk-to

null 12 Jun 15, 2022
Analytics In Real-time (AIR) is a light-weight system profiling tool

Analytics In Real-time Analytics In Real-time (AIR) is a light-weight system profiling tool that provides a set of APIs for profiling performance, lat

null 2 Mar 3, 2022
Fast and Light-weight path smoothing methods for vehicles

path_smoother About Fast and Light-weight path smoothing methods for vehicles Denpendencies This project has been tested on Ubuntu 18.04. sudo apt-get

MingwangZhao 4 Dec 1, 2021
Simple, Fast, Light weight

Welcome To PradoshOS Github! Index Main heading Setup Step 1 Step 2 Step 3 Step 4 Compilation of Bootloader Compilation of Kernel Compilation of Userl

S Pradosh 11 Nov 12, 2022
Scroll pos - Provides some additional functions to ScrollController to define item position relative to the screen.

Scroll Position Provides some additional functions to ScrollController to define item position relative to the screen. A live version is available her

Kevin Vuilleumier 11 Nov 13, 2022
Decoding light morse code with a light dependent resistor and Arduino board

Morse decoder The project's idea is very simple, the Arduino program has the responsibility to upload the sensor's data to the USB serial port.

null 15 Mar 12, 2022
A Keg tracking system that monitors weight

KegScale A Keg tracking system that monitors weight Right now the arduino zeros the scale when it turns on and subracts the weight of 5 gallon corny k

null 11 Mar 2, 2022
null 295 Nov 29, 2022
MinIO C++ Client SDK for Amazon S3 Compatible Cloud Storage

The MinIO C++ Client SDK provides simple APIs to access any Amazon S3 compatible object storage.

Multi-Cloud Object Storage 38 Nov 13, 2022
XTAO Unified Distributed Storage

Anna - A branch project from CEPH Anna is a XTAO project branched from CEPH distributed storage. CEPH is a nice opensource project for unified distrib

XTAO Technolgy 3 Nov 12, 2021
A simple console client for pCloud cloud storage.

pCloud Console Client A simple console client for pCloud cloud storage. Project Information pCloud Console Client was forked from the project initiall

Serghei Iakovlev 24 Oct 28, 2022
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

中文版本请参看这里 MMKV is an efficient, small, easy-to-use mobile key-value storage framework used in the WeChat application. It's currently available on Andr

Tencent 15.3k Dec 5, 2022
Modern transactional key-value/row storage library.

Sophia is advanced transactional MVCC key-value/row storage library. How does it differ from other storages? Sophia is RAM-Disk hybrid storage. It is

Dmitry Simonenko 1.8k Nov 11, 2022
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

OpenEXR OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the mot

Academy Software Foundation 1.3k Dec 1, 2022
A demonstration PoC for CVE-2022-21877 (storage spaces controller memory leak)

POC CVE-2022-21877 This repository contains a POC for the CVE-2022-21877, found by Quang Linh, working at STAR Labs. This is an information leak found

null 4 Mar 8, 2022
PlotFS is a fuse filesystem for efficient storage of Chia plot files.

PlotFS PlotFS is a fuse filesystem for efficient storage of Chia plot files. PlotFS is not a traditional filesystem. It is mounted read only for farmi

Matthew Szatmary 49 Nov 8, 2022
C++ implementation for a binary data storage format.

bsmlib- A C++ library for loading and writing binary data to and from files. bsmlib provides functions for loading, modifying, and saving BSM (Binary

Colleen 4 Oct 9, 2022
A light lisp written in C++

wisp A light lisp written in C++ Why write a lisp? Lisp is one of those niche, beautiful languages that people only really use to either Write a lisp

adam mcdaniel 164 Nov 24, 2022