Skip to content
Jin Heo edited this page Dec 16, 2023 · 13 revisions

Welcome to the FlexPipe wiki!

Tutorials

In these tutorial examples, we present how to use FlexPipe with two sample kernels: SourceKernel and SinkKernel. SourceKernel has a single output port (o1), generating a byte vector of the size 1920x1080x3 (corresponding to 1080p RGB image) and sending the vector downstream via the output port. SinkKernel has a single input port (i1) that gets the generated vector and prints an element in the vector.

The tutorial series are the following.

  • Tutorial 1: Simple pipeline (Source->Sink)
  • Tutorial 2: Simple pipeline, but with TCP
  • Tutorial 3: Simple pipeline, but with RTP
  • Tutorial 4: Simple pipeline, but with different connection dependency
  • Tutorial 5: Branching simple pipeline with shared-memory-based IPC for compatibility with other processes
  • Tutorial 6: Custom kernel added to simple pipeline

Use Cases and Contributions

As Kernel User

As demonstrated in the tutorials, if there are existing kernel implementations, you can use them to configure differently distributed pipelines, while using FlexPipe as a pipelining runtime. When running all tutorial examples, you would recognize that the data communication and runtime overheads on FlexPipe are very low. If your target use cases require millisecond-scale performance, FlexPipe is the way to go.

As Kernel Developer

If there is a target use case, you can implement FlexPipe kernels. It makes your application workloads flexibly distributed across your running environment. In our work, FleXR, we implemented the XR and multimedia compression functionalities as kernels, and the XR pipelines cooperated with the game-engine-based applications. The different workload distribution scenarios of the XR pipelines were realized and evaluated by the benefit of FlexPipe.

As Network Protocol Researcher

Assume you are a network protocol researcher and want to figure out how your transport protocol impacts the application's performance. Then, you can add your communication port to FlexPipe's port interface.

The FlexPipe's port interface is so extensible that we already added the ZMQ and uvgRTP ports. As along as the ports are compatible with our port interface, the existing kernels can be seamlessly compatible your communication port. As shown in our tutorial, the implemented kernel's ports can be activated by a kernel user without any code changes for local/remote connections, different protocols (TCP/UDP-based RTP), and dependency semantics.

Along with the supported protocols, you can directly compare your protocol's impact with the other supported protocols.