FlashAlloc is a novel interfacee for flash storage, which is used to the logical address ranges of objects to the underlying flash device and thus to enlighten the device to stream writes by objects. See deatil in our paper
[1] Jonghyeok Park, Soyee Choi, Gihwan Oh, Soojun Im, Moon-Wook Oh, Sang-Won Lee, "FlashAlloc: Dedicating Flash Blocks By Objects". VLDB 2023
First, you will need the Cosmos+ Board with hynix NAND firmware version. You can get more accurate information at CRZ Technology
FPGA: Xilinx XC7Z045-3FFG900 Zynq-7000
- Dual ARM Cortex-A9 1GHz Core
- NEON DSP co-processor for each core
- 350K LCs
1GB DDR3 NAND Modules
1 SD CARD Slot
Dual PCIe Gen2 x8 End-Points (Cabled PCIe Interface)
1 Gigabit Ethernet Interface
1 USB 2.0 (configurable to Host or Device)
JTAG and Debug Interface
Second, You need the software tools and files
- Xilinx ISE design suite 19.1 system edition Link
- UART terminal emulator software (Xilinx Software Development Kit(SDK) includes UART terminal)
- Download the USB-to-UART driver
- Check details at OpenSSD Project hompage
Flashalloc
is Cosmos+ OpenSSD firmware source code which implements the Flashalloc interface for flash storagesMultistream
is multi-stream prototype for Cosmos+ OpenSSD supporting eight stream-idshost
incorporates the implementation of both RocksDB and MySQL, utilized for evaluation in our paper. It also includes a simple host application example to test the flashalloc command.- More details are illustrated in our paper.
Please refer to Cosmos+ OpenSSD build guide document
TL;DR
- Prepare Cosmos+ Open SSD, Window and Linux PC
- Connect the Cosmos+ OpenSSD to Window PC (JTAG dilegent module and USB cable for UART) and install the PCIe to connect btw Cosmos+ OpenSSD and Linux PC
- Open the FlashAlloc projecct in Xilinx SDK
- Right click on project, and
Run As > 1. Launch on Hardware (GDB)
- Click the firmware to execute, and
click OK > wait UART message
- Press X to make bad block table (you should do this for the first time)
- Wait and Turn-on (or reboot) the Linux PC
- You can check the Cosmos+ OpenSSD using
nvme-cli
orlspci
command (check thenvme0nXXXXX
in the device list) - Bon appétit! :)
cd host
make -j
sudo ./playground /dev/nvmeXXX 0 32
playground
host application name/dev/nvmeXXX
Comsmos+ OpenSSD device path0
start LBA (4KiB-based offset)32
LBA length
- Build
- Build the RocksDB database engine for both flashalloc or multi-streame ssd version
- You can also build the vanilla version of Rocksdb using
bash ./scripts/build.sh
command
cd host/RocksDB/rocksdb-{flashalloc | msssd}
bash ./scripts/build.sh cosmos
- Configure File system
- You can mount either EXT4 or F2FS filesystem with TRIM support on top of Cosmos+ OpenSSD
# EXT4 Filesystem
bash ./scripts/setup-ext4-trim.sh
# F2FS Filesystem
bash ./scripts/setup-f2fs-trim.sh
- Run
db_bench
wiht 4 tenants
# FlashAlloc version
bash ./scripts/run_flashalloc.sh
# Vanilla version
bash ./scripts/run_vanilla.sh
# Multi-stream SSD version
bash ./scripts/run_msssd.sh
- Run
db_bench
wiht single tenants
# FlashAlloc version
bash ./scripts/falloc-single.sh
# Multi-stream SSD version
bash ./scripts/msssd-single.sh
- Build
cd hsot/MySQL
bash ./build.sh
- Initialize data directory
bash init.sh
- Run MySQL server
bash ./run.sh
- Run TPC-C Benchmark
- You can also modify the configuration for TPC-C Benchmark (e.g., # of clients, wrapup time, duration, and etc)
- To run the either vanilla or multi-stream ssd version, you can execute
run.sh
script.
cd host/tpcc-mysql
bash ./run-flashalloc.sh
- In this experiment, you can evaluate the multi-tenant configuration.
# configure the filesystem and data directory for TPC-C and db_bench
bash ./setup-multi.sh
# run multi-tenant experiments
bash run-multi.sh
All guide document for Cosmos+ OpenSSD is provided by Cosmos Open SSD Project.