Git Product home page Git Product logo

NTSocks: An ultra-low latency and compatible PCIe interconnect

Hope that you'd be glad to add a star if you think this repo is helpful!

Overview

NTSocks develops an ultra-fast and compatible PCIe interconnect targetting for rack-scale disaggregations, leveraging routable PCIe fabric (e.g., Non Transparent Bridge -- NTB). Compared to state-of-the-art RDMA and user-space network stack (e.g., mTCP), such routable PCIe fabric achieves lower nanoseceond-level latency, and higher throughput close to PCIe bandwidth limits, due to eliminating the protocol translation overhead (between PCIe and network protocols) and complex in-NIC resource management (e.g., limited NIC cache for RDMA connection context and memory mapping table). This potentially meets the increasing demand of high-speed networking required by rack-scale disaggregation. NTSocks is thereby motivated as a software indirection layer to efficiently virtualize the PCIe transport resources for rack-scale disaggregated applications. At a high level, the NTSocks layer gets socket API calls from apps and process them by interacting with a user-level runtime library on behalf of the app, as the following architecture figure shows. NTSocks consists of three components: NTSocks library, Monitor, and Proxy. The runtime NTSocks library, called libnts, is located inside the application process and provides user-friendly and performant socket abstractions for applications. It is responsible for parsing and fowarding control and data path operations into NTSocks monitor and proxy, respectively. The control plane component monitor, called NTM, performs control path operations (such as connection setup when connect()). The data plane component proxy, called NTP, virtualizes global PCIe fabric transport resource (such as NTB mapped memory) in a lightweight manner, and then coordinates with libnts to perform fast data path operations (e.g., write()/read()). These three components communicate via shared memory. This repo contains implementation of NTSocks system. Please refer to each README under those subdirectories for more informations.

Note that our NTSocks work has been published at ACM CoNEXT 2022 -- Best Paper Award.

System Components

image

NTSocks Runtime Library -- libnts

The libnts directory contains the implementation of NTSocks runtime library, including control (e.g., nts_connect()) and data path interfaces (e.g., nts_send()). This libnts library is located inside application process, which is responsible for parsing and forwarding control and data path requests into NTSocks monitor and proxy, respectively.

NTSocks Monitor -- NTM

The monitor directory contains the implementation of NTSocks control plane component, including initilizing PCIe fabric routing information, allocating the allocation between connection and point-to-point PCIe interconnect, connection establishment over routable PCIe interconnect, and destroying PCIe fabric resources when disconnecting with remote sides.

NTSocks Proxy -- NTP

The ntb-proxy directory contains the implementation of NTSocks data plane component, including partitioning PCIe transport resources with multi-cores for scaling up, batching tx/rx messages foarding, and hierarchical performance isolation mechanism.

NTSocks Applications and Benchmarks

The ./apps directory contains an NTSocks-enhanced key-value store system with varying YCSB workloads. Wherea the ./benchmark directory contains a set of function tests to evaluate NTSocks control and data plane interfaces.

Building NTSocks System

Please refer to ./build-nts.sh script to build three NTSocks components. This will produce:

  • libnts: libnts.so and libnts.a in libnts/lib/ directory; libnts.h, nts_config.h, and socket.h in libnts/include/ directory.
  • NTM: An executable ntb-monitor binary in monitor/bin/ directory.
  • NTP: An executable ntb-proxy binary in ntb-proxy/src/ directory.

Experimental Workflows

Before executation, please ensure the PCIe NTB is enabled in BIOS and physical machines, while correctly setuping DPDK NTB Poll-Mode Driver.

  1. Startup NTSocks control plane monitor (refer to ./monitor.sh).
  2. Startup NTSocks data plane proxy (refer to ./proxy.sh).
  3. Assuming to use LD_PRELOAD runtime library libnts, a socket based server program (refer to benchmark/unified_benchmark/ntb-server) and a client program (refer to benchmark/unified_benchmark/ntb-client) are executed without any code changes. They can communciate with each other transparently.

License

The code is released under the Apache 2.0 License.

This work was done collobratively with Intel DPDK team. Thanks to Intel for the PCIe NTB testbed and technical support!

If you use our NTSocks or related codes in your research, please cite our paper:

@inproceedings{huang2022ultra,
  title={An ultra-low latency and compatible PCIe interconnect for rack-scale communication},
  author={Huang, Yibo and Huang, Yukai and Yan, Ming and Hu, Jiayu and Liang, Cunming and Xu, Yang and Zou, Wenxiong and Zhang, Yiming and Zhang, Rui and Huang, Chunpu and others},
  booktitle={Proceedings of the 18th International Conference on emerging Networking EXperiments and Technologies},
  pages={232--244},
  year={2022}
}

NTSocks Project's Projects

nts-nginx icon nts-nginx

An NTSocks-accelerated Nginx and Apache Bench Tool for high performance file transfer services.

ntsocks icon ntsocks

NTSocks: An ultra-low latency and compatible PCIe interconnect for rack-scale disaggregation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.