From 14a1cd0f6549f6339769532bfa562bd99b0fda85 Mon Sep 17 00:00:00 2001 From: Ric Li Date: Thu, 30 Nov 2023 09:47:55 +0800 Subject: [PATCH] doc: add new arch figure (#613) Signed-off-by: Ric Li --- README.md | 2 +- doc/png/arch.png | Bin 64652 -> 0 bytes doc/png/arch.svg | 4 ++++ manager/README.md | 2 +- manager/manager-design.svg | 4 ---- manager/manager_design.svg | 4 ++++ 6 files changed, 10 insertions(+), 6 deletions(-) delete mode 100644 doc/png/arch.png create mode 100644 doc/png/arch.svg delete mode 100644 manager/manager-design.svg create mode 100644 manager/manager_design.svg diff --git a/README.md b/README.md index c60f2650e..6c6214dbc 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ IMTL also incorporates SIMD (Single Instruction, Multiple Data) for CSC (Color S For the detail design, please refer to [design guide](doc/design.md).
-overall architecture +/Overall Architecture
### 1.3 Ethernet supported diff --git a/doc/png/arch.png b/doc/png/arch.png deleted file mode 100644 index a1ac2eee2c7bff841565eed5199e2b360969d719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64652 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�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 diff --git a/doc/png/arch.svg b/doc/png/arch.svg new file mode 100644 index 000000000..69c69393b --- /dev/null +++ b/doc/png/arch.svg @@ -0,0 +1,4 @@ + + + +ST 2110NetworkBackendST 2110-20UncompressedVideoST 2110-22CompressedVideoST 2110-30/31(Un)compressedAudioST 2110-40AncillaryDataDPDKPMDLinux&WindowsManagementPacing(TSN, RL, TSC)TaskletSchedulerFlow Director/ RSSIGMPARPDHCPPTPTimesyncRTCPDMAMemcpyHelperPipelineAPIST 2110-22CodecPluginST 2110-20ConversionPluginColor FormatConversionAccelarated bySIMD (AVX512)Video AppAppsAudio AppAncillary AppThird-party Plugins:FFMPEG, OBS, MSDK...NICHardwareIntel E810Intel XL710Intel I225/I226AWS ENAUDPLibOSStackUDPLD_PreloadLayerUDP Socket AppLinux: Bare metal / VM / ContainerWindows: Bare metal / VMSocket APIAF_XDPLinuxKernelKernelNetworkStackNICDrivereBPF programControlPlaneProtocolsPTPDevice Abstrction LayerTx & Rx QueueManagementMbuf Pool/RingManagementShared QueueManagementVirtio-userException PathWindowsKernel(Not supported)Other NICwith DPDK/XDPDMAHardwareCBDMA (IOAT)DSA (IDXD)
Datagram
Datagram
Frames
Frames
Intel E810Intel XL710Intel I225/I226AWS ENAOther NICwith DPDK/XDP
Intel® Media Transport Library
Intel® Media Transport Library
ST 2110-20ConversionPluginST 2110-20ConversionPluginST 2110-20UncompressedVideoST 2110-22CodecPluginST 2110-22CompressedVideoST 2110-30/31(Un)compressedAudio
Frames
Frames
Frames
Frames
Text is not SVG - cannot display
\ No newline at end of file diff --git a/manager/README.md b/manager/README.md index b498361cc..5bdf25a20 100644 --- a/manager/README.md +++ b/manager/README.md @@ -2,7 +2,7 @@ ## Overview -![design](manager-design.svg) +![design](manager_design.svg) MTL Manager is a daemon server designed to operate with root privileges. Its primary role is to manage the lifecycle and configurations of MTL instances. It addresses a variety of administrative tasks, including: diff --git a/manager/manager-design.svg b/manager/manager-design.svg deleted file mode 100644 index 7f2920bbe..000000000 --- a/manager/manager-design.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -mtl managermtl instancemtl instancemtl instancemtl_manager.socklistenconnectconnectconnectwritewritewriteread        struct message {             header(magic, type),             body(union)        }LcoremanagementXDP loader,send map fdset port filterNIC managementStatus clearon clientcrush/disconnect \ No newline at end of file diff --git a/manager/manager_design.svg b/manager/manager_design.svg new file mode 100644 index 000000000..dbfc7485b --- /dev/null +++ b/manager/manager_design.svg @@ -0,0 +1,4 @@ + + + +mtl managermtl instancemtl instancemtl instancemtl_manager.socklistenconnectconnectconnectsendsendsendrecv        struct message {             header(magic, type),             body(union)        }LcoremanagementXDP loader,send map fdset port filterNIC managementStatus clearon clientcrush/disconnect
NIC
NIC
Linux
Kernel
Linux...
XDP
XDP
add 
add 
AF_XDP
Socket
AF_XDP...
Driver
Driver
xsks_map
xsks_map
AF_XDP
Socket
AF_XDP...
AF_XDP
Socket
AF_XDP...
udp_filter_map
udp_filter_map
add/del port
add/del port
load/unload program
load/unload program
Datapath
Datapath
Text is not SVG - cannot display
\ No newline at end of file