Difference between revisions of "Archived-DMM"
m (Valderrv moved page DMM to Archived-DMM) |
|||
(51 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
+ | |||
{{Project Facts | {{Project Facts | ||
|name=DMM | |name=DMM | ||
|shortname=dmm | |shortname=dmm | ||
|jiraName=DMM | |jiraName=DMM | ||
− | |projectLead=George Zhao | + | |projectLead=George Zhao ''<George.Y.Zhao@huawei.com>'' |
|committers= | |committers= | ||
− | * Florin Coras | + | * Florin Coras ''<fcoras@cisco.com>'' |
− | * Ray Kinsella | + | * Ray Kinsella ''<ray.kinsella@intel.com>'' |
− | * Junfeng Li | + | * Junfeng Li ''<hotjunfeng@163.com>'' |
− | * Hailong Wang | + | * Hailong Wang ''<whl739@163.com>'' |
− | * Kai Zheng | + | * Kai Zheng ''<kai.zheng@huawei.com>'' |
− | * George Zhao | + | * George Zhao ''<George.Y.Zhao@huawei.com>'' |
− | * Qing Chang | + | * Qing Chang ''<Qing.Chang1@huawei.com>'' |
− | * Liuxiaoxu | + | * Liuxiaoxu ''<liuxiaoxu1@huawei.com>'' |
− | * Yalei Wang | + | * Yalei Wang ''<william.wangyalei@huawei.com>'' |
− | * Swarup Nayak | + | * Swarup Nayak ''<swarup.nayak1@huawei.com>'' |
− | * Satish Karunanithi | + | * Satish Karunanithi ''<satishk@huawei.com>'' |
− | + | ||
}} | }} | ||
Line 27: | Line 27: | ||
[[Project_Proposals/DMM|DMM Project Proposal]] | [[Project_Proposals/DMM|DMM Project Proposal]] | ||
− | |||
− | |||
== History == | == History == | ||
Line 50: | Line 48: | ||
[[File:Dmm-framework-arc.png|center|450px|DMM Simple Arch]] | [[File:Dmm-framework-arc.png|center|450px|DMM Simple Arch]] | ||
+ | <br> | ||
The DMM framework provides posix socket APIs to the application. A protocol stack could be plugged into the DMM. DMM will choose the most suitable stack according to the RD policy. | The DMM framework provides posix socket APIs to the application. A protocol stack could be plugged into the DMM. DMM will choose the most suitable stack according to the RD policy. | ||
== Quick Start == | == Quick Start == | ||
− | + | With this quick start, users can have a simple understanding of DMM. | |
− | The test topology will typically look like this. It uses kernel stack now. | + | Following the quick start, it will set environment, build DMM and test apps automatically on Vagrant. <br> |
+ | The test topology will typically look like this. It uses DMM + kernel stack now. | ||
+ | Make sure vagrant and virtual box have been installed first. | ||
− | [[File:Dmm_simple_test_topology.png| | + | [[File:Dmm_simple_test_topology.png|center|450px|DMM Simple Test topology]] |
− | + | <br> | |
1. Download dmm code | 1. Download dmm code | ||
# git clone https://gerrit.fd.io/r/dmm | # git clone https://gerrit.fd.io/r/dmm | ||
− | |||
2. Setup Vagrant VMs | 2. Setup Vagrant VMs | ||
# cd dmm/resources/extras | # cd dmm/resources/extras | ||
+ | |||
+ | If users want to change the DISTRO, NICS, VMCPU or VMRAM settings, modified the env.sh and run source env.sh. | ||
+ | |||
# vagrant up | # vagrant up | ||
− | This steps will take a while. | + | This steps will take a while. Until vagrant automatically set the environment and compile dpdk, glog and DMM. |
+ | |||
+ | 3. Log in to server/client in two different terminals. | ||
− | + | # vagrant ssh dmm-test-server | |
− | # vagrant ssh dmm-server | + | and |
− | + | # vagrant ssh dmm-test-client | |
− | # vagrant ssh dmm-client | + | |
− | 4. | + | 4. Users can test sample client/server app in /dmm/release/bin. |
− | + | ||
− | + | ||
− | + | ||
− | + | Before testing apps, users can update configuration files as needed.<br> | |
− | + | Copy two configuration files from /dmm/config/app-test to /dmm/release/bin | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | #sudo cp /dmm/config/app_test/module_config.json /dmm/release/bin | |
− | + | #sudo cp /dmm/config/app_test/rd_config.json /dmm/release/bin | |
− | + | ||
− | + | ||
− | + | ||
− | + | After building the DMM, sample test apps will be generated like below, '''vs_epoll''' and '''vc_common''' <br> | |
+ | Note: Currently we '''only''' support '''dmm + kernel stack''', export NSTACK_LOG_ON=DBG | ||
− | + | Examples: | |
+ | |||
+ | server vbox: | ||
+ | |||
+ | #./vs_epoll -p 20000 -d 172.16.25.125 -a 10000 -s 172.16.25.126 -l 200 -t 5000000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1 | ||
+ | |||
+ | client vbox: | ||
+ | |||
+ | #./vc_common -p 20000 -d 172.16.25.126 -a 10000 -s 172.16.25.125 -l 200 -t 5000000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1 | ||
+ | |||
+ | |||
+ | If users want to test their own apps, copy program executable in app-test directory. Run program using LD_PRELOAD from app-test directory | ||
# sudo LD_PRELOAD=../../release/lib64/libnStackAPI.so ./your_app | # sudo LD_PRELOAD=../../release/lib64/libnStackAPI.so ./your_app | ||
− | + | 5. Post testing cleanup. After completing testing, issue the following command to clean up the vagrant VM's: | |
# vagrant destroy -f | # vagrant destroy -f | ||
Line 118: | Line 117: | ||
* [[IRC | Join fdio-dmm IRC channel]]. | * [[IRC | Join fdio-dmm IRC channel]]. | ||
* [https://git.fd.io/dmm/tree/ Browse the code]. | * [https://git.fd.io/dmm/tree/ Browse the code]. | ||
+ | * [https://wiki.fd.io/view/DMM/workshop 2018/6/26 DMM China Seminar]. | ||
* [[Projects/dmm/Release_Plans/Release_Plan_18.04 | 18.04 Release Plan]] | * [[Projects/dmm/Release_Plans/Release_Plan_18.04 | 18.04 Release Plan]] | ||
+ | * [[Projects/dmm/Release_Plans/Release_Plan_18.07 | 18.07 Release Plan]] | ||
+ | * [[Projects/dmm/Release_Plans/Release_Plan_18.10 | 18.10 Release Plan]] | ||
+ | * [[Projects/dmm/Release_Plans/Release_Plan_19.01 | 19.01 Release Plan]] | ||
+ | * [[Projects/dmm/Release_Plans/Release_Plan_19.04 | 19.04 Release Plan]] | ||
==Reference== | ==Reference== | ||
− | Enabling “Protocol Routing”: Revisiting Transport Layer Protocol Design in Internet Communications | + | If you are using Chrome, you can install extension "'''Markdown Reader'''" to read the MD file. |
− | Empower Diverse Open Transport Layer Protocol in the Cloud Networking By Qing Chang | + | |
− | DMM | + | [http://ieeexplore.ieee.org/document/8114687/] Enabling “Protocol Routing”: Revisiting Transport Layer Protocol Design in Internet Communications, By Dr. '''Kai Zheng''' November 2017 <br> |
+ | [https://wiki.fd.io/view/File:DMM_-_2018_FDIO_Mini_Summit_@LA_v2.pdf] Empower Diverse Open Transport Layer Protocol in the Cloud Networking, By '''Qing Chang''' At FD.io ONS2018 mini summit <br> | ||
+ | [https://www.youtube.com/watch?v=Iu-O8e6Q6-E] Video presentation, By '''Qing Chang''' At FD.io Mini-Summit at KubeCon + CloudNativeCon EU 2018 <br> | ||
+ | [https://git.fd.io/dmm/plain/doc/DMM_DeveloperManual.md] Doc: DMM Developer Manual <br> | ||
+ | [https://git.fd.io/dmm/plain/doc/Build_DMM.md] Doc: How to build DMM <br> | ||
+ | [https://git.fd.io/dmm/plain/doc/TestAppUserGuide.md] Doc: How to test APP linked with DMM <br> | ||
+ | [https://wiki.fd.io/view/File:FD.io_-_The_Universal_Dataplane_v2.pdf] Ray kinsella introduce fd.io and DMM in NJ summit <br> | ||
+ | [https://wiki.fd.io/view/File:02_ld_Light_A_scalable_High_Performance_and_Fully_compatible_TCP_Stack.pdf] Li Dan introduce Light and DMM in LC3 DMM workshop <br> | ||
+ | [https://wiki.fd.io/view/File:F-Stack.pptx] Wang Hailong introduce F-stack and DMM in LC3 DMM workshop <br> |
Latest revision as of 18:13, 15 December 2020
DMM Facts |
Project Lead: George Zhao <George.Y.Zhao@huawei.com>
Repository: git clone https://gerrit.fd.io/r/dmm |
What is DMM
DMM (Dual Mode, Multi-protocol, Multi-instance) is to implement a transport agnostic framework for network applications that can
- Work with both user space and kernel space network stacks
- Use different network protocol stacks based on their functional and performance requirements (QOS)
- Work with multiple instances of a transport protocol stack
Use and engage or adopt a new protocol stack dynamically as applicable.
History
Emerging applications are bringing extremely high-performance requirements to their network systems. Eg. AR/VR, IoT etc. Many of these applications also have unique demands for QOS/SLA. Some application need a low latency network, some need high reliability, etc. Though such performance targets should be required for the complete communication system, the transport layer protocols play a key role and encounter a relatively higher challenge, because traditionally the TCP-based transport layer exploits the “best-effort” principle and inherently provides no performance guarantees. However, as internet applications rapidly grow and diversify, an all-powerful or one-size-fits-all protocol or algorithm becomes less feasible. Thus the traditional single-instance TCP-based network stack faces many challenges when serving applications with different QoS/SLA requirements simultaneously on the same platform.
Moving the networking stack out of the kernel is an occurring trend in both industry implementations and academic literature. Technologies like DPDK (and others) are improving performance of the network stack, bypassing the kernel and avoiding context-switching and data copies, as well as providing a complete set of packet-processing acceleration libraries.
Keeping the above trends in mind the DMM/nStack provides a framework where, system operators can plug in dedicated types of networking stack instances according to performance and/or functional requirements from the user space applications. The application need not consider changes to the transport layer API. A lightweight nStack management daemon is responsible for maintaining the stack instances and the app/socket-to-stack-mappings, which are provided via the orchestration/management interface.
DMM Architecture
The DMM framework provides posix socket APIs to the application. A protocol stack could be plugged into the DMM. DMM will choose the most suitable stack according to the RD policy.
Quick Start
With this quick start, users can have a simple understanding of DMM.
Following the quick start, it will set environment, build DMM and test apps automatically on Vagrant.
The test topology will typically look like this. It uses DMM + kernel stack now.
Make sure vagrant and virtual box have been installed first.
1. Download dmm code
# git clone https://gerrit.fd.io/r/dmm
2. Setup Vagrant VMs
# cd dmm/resources/extras
If users want to change the DISTRO, NICS, VMCPU or VMRAM settings, modified the env.sh and run source env.sh.
# vagrant up
This steps will take a while. Until vagrant automatically set the environment and compile dpdk, glog and DMM.
3. Log in to server/client in two different terminals.
# vagrant ssh dmm-test-server and # vagrant ssh dmm-test-client
4. Users can test sample client/server app in /dmm/release/bin.
Before testing apps, users can update configuration files as needed.
Copy two configuration files from /dmm/config/app-test to /dmm/release/bin
#sudo cp /dmm/config/app_test/module_config.json /dmm/release/bin #sudo cp /dmm/config/app_test/rd_config.json /dmm/release/bin
After building the DMM, sample test apps will be generated like below, vs_epoll and vc_common
Note: Currently we only support dmm + kernel stack, export NSTACK_LOG_ON=DBG
Examples:
server vbox:
#./vs_epoll -p 20000 -d 172.16.25.125 -a 10000 -s 172.16.25.126 -l 200 -t 5000000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
client vbox:
#./vc_common -p 20000 -d 172.16.25.126 -a 10000 -s 172.16.25.125 -l 200 -t 5000000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
If users want to test their own apps, copy program executable in app-test directory. Run program using LD_PRELOAD from app-test directory
# sudo LD_PRELOAD=../../release/lib64/libnStackAPI.so ./your_app
5. Post testing cleanup. After completing testing, issue the following command to clean up the vagrant VM's:
# vagrant destroy -f
Get Involved
- Bi-Weekly DMM Meeting.
- Join the DMM Mailing List.
- Join fdio-dmm IRC channel.
- Browse the code.
- 2018/6/26 DMM China Seminar.
- 18.04 Release Plan
- 18.07 Release Plan
- 18.10 Release Plan
- 19.01 Release Plan
- 19.04 Release Plan
Reference
If you are using Chrome, you can install extension "Markdown Reader" to read the MD file.
[1] Enabling “Protocol Routing”: Revisiting Transport Layer Protocol Design in Internet Communications, By Dr. Kai Zheng November 2017
[2] Empower Diverse Open Transport Layer Protocol in the Cloud Networking, By Qing Chang At FD.io ONS2018 mini summit
[3] Video presentation, By Qing Chang At FD.io Mini-Summit at KubeCon + CloudNativeCon EU 2018
[4] Doc: DMM Developer Manual
[5] Doc: How to build DMM
[6] Doc: How to test APP linked with DMM
[7] Ray kinsella introduce fd.io and DMM in NJ summit
[8] Li Dan introduce Light and DMM in LC3 DMM workshop
[9] Wang Hailong introduce F-stack and DMM in LC3 DMM workshop