enso-nic

Ensō is a high-performance streaming interface for NIC-application communication.

https://github.com/crossroadsfpga/enso

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.6%) to scientific vocabulary

Keywords

fpga networking nic
Last synced: 6 months ago · JSON representation ·

Repository

Ensō is a high-performance streaming interface for NIC-application communication.

Basic Info
  • Host: GitHub
  • Owner: crossroadsfpga
  • License: bsd-3-clause-clear
  • Language: SystemVerilog
  • Default Branch: master
  • Homepage: https://enso.cs.cmu.edu
  • Size: 3.72 MB
Statistics
  • Stars: 74
  • Watchers: 7
  • Forks: 7
  • Open Issues: 4
  • Releases: 12
Topics
fpga networking nic
Created almost 6 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Ensō

docs Ask DeepWiki DOI

Enso

Ensō is a high-performance streaming interface for NIC-application communication.

Ensō's design encompasses both hardware and software. The hardware component targets an FPGA NIC[^1] and implements the Ensō interface. The software component uses this interface and exposes simple communication primitives called Ensō Pipes. Applications can use Ensō Pipes to send and receive data in different formats, such as raw packets, application-level messages, or TCP-like byte streams.

Refer to the OSDI '23 paper for details about the design and to the documentation to find out how to use Ensō for your own projects.

[^1]: Network Interface Cards (NICs) are the hardware devices that connect a computer to the network. They are responsible for transmitting data from the CPU to the network and vice versa. FPGAs are reconfigurable hardware devices. They can be reconfigured to implement arbitrary hardware designs. Here we use an FPGA to implement a NIC with the Ensō interface but the same interface could also be implemented in a traditional fixed-function hardware.

Why Ensō?

Traditionally, NICs expose a packetized interface that software (applications or the kernel) must use to communicate with the NIC. Ensō provides two main advantages over this interface:

  • Flexibility: While NICs were traditionally in charge of delivering raw packets to software, an increasing amount of high-level functionality is now performed on the NIC. The packetized interface, however, forces data to be fragmented into packets that are then scattered across memory. This prevents the NIC and the application from communicating efficiently using higher-level abstractions such as application-level messages or TCP streams. Ensō instead allows the NIC and the application to communicate using a contiguous stream of bytes, which can be used to represent arbitrary data.
  • Performance: By forcing hardware and software to synchronize buffers for every packet, the packetized interface imposes significant per-packet overhead both in terms of CPU cycles as well as PCIe bandwidth. This results in significant performance degradation, in particular when using small requests. Ensō's use of a byte stream interface allows the NIC and the application to exchange multiple packets (or messages) at once, which reduces the number of CPU cycles and PCIe transactions required to communicate each request. Moreover, by placing packets (or messages) contiguously in memory, Ensō makes better use of the CPU prefetcher, vastly reducing the number of cache misses.

Getting started

Owner

  • Name: Crossroads FPGA Project
  • Login: crossroadsfpga
  • Kind: organization

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use Ensō, consider citing it as below."
authors:
- family-names: "Sadok"
  given-names: "Hugo"
  orcid: "https://orcid.org/0000-0002-2464-1465"
- family-names: "Atre"
  given-names: "Nirav"
  orcid: "https://orcid.org/0000-0003-0718-1839"
- family-names: "Zhao"
  given-names: "Zhipeng"
  orcid: "https://orcid.org/0000-0002-3349-8939"
- family-names: "Berger"
  given-names: "Daniel S."
  orcid: "https://orcid.org/0000-0002-3911-1512"
- family-names: "Hoe"
  given-names: "James C."
  orcid: "https://orcid.org/0000-0002-9302-5287"
- family-names: "Panda"
  given-names: "Aurojit"
  orcid: "https://orcid.org/0000-0001-9664-4377"
- family-names: "Sherry"
  given-names: "Justine"
  orcid: "https://orcid.org/0000-0002-8270-4102"
- family-names: "Wang"
  given-names: "Ren"
title: "Ensō"
version: 0.4.6
license: BSD-3-Clause-Clear
# doi: 10.5281/zenodo.1234
date-released: 2023-04-23
repository-code: "https://github.com/crossroadsfpga/enso"
url: "https://github.com/crossroadsfpga/enso"
# Update this:
# repository-artifact: 'https://github.com/crossroadsfpga/enso'
preferred-citation:
  type: conference-paper
  authors:
  - family-names: "Sadok"
    given-names: "Hugo"
    orcid: "https://orcid.org/0000-0002-2464-1465"
  - family-names: "Atre"
    given-names: "Nirav"
    orcid: "https://orcid.org/0000-0003-0718-1839"
  - family-names: "Zhao"
    given-names: "Zhipeng"
    orcid: "https://orcid.org/0000-0002-3349-8939"
  - family-names: "Berger"
    given-names: "Daniel S."
    orcid: "https://orcid.org/0000-0002-3911-1512"
  - family-names: "Hoe"
    given-names: "James C."
    orcid: "https://orcid.org/0000-0002-9302-5287"
  - family-names: "Panda"
    given-names: "Aurojit"
    orcid: "https://orcid.org/0000-0001-9664-4377"
  - family-names: "Sherry"
    given-names: "Justine"
    orcid: "https://orcid.org/0000-0002-8270-4102"
  - family-names: "Wang"
    given-names: "Ren"
  # doi: "10.0000/00000"
  title: "Ensō: A Streaming Interface for NIC-Application Communication"
  collection-title: "17th USENIX Symposium on Operating Systems Design and Implementation"
  conference: "OSDI '23"
  month: 7
  # start: 1 # First page number
  # end: 10 # Last page number
  publisher: "USENIX Association"
  # isbn:
  year: 2023

GitHub Events

Total
  • Watch event: 6
  • Delete event: 1
  • Push event: 13
  • Pull request event: 1
  • Create event: 2
Last Year
  • Watch event: 6
  • Delete event: 1
  • Push event: 13
  • Pull request event: 1
  • Create event: 2

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 2
  • Total pull requests: 23
  • Average time to close issues: N/A
  • Average time to close pull requests: 2 months
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.04
  • Merged pull requests: 12
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: 12 minutes
  • Issue authors: 0
  • Pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • kaajalbgupta (1)
  • NAtre (1)
  • hsadok (1)
Pull Request Authors
  • kaajalbgupta (34)
  • hsadok (3)
  • glass-hash (2)
  • HelloKayT (2)
Top Labels
Issue Labels
enhancement (1) documentation (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 11 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 2
  • Total maintainers: 1
pypi.org: enso-nic

Python frontend for the Ensō NIC.

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 11 Last month
Rankings
Dependent packages count: 6.6%
Average: 19.5%
Downloads: 21.2%
Dependent repos count: 30.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

.github/workflows/docs.yml actions
  • actions/cache v2 composite
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
docs/requirements.txt pypi
  • mkdocs-awesome-pages-plugin ==2.8.0
  • mkdocs-material ==9.0.14
  • vunit_hdl *
frontend/setup.py pypi
  • click >=8.0
requirements.txt pypi
  • scapy *