enso-nic
Ensō is a high-performance streaming interface for NIC-application communication.
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
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
Metadata Files
README.md
Ensō
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
- Setup
- Understanding the primitives: RX Ensō Pipe, TX Ensō Pipe, RX/TX Ensō Pipe
- Examples: Echo Server, Packet Capture, EnsōGen Packet Generator
- API References: Software, Hardware
Owner
- Name: Crossroads FPGA Project
- Login: crossroadsfpga
- Kind: organization
- Website: crossroadsfpga.org
- Repositories: 3
- Profile: https://github.com/crossroadsfpga
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
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.
- Homepage: https://github.com/crossroadsfpga/enso
- Documentation: https://enso-nic.readthedocs.io/
- License: BSD
-
Latest release: 0.1.3
published almost 3 years ago
Rankings
Maintainers (1)
Dependencies
- actions/cache v2 composite
- actions/checkout v3 composite
- actions/setup-python v4 composite
- mkdocs-awesome-pages-plugin ==2.8.0
- mkdocs-material ==9.0.14
- vunit_hdl *
- click >=8.0
- scapy *