{"id":33105993,"url":"https://github.com/Dantali0n/OpenCSD","last_synced_at":"2025-11-15T05:01:29.184Z","repository":{"id":38690912,"uuid":"335318237","full_name":"Dantali0n/OpenCSD","owner":"Dantali0n","description":"OpenCSD: eBPF Computational Storage Device (CSD) for Zoned Namespace (ZNS) SSDs in QEMU","archived":false,"fork":false,"pushed_at":"2023-11-01T06:40:09.000Z","size":22653,"stargazers_count":52,"open_issues_count":0,"forks_count":14,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-07-28T21:55:54.513Z","etag":null,"topics":["bpf","computational-storage-device","csd","ebpf","flufflefs","nvme","opencsd","qemu","zcsd","zns","zoned-namespace"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dantali0n.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-02-02T14:35:23.000Z","updated_at":"2024-07-03T02:08:21.000Z","dependencies_parsed_at":"2024-01-02T20:51:48.507Z","dependency_job_id":null,"html_url":"https://github.com/Dantali0n/OpenCSD","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Dantali0n/OpenCSD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dantali0n%2FOpenCSD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dantali0n%2FOpenCSD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dantali0n%2FOpenCSD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dantali0n%2FOpenCSD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dantali0n","download_url":"https://codeload.github.com/Dantali0n/OpenCSD/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dantali0n%2FOpenCSD/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284507666,"owners_count":27017331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-15T02:00:06.050Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bpf","computational-storage-device","csd","ebpf","flufflefs","nvme","opencsd","qemu","zcsd","zns","zoned-namespace"],"created_at":"2025-11-14T23:00:30.092Z","updated_at":"2025-11-15T05:01:29.177Z","avatar_url":"https://github.com/Dantali0n.png","language":"C++","funding_links":[],"categories":["文章和演示","Articles and Presentations"],"sub_categories":["硬件卸载","Hardware Offload"],"readme":"[![pipeline status](https://gitlab.dantalion.nl/vu/opencsd/badges/master/pipeline.svg)](https://gitlab.dantalion.nl/vu/opencsd/-/pipelines)\n[![coverage report](https://gitlab.dantalion.nl/vu/opencsd/badges/master/coverage.svg)](https://gitlab.dantalion.nl/vu/opencsd/-/jobs/artifacts/master/download?job=coverage)\n[![latest commit](https://shields.io/github/last-commit/Dantali0n/opencsd)](https://gitlab.dantalion.nl/vu/opencsd/-/commits/master)\n[![source code license MIT](https://shields.io/github/license/Dantali0n/opencsd)](https://gitlab.dantalion.nl/vu/opencsd/-/blob/master/LICENSE)\n[![follow me on mastodon](https://img.shields.io/mastodon/follow/108140655414581916?domain=https%3A%2F%2Ffosstodon.org\u0026style=social)](https://fosstodon.org/@dantalion)\n\n## Publications\n\n* FOSDEM, 5 February 2023- [OpenCSD, simple and intuitive computational storage emulation with QEMU and eBPF](https://fosdem.org/2023/schedule/event/csd/)\n* Thesis, 26 August 2022 - [OpenCSD: LFS enabled Computational Storage Device over Zoned Namespaces (ZNS) SSDs](https://nextcloud.dantalion.nl/s/dN7KZTSSyxx2Xw4/download)\n* [ICT.OPEN](https://www.ictopen.nl/home/), 7 April 2022 - [OpenCSD: Unified Architecture for eBPF-powered Computational Storage Devices (CSD) with Filesystem Support](https://gitlab.dantalion.nl/vu/opencsd/-/jobs/4591/artifacts/raw/build/ictopen2022.pdf?inline=false)\n* arXiv, 13 December 2021 - [Past, Present and Future of Computational Storage: A Survey](https://arxiv.org/abs/2112.09691)\n* arXiv, 29 November 2021 - [ZCSD: a Computational Storage Device over Zoned Namespaces (ZNS) SSDs](https://arxiv.org/abs/2112.00142)\n\n# OpenCSD\n\nOpenCSD is an improved version of ZCSD achieving snapshot consistency\nlog-structured filesystem (LFS) (FluffleFS) integration on Zoned Namespaces\n(ZNS) Computational Storage Devices (CSD). Below is a diagram of the overall\narchitecture as presented to the end user. However, the actual implementation\ndiffers due to the use of emulation using technologies such as QEMU, uBPF and\nSPDK.\n\n![](thesis/resources/images/loader-pfs-arch-v3.png)\n\n# FluffleFS\n\nFluffleFS is the filesystem built on using the OpenCSD framework. Designed\nbased on a LFS with the flash optimized F2FS filesystem as inspiration.\nFluffleFS is unique in that it is written in user space code thanks to the\nFUSE library while still offering simulated CSD offloading support with\nconcurrent regular user access to the same file!\n\n## Getting Started\n\n[![asciicast](https://asciinema.org/a/zoM9ncLUTO4QIqntblHKNOEtC.svg)](https://asciinema.org/a/zoM9ncLUTO4QIqntblHKNOEtC)\n\n### Index\n\n* [Directory structure](#directory-structure)\n* [Modules](#modules)\n* [Dependencies](#dependencies)\n* [Setup](#setup)\n  * [QEMU setup](#qemu-setup)\n  * [Host setup](#host-setup)\n  * [Environment](#environment)\n  * [CMake Configuration](#cmake-configuration)\n* [Examples](#usage-examples)\n* [Roadmap](#roadmap)\n* [Licensing](#licensing)\n* [References](#references)\n\n### Directory Structure\n\n* cmake - Small cmake snippets to enable various features\n* dependencies - Project dependencies\n* docs - Doxygen generated source code documentation\n* fosdem2023 - FOSDEM 2023 emulator devroom presentation\n* ictopen2022 - ICTOPEN 2022 presentation\n* measurements - Raw experiment data used during thesis\n* opencsd - Project source files\n* [playground]([playground/README.md]) - Small toy examples or other\n  experiments\n* [python](python/README.md) - Python scripts to aid in visualization or\n  measurements\n* [scripts](scripts/README.md) - Shell scripts primarily used by CMake to\n  install project dependencies\n* tests - Unit tests and possibly integration tests\n* thesis - Thesis written on OpenCSD using LaTeX\n* thesis-presentation - Thesis presentation written on OpenCSD using LaTeX\n* [zcsd](zcsd/README.md) - Documentation on the previous prototype.\n  * compsys 2021 - CompSys 2021 presentation written in LaTeX\n  * documentation - Individual Systems Project report written in LaTeX\n  * presentation - Individual Systems Project midterm presentation written in\n  LaTeX\n* .vscode - Launch targets and settings to debug programs running inside QEMU\n  over SSH\n\n### Modules\n\n| Module          | Task                                                             |\n|-----------------|------------------------------------------------------------------|\n| arguments       | Parse commandline arguments to relevant components               |\n| bpf_helpers     | Headers to define functions available from within BPF            |\n| bpf_programs    | BPF programs ready to run on a CSD using bpf_helpers             |\n| fuse_lfs        | Log Structured Filesystem in FUSE                                |\n| nvme_csd        | Emulated additional NVMe commands to enable BPF CSDs             |\n| nvme_zns        | Interface to handle zoned I/O using abstracted backends          |\n| nvme_zns_memory | Non-persistent memory backed emulated ZNS SSD backend            |\n| nvme_zns_spdk   | Persistent SPDK backed ZNS SSD backend                           |\n| output          | Neatly control messages to stdout and stderr with levels         |\n| spdk_init       | Provides SPDK initialization and handles for nvme_zns \u0026 nvme_csd |\n\n### Dependencies\n\nThis project has a large selection of dependencies as shown below. Note however,\n**these dependencies are already available in the image QEMU base image**.\n\n**Warning** Meson must be below version 0.60 due to\n[a bug in DPDK](https://bugs.dpdk.org/show_bug.cgi?id=836)\n\n* General\n    * Linux 6.0 or higher\n    * compiler with c++17 support\n    * clang 10 or higher\n    * cmake 3.18 or higher\n    * python 3.x\n    * mesonbuild \u003c 0.60 (`pip3 install meson==0.59`)\n    * pyelftools (`pip3 install pyelftools`)\n    * libslirp\n    * ninja\n    * cunit\n* Documentation\n    * doxygen\n    * LaTeX\n* Code Coverage\n    * ctest\n    * lcov\n    * gcov\n    * gcovr\n* Continuous Integration\n    * valgrind\n* Python scripts\n    * virtualenv\n\nThe following dependencies are automatically compiled and installed into the\nbuild directory.\n\n| Dependency                                                       | Version                                                                                                         |\n|------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|\n| [backward](https://github.com/bombela/backward-cpp)              | 1.6                                                                                                             |\n| [boost](https://www.boost.org/)                                  | 1.74.0                                                                                                          |\n| [bpftool](https://github.com/Netronome/bpf-tool)                 | 5.14                                                                                                            |\n| [bpf_load](https://github.com/Netronome/bpf-tool)                | [5.10](https://elixir.bootlin.com/linux/v5.10.77/source/samples/bpf/bpf_load.h)                                 |\n| [dpdk](https://www.dpdk.org/)                                    | spdk-21.11                                                                                                      |\n| [generic-ebpf](https://github.com/generic-ebpf/generic-ebpf)     | [c9cee73](https://github.com/generic-ebpf/generic-ebpf/commit/c9cee73c73845c9d60aef807b7ee7891987cd6fd)         |\n| [fuse-lfs](https://github.com/sphurti/Log-Structured-Filesystem) | [526454b](https://github.com/sphurti/Log-Structured-Filesystem/commit/526454b99102d4e8875898550f92d577bbbb8ca2) |\n| [libbpf](https://github.com/libbpf/libbpf)                       | 0.5                                                                                                             |\n| [libfuse](https://github.com/libfuse/libfuse)                    | 3.10.5                                                                                                          |\n| [libbpf-bootstrap](https://github.com/libbpf/libbpf)             | [67a29e5](https://github.com/libbpf/libbpf-bootstrap/commit/67a29e511cc9d0a570d4d3b9797827f3a08ccdb5)           |\n| [linux](https://www.kernel.org/)                                 | 5.14                                                                                                            |\n| [spdk](https://github.com/spdk/spdk)                             | 22.09                                                                                                           |\n| [isa-l](https://github.com/intel/isa-l)                          | spdk-v2.30.0                                                                                                    |\n| [rocksdb](https://github.com/facebook/rocksdb)                   | 6.25.3                                                                                                          |\n| [qemu](https://www.qemu.org/)                                    | 7.2.0                                                                                                           |\n| [uBPF](https://github.com/iovisor/ubpf)                          | [9eb26b4](https://github.com/iovisor/ubpf/commit/9eb26b4bfdec6cafbf629a056155363f12cec972)                      |\n| [xenium](https://github.com/mpoeter/xenium/)                     | [f1d28d0](https://github.com/mpoeter/xenium/commit/f1d28d0980cf2128c3f6b77d321aad5ca469dbce)                    |\n\n### Setup\n\nSeveral setups are available of which two are officially supported.\nWe recommend using QEMU for a non-volatile filesystem setup provided by QEMU\nZNS emulation.\n\n1. [Through QEMU; non-volatile filesystem](#qemu-setup)\n2. [Direct on host; volatile memory backed filesystem](#host-setup)\n\n#### QEMU Setup\n\nQEMU setup will provide an emulated environment with emulated Zoned Namespaces\nNVMe device providing a non-volatile CSD filesystem experience. In addition,\nthe use of QEMU ensures software libraries and frameworks use supported\nversions.\n\nThe QEMU setup will try to download a 4.5 GB qcow2 image that will fail if not\ndownloaded within 30 minutes. Alternatively, the file can be downloaded as\ntorrent [through this link](https://nextcloud.dantalion.nl/s/QHc3wt6Knr6bm4Q/download).\nThis file should be saved as `./build/opencsd/arch-qemucsd.qcow2`.\n\nAlternatively the QEMU image can be downloaded after executing `make qemu-build`\nby running `cd oepncsd; ./download-image.sh`.\n\n```shell\n# git clone https://gitlab.dantalion.nl/vu/opencsd.git\ncd opencsd\ngit submodule update --init\nmkdir build\ncd build\ncmake ..\n# This will also create a 32gb zns image\nmake qemu-build\ncmake .. # this prevents re-compiling dependencies on every next make command\ncd opencsd\nsource activate\n# By default qemu will use 4 CPU cores and 8GB of memory + kvm\n./qemu-start-256-kvm.sh\n# Wait for QEMU VM to fully boot... (might take some time)\n```\n\n```shell\n# Type password (arch)\nssh arch@localhost -p 7777\ncd opencsd\ngit pull origin master\ngit -c submodule.\"dependencies/qemu\".update=none submodule update --init\nmkdir build\ncd build\ncmake -DENABLE_DOCUMENTATION=off -DIS_DEPLOYED=on ..\nmake fuse-entry-spdk -j $(nproc)\ncmake .. # this prevents re-compiling dependencies on every next make command\n```\n\n#### Host Setup\n\nNote, in case of failure to detect native kernel sources install location; a\nfixed version from `./dependencies/linux` will be used. This can cause failures\nin `vmlinux.h` with `bpftool` when accessing `/sys/kernel/btf/vmlinux`.\n\n```shell script\n# git clone https://gitlab.dantalion.nl/vu/opencsd.git\ncd opencsd\ngit submodule update --init\nmkdir build\ncd build\ncmake ..\nmake fuse-entry -j $(nproc)\ncmake .. # this prevents re-compiling dependencies on every next make command\n```\n\n### Environment\nWithin the build folder will be a `opencsd/activate` script. This script can be\nsourced using any shell `source opencsd/activate`. This script configures\nenvironment variables such as `LD_LIBRARY_PATH` while also exposing an essential\nsudo alias: `ld-sudo`.\n\nThe environment variables ensure any linked libraries can be found for targets\ncompiled by Cmake. Additionally, `ld-sudo` provides a mechanism to start targets\nwith sudo privileges while retaining these environment variables. The\nenvironment can be deactivated at any time by executing `deactivate`.\n\n### Usage Examples\n\n**All usage examples assume the steps of the previous example have been executed\nprior!**\n\n1. Start the filesystem in a memory backed mode (volatile) and mount it on\n   `test`.\n\nMounts and starts the filesystem in a volatile mode under the `test` directory.\nAny output will be printed to stdout / stderr.\n\n```shell\n# working directory: opencsd (root)\ncd build\nmake fuse-entry\ncmake ..\ncd opencsd\nmkdir −p test\nsource activate\nld−sudo ./fuse−entry −− −d −o max_read=2147483647 test \u0026\n```\n\n2. Run the passthrough kernel on the filesystem mounted under `test` using the\n   python script.\n\nOn a mounted filesystem copy the pre-compiled passthrough read kernel. Next,\nplace data in a test file and execute a example python script to orchestrate\nexecuting the read kernel on the example file.\n\n```shell\n# working directory: opencsd/build/opencsd\ncp ../bin/bpf_flfs_read.o test/\necho \"hello world\" \u003e test/test\nld-sudo python3 ../../python/csd-read-passthrough.py\n```\n\n3. Manually register and start the passthrough kernel step by step with python.\n\n```python\n# ld-sudo python3\nimport os\nimport xattr\nimport pdb\n\nread_stride = 524288\n\npdb.set_trace()\n\nfd = os.open(\"test/test\", os.O_RDWR)\nfilesize = os.stat(\"test/test\").st_size\n\nkern_ino = os.stat(\"test/bpf_flfs_read.o\").st_ino\n\nxattr.setxattr(\n  \"test/test\", \"user.process.csd_read_stream\", bytes(f\"{kern_ino}\", \"utf-8\")\n)\n\nsteps = int(filesize / read_stride)\nif steps % read_stride != 0: steps += 1\n\nfor i in range(0, steps):\n  os.pread(fd, read_stride, i * read_stride)\n```\n\n### Roadmap\n\nThese are grouped by component and ordered by importance.\n\n1. Support \u0026 Infrastructure\n   1. Use clang-tidy to apply code formatting\n   2. Integrate CI/CD job to check clang-tidy formatting\n2. Testing \u0026 Verification\n   1. [ ] Complete runtime testbench to ensure filesystem behavior\n3. FUSE\n   1. [ ] Upgrade FUSE to 3.13.0\n   2. [ ] Remove requirement for redundant `-o max_read=...` argument\n   3. [ ] Increase performance\n      1. [ ] Convert all datastructures to support concurrent access\n      2. [ ] Less restrictive locking on FUSE requests\n      3. [ ] Test disabling `FUSE_CAP_AUTO_INVAL_DATA` with high `attr_timeout`\n             in combination of using `direct_io` in `open` when offloading.\n      4. [ ] Actually implement modification time so FUSE can do its work\n4. eBPF / uBPF\n   1. [ ] Automate endian conversion for end users\n   2. [ ] System to stall kernel execution to normalize for specific processors\n   3. [ ] Fully implement stream and event kernels for both read / write operations\n      1. [ ] read event\n      2. [ ] write stream\n      3. [ ] write event\n      4. [ ] Optimize efficiency of write event\n         1. [ ] Introduce two stage kernels (filesystem + user-program)\n5. CSx FS runtime (Filesystem agnostic kernels)\n   1. [ ] Create dummy runtime service component\n   2. [ ] Create ICD loader\n   3. [ ] Create first official draft of filesystem helper API\n      1. [ ] Implement fixed point operations for decimal math\n6. [ ] Create first official draft of CSx ABI\n7. SPDK / xNVME\n   1. [ ] Create additional ZNS backend using xNVME\n   2. [ ] Allocate larger SPDK buffers so multiple I/O requests can be queued\n\n### CMake Configuration\n\nThis section documents all configuration parameters that the CMake project\nexposes and how they influence the project. For more information about the\nCMake project see the report generated from the documentation folder. Below \nall parameters are listed along their default value and a brief description.\n\n| Parameter            | Default | Use case                                         |\n|----------------------|---------|--------------------------------------------------|\n| ENABLE_TESTS         | ON      | Enables unit tests and adds tests target         |\n| ENABLE_CODECOV       | OFF     | Produce code coverage report \\w unit tests       |\n| ENABLE_DOCUMENTATION | ON      | Produce code documentation using doxygen \u0026 LaTeX |\n| ENABLE_PLAYGROUND    | OFF     | Enables playground targets                       |\n| ENABLE_LEAK_TESTS    | OFF     | Add compile parameter for address sanitizer      |\n| IS_DEPLOYED          | OFF     | Indicate that CMake project is deployed in QEMU  |\n\nFor several parameters a more in depth explanation is required, primarily\n_IS_DEPLOYED_. This parameter is used as the CMake project is both used to\ncompile QEMU and configure it as well as compile binaries to run inside QEMU. As\na results, the CMake project needs to be able to identify if it is being\nexecuted outside of QEMU or not. This is what _IS_DEPLOYED_ facilitates.\nParticularly, _IS_DEPLOYED_ prevents the compilation of QEMU from source.\n\n### Licensing\n\nThis project is available under the MIT license, several limitations apply\nincluding:\n  \n* Source files with an alternative author or license statement other than Dantali0n and MIT respectively.\n* Images subject to copyright or usage terms, such the VU and UvA logo.\n* CERN beamer template files by Jerome Belleman.\n* Configuration files that can't be subject to licensing such as `doxygen.cnf`\n  or `.vscode/launch.json`\n\n### References\n\n* ZNS\n  * [Zoned storage ZNS SSDs introduction](https://zonedstorage.io/introduction/zns/)\n  * [Getting started with ZNS in QEMU](https://www.snia.org/educational-library/getting-started-nvme-zns-qemu-2020)\n  * [NVMe ZNS command set 1.0 ratified TP](https://nvmexpress.org/wp-content/uploads/NVM-Express-1.4-Ratified-TPs-1.zip)\n  * [libnvme presentation](https://www.usenix.org/sites/default/files/conference/protected-files/vault20_slides_busch.pdf)\n  * [dm-zap conventional zones for ZNS](https://github.com/westerndigitalcorporation/dm-zap)\n  * [FEMU accurate NVMe SSD Emulator](https://github.com/ucare-uchicago/FEMU)\n* Filesystems\n  * [Linux Inode](https://man7.org/linux/man-pages/man7/inode.7.html)\n  * Filesystem Benchmarks\n    * [Filebench](https://github.com/filebench/filebench)\n    * [Filebench Tutorial](http://www.nfsv4bat.org/Documents/nasconf/2005/mcdougall.pdf)\n* FUSE\n  * [To FUSE or Not to FUSE: Performance of User-Space File Systems](http://libfuse.github.io/doxygen/fast17-vangoor.pdf)\n  * [FUSE kermel documentation](https://www.kernel.org/doc/html/latest/filesystems/fuse.html)\n  * [FUSE forget](https://fuse-devel.narkive.com/SMANJULN/when-does-fuse-forget)\n  * Other FUSE3 filesystems that can be used for reference\n    * [MergerFS](https://github.com/trapexit/mergerfs/tree/master/src)\n* LFS\n  * [f2fs usenix paper](https://www.usenix.org/system/files/conference/fast15/fast15-paper-lee.pdf)\n  * [f2fs kernel documentation](https://www.kernel.org/doc/html/latest/filesystems/f2fs.html)\n* BPF\n  * Linux Kernel related\n    * [Linux bpf manpage](https://www.man7.org/linux/man-pages/man2/bpf.2.html)\n    * [BPF kernel documentation](https://www.kernel.org/doc/Documentation/networking/filter.txt)\n  * BPF-CO-RE \u0026 BTF\n    * [Linux BTF documentation](https://www.kernel.org/doc/html/latest/bpf/btf.html)\n    * [BPF portability and CO-RE](https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html)  **Highly Recommended Read**\n  * libbpf / standalone related\n    * [BCC to libbpf conversion](https://facebookmicrosites.github.io/bpf/blog/2020/02/20/bcc-to-libbpf-howto-guide.html)\n    * [Cilium BPF + XDP reference guide](https://docs.cilium.io/en/v1.9/bpf/) **Highly Recommended Read**\n    * bpf_load\n      * [Linux Observability with BPF](https://www.oreilly.com/library/view/linux-observability-with/9781492050193/)\n    * bpf-bootstrap\n      * [Building BPF applications with libbpf-bootstrap](https://nakryiko.com/posts/libbpf-bootstrap/)\n  * Userspace BPF execution / interpretation\n    * [uBPF](https://github.com/iovisor/ubpf)\n    * [iomartin uBPF patch expose registers](https://github.com/iomartin/ubpf/commit/ca1ad94613a01e1fa5cc04d43c73acc6b5074881)\n    * [iomartin uBPF patch relocation type](https://github.com/iomartin/ubpf/commit/af4a54c201524f975137d8c531dfef82010b65cd)\n    * [generic-ebpf](https://github.com/generic-ebpf/generic-ebpf)\n  * Verifiers\n    * [PREVAIL](https://github.com/vbpf/ebpf-verifier)\n  * Hardware implementations\n    * [hBPF](https://github.com/rprinz08/hBPF)\n  * Various\n    * [BTF sysfs vmlinux ABI](https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-kernel-btf)\n    * [BPF features and minimal kernel versions](https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md)\n    * [BPF Performance Tools (Chapters 1, 2, 17.1, 17.5, 18)](http://www.brendangregg.com/bpf-performance-tools-book.html)\n    * [eBPF release artile lwn.net](https://lwn.net/Articles/603983/)\n    * [Why pingCAP switched from BCC to libbpf](https://pingcap.com/blog/why-we-switched-from-bcc-to-libbpf-for-linux-bpf-performance-analysis)\n* Repositories / Libraries\n  * [uNVME](https://github.com/OpenMPDK/uNVMe)\n  * [SPDK](https://github.com/spdk/spdk)\n* Patchsets\n  * [ZNS SSD QEMU patch v11](http://patchwork.ozlabs.org/project/qemu-devel/list/?series=219344)\n  * [ZNS SSD QEMU patch v2](https://patchwork.kernel.org/project/qemu-devel/cover/20200617213415.22417-1-dmitry.fomichev@wdc.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDantali0n%2FOpenCSD","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDantali0n%2FOpenCSD","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDantali0n%2FOpenCSD/lists"}