ANS(accelerated network stack) is DPDK native TCP/IP stack and also refer to FreeBSD implementation. ANS provides a userspace TCP/IP stack for use with the Intel DPDK.
ans: accelerated network stack process.
librte_ans: TCP/IP stack static library. ANS use dpdk mbuf, ring, memzone, mempool, timer, spinlock. so zero copy mbuf between dpdk and ANS.
librte_anssock: ANS socket lib for application, zero copy between ANS and application.
librte_anscli: ANS cli lib for route/ip/neigh/link configuration.
cli: Command for configure ANS tcp/ip stack.
example: ANS application example.
test: Example application with ANS for testing ANS tcp/ip stack
Support environment
Support feature:
# git clone https://github.com/ansyun/dpdk-ans.git
# export RTE_ANS=/home/mytest/dpdk-ans
# ./install_deps.sh
# cd ans
# make
|-------| |-------| |-------|
APP |anssock| |anssock| |anssock|
|-------| |-------| |-------|
| | |
fd fd fd
--------------------------------------------------
ANS | | |
|-------| |-------| |-------|
| TCP | | TCP | | TCP |
|---------------------------------------|
| IP/ARP/ICMP |
|---------------------------------------|
|LCORE0 | |LCORE1 | |LCORE2 |
|-------| |-------| |-------|
| | |
|---------------------------------------|
| NIC + RSS |
|---------------------------------------|
|------------------------------|
| TCP Server CPS |
|------------------------------|
| ANS with epoll |
| (one core) |
|------------------------------|
| 100k connection/s |
|------------------------------|
L3 forwarding with NIC performance testing
ENV: CPU- Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00GHz, NIC- Intel 82599ES 10-Gigabit, Test tool:pktgen-DPDK
|--------------------------------------|
| L3 forwarding performance |
| (one lcore) |
|--------------------------------------|
| Packet size(byte)| Throughput(Mpps) |
|--------------------------------------|
| 64 | 11.78 |
|--------------------------------------|
| 128 | Line Rate |
|--------------------------------------|
- L3 forwarding with vhost/virtio performance testing
ENV: Intel(R) Xeon(R) CPU E5-2618L v4 @ 2.20GHz, NIC- vhost/virtio, Test tool:pktgen-DPDK
|--------------------------------------|
| L3 forwarding performance |
| (one lcore) |
|--------------------------------------|
| Packet size(byte)| Throughput(Mpps) |
|--------------------------------------|
| 64 | 6.33 |
|--------------------------------------|
| 128 | 5.94 |
|--------------------------------------|
| 256 | Line Rate |
|--------------------------------------|
- dpdk-redis performance testing
====ENV=== CPU:Intel(R) Xeon(R) CPU E5-2609 v4 @ 1.70GHz. NIC:Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ANS run on a lcore.
root@ubuntu:~/src/dpdk-redis# ./src/redis-benchmark -h 10.0.0.2 -p 6379 -n 100000 -c 50 -q PING_INLINE: 138888.89 requests per second PING_BULK: 141242.94 requests per second SET: 140449.44 requests per second GET: 141043.72 requests per second INCR: 141442.72 requests per second LPUSH: 141043.72 requests per second LPOP: 140449.44 requests per second SADD: 141643.06 requests per second SPOP: 141843.97 requests per second LPUSH (needed to benchmark LRANGE): 141442.72 requests per second LRANGE_100 (first 100 elements): 48192.77 requests per second LRANGE_300 (first 300 elements): 14330.75 requests per second LRANGE_500 (first 450 elements): 10405.83 requests per second LRANGE_600 (first 600 elements): 7964.95 requests per second MSET (10 keys): 107758.62 requests per second
- dpdk-nginx CPS performance
CPU: Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00GHz NIC:82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ANS run on a lcore. 4 dpdk-nginx run on ANS.
Running 30s test @ http://10.0.0.2 20 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 480.80us 73.12us 4.66ms 88.86% Req/Sec 5.32k 125.94 6.98k 84.30% Latency Distribution 50% 478.00us 75% 505.00us 90% 535.00us 99% 648.00us 3186335 requests in 30.10s, 2.51GB read Requests/sec: 105860.26 Transfer/sec: 85.31MB
ANS run on two lcore. 8 dpdk-nginx run on ANS.
Running 30s test @ http://10.0.0.2 20 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 251.70us 89.45us 4.39ms 68.59% Req/Sec 10.28k 340.17 12.40k 67.67% Latency Distribution 50% 246.00us 75% 310.00us 90% 363.00us 99% 480.00us 6155775 requests in 30.10s, 4.84GB read Requests/sec: 204512.88 Transfer/sec: 164.81MB
- dpdk-nginx QPS performance
CPU: Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00GHz NIC:82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ANS run on a lcore. 8 dpdk-nginx run on ANS.
Running 30s test @ http://10.0.0.2 20 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 257.91us 407.36us 24.37ms 98.77% Req/Sec 20.85k 1.84k 26.88k 70.23% Latency Distribution 50% 214.00us 75% 289.00us 90% 338.00us 99% 825.00us 12488349 requests in 30.10s, 9.89GB read Requests/sec: 414900.42 Transfer/sec: 336.31MB
ANS run on two lcore. 10 dpdk-nginx run on ANS.
Running 30s test @ http://10.0.0.2 20 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 184.60us 165.39us 12.97ms 98.92% Req/Sec 26.69k 0.93k 29.92k 79.17% Latency Distribution 50% 186.00us 75% 200.00us 90% 216.00us 99% 370.00us 15985217 requests in 30.10s, 12.65GB read Requests/sec: 531077.97 Transfer/sec: 430.48MB
#### Examples
-------
- [dpdk http server](https://github.com/ansyun/dpdk-ans/tree/master/examples/http_server): http server run on ANS tcp/ip stack.
- [dpdk https server](https://github.com/ansyun/dpdk-ans/tree/master/examples/https_server): https server run on ANS tcp/ip stack.
- [dpdk-nginx](https://github.com/ansyun/dpdk-nginx), nginx was porting to run on ANS tcp/ip stack.
- [dpdk-redis](https://github.com/ansyun/dpdk-redis), redis was porting to run on ANS tcp/ip stack.
- [dpdk-iperf](https://github.com/ansyun/dpdk-iperf), iperf was porting to run on ANS tcp/ip stack.
- [dpdk-httpperf](https://github.com/ansyun/dpdk-httpperf), wrk was porting to run on ANS tcp/ip stack.
#### [Wiki Page](https://github.com/ansyun/dpdk-ans/wiki)
-------
You can get more information and instructions from [wiki page](https://github.com/ansyun/dpdk-ans/wiki).
#### Notes
-------
- You shall use the same dpdk version as ans libs used.
- Shall use the same gcc version to compile your application.
- ANS socket application run as a secondary dpdk process, If you got below log, shall execute below commands to disable ASLR.
EAL: WARNING: Address Space Layout Randomization (ASLR) is enabled in the kernel. EAL: This may cause issues with mapping memory into secondary processes $ sudo sysctl -w kernel.randomize_va_space=0
- You shall modify the NIC configuration in ans_main.c based on your NIC type.
- ANS didn't support loopback interface, so socket client and server can't be in the same ANS tcp/ip stack.
- In order to improve ANS performance, you shall isolate ANS'lcore from kernel by isolcpus and isolcate interrupt from ANS's lcore by update /proc/irq/default_smp_affinity file.
- ANS run as dpdk primary process, when startup ANS, shall stop other secondary processes(nginx/redis/http_server).
- Don't run ANS on lcore0, it will effect ANS performance.
- You shall include dpdk libs as below way because mempool lib has __attribute__((constructor, used)) in latest version, otherwise your application would coredump.
-$(RTE_ANS)/librte_anssock/librte_anssock.a \ -L$(RTE_SDK)/$(RTE_TARGET)/lib \ -Wl,--whole-archive -Wl,-lrte_mbuf -Wl,-lrte_mempool_ring -Wl,-lrte_mempool -Wl,-lrte_ring -Wl,-lrte_eal -Wl,--no-whole-archive -Wl,-export-dynamic -lnuma \
#### Support
-------
BSD LICENSE, you may use ANS freely.
For free support, please use ANS team mail list at anssupport@163.com, or QQ Group:86883521 (FULL), 519855957(Full), 719128726, or https://dpdk-ans.slack.com, or skype(bluenet13).