All Projects → yuyang0 → shuke

yuyang0 / shuke

Licence: GPL-3.0 license
A high performance authority-only dns server implemented with DPDK

Programming Languages

c
50402 projects - #5 most used programming language
python
139335 projects - #7 most used programming language
shell
77523 projects
Makefile
30231 projects

Labels

Projects that are alternatives of or similar to shuke

Dpvs
DPVS is a high performance Layer-4 load balancer based on DPDK.
Stars: ✭ 2,168 (+4717.78%)
Mutual labels:  dpdk
oko
Extend Open vSwitch with BPF programs at runtime
Stars: ✭ 29 (-35.56%)
Mutual labels:  dpdk
k8s-rdma-sriov-dev-plugin
Kubernetes Rdma SRIOV device plugin
Stars: ✭ 92 (+104.44%)
Mutual labels:  dpdk
Opennetvm
A high performance container-based NFV platform from GW and UCR.
Stars: ✭ 177 (+293.33%)
Mutual labels:  dpdk
dpdk doc
dpdk中文资料及会议文档ppt
Stars: ✭ 151 (+235.56%)
Mutual labels:  dpdk
ndn-dpdk
NDN-DPDK: High-Speed Named Data Networking Forwarder
Stars: ✭ 85 (+88.89%)
Mutual labels:  dpdk
Lvs Dpdk
LVS on dpdk
Stars: ✭ 125 (+177.78%)
Mutual labels:  dpdk
vigor
Main repository of the Vigor NF verification project.
Stars: ✭ 40 (-11.11%)
Mutual labels:  dpdk
mydpdkdns
dns server with high performance, based on dpdk.
Stars: ✭ 41 (-8.89%)
Mutual labels:  dpdk
dperf
dperf is a DPDK based 100Gbps network performance and load testing software.
Stars: ✭ 1,320 (+2833.33%)
Mutual labels:  dpdk
Packet Journey
DEPRECATED - Packet-journey, userland router which uses DPDK for its fastpath switching.
Stars: ✭ 200 (+344.44%)
Mutual labels:  dpdk
Libmoon
libmoon is a library for fast and flexible packet processing with DPDK and LuaJIT.
Stars: ✭ 250 (+455.56%)
Mutual labels:  dpdk
starfish
Rust futures on spdk
Stars: ✭ 31 (-31.11%)
Mutual labels:  dpdk
Npf
NPF: packet filter with stateful inspection, NAT, IP sets, etc.
Stars: ✭ 160 (+255.56%)
Mutual labels:  dpdk
butterfly
Butterfly connects Virtual Machines and control their traffic flow
Stars: ✭ 48 (+6.67%)
Mutual labels:  dpdk
Ruru
Real-time TCP latency monitoring using DPDK backend and a 3D React frontend
Stars: ✭ 155 (+244.44%)
Mutual labels:  dpdk
yastack
YAStack: User-space network-stack based on DPDK, FreeBSD TCP/IP Stack, EnvoyProxy
Stars: ✭ 90 (+100%)
Mutual labels:  dpdk
DPDK SURICATA-4 1 1
dpdk infrastructure for software acceleration. Currently working on RX and ACL pre-filter
Stars: ✭ 81 (+80%)
Mutual labels:  dpdk
dpdk engineer manual
【冲破内核瓶颈,让I/O性能飙升】DPDK工程师手册,官方文档,最新视频,开源项目,实战案例,论文,大厂内部ppt,知名工程师一览表
Stars: ✭ 535 (+1088.89%)
Mutual labels:  dpdk
nvfuse
NVMe based File System in User-space
Stars: ✭ 81 (+80%)
Mutual labels:  dpdk

SHUKE

Build Status

A high performance authority-only dns server implemented with DPDK

Features

  1. support storing zone data in mongodb
  2. high performance

performance

test environment

NIC:  Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection
CPU: Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
Memory: 64GB
OS:  Ubuntu 16.04.1 LTS
Kernel: 4.4.0-81-generic

result

  1. one 10G port

    benchmark(1 10G port)

    pls note when test with 5 cores, shuke actually processed 12.43M and 11.39M requests per second, but the client reports 10.7M and 9.46M, this is because the NIC doesn't have enough bandwidth.

  2. two 10G port

    benchmark(2 10G port)

Quick start

vagrant

if you use vagrant, it is very simple to try shuke

  1. install virtualbox and vagrant

  2. run cd vagrant && vagrant up

  3. ssh to the guest machine, then run the following command:

    cd /shuke
    sudo build/shuke-server -c vagrant/test.toml
    
  4. in the host machine, run dig www1.example.com. @172.28.128.10 -p 19899 -t A

tips: vagrant/setup.sh is a good place to figure out how to build this project and prepare the running environment.

buid

  1. clone source code: git clone --recursive https://github.com/yuyang0/shuke.git

  2. build dpdk, shuke is only tested on dpdk-17.05.2. if you use linux x86-64, you can run bash 3rd/dpdk/usertools/dpdk-setup.sh, then perform the following instructions.

    • press [12] to compile dpdk for linux x86-64 target.
    • press [15] to insert UIO
    • press [17] to insert KNI
    • press [19]([18] for non-NUMA systems) to setup huge pages, since shuke uses huge page heavily, so allocate as large as possible
    • press [21] to bind NIC device
    • press [32] to quit
  3. install autoconf and libtool

  4. run make at the top of source tree, then you will get a binary file named build/shuke-server.

tips

  1. if you use ubuntu, you can just run bash ./bootstrap.sh to build shuke
  2. if you want to build shuke in DEBUG mode, just run make DEBUG=1
  3. if you want to see the compiler command, just run make V=1
  4. if you want to support ip fragmentation, just run make IP_FRAG=1.

run

just run build/shuke-server -c conf/shuke.toml, you may need to change the config in the config file.

mongo data schema

every zone should have a collection in mongodb. you can use tools/zone2mongo.py to convert zone data from zone file to mongodb

zone collection

this collection used to track the RR of a zone, the collection name is the domain of the zone, since mongodb's collection name can't end with dot, so the domain should be the absolute domain name except the last dot. the collection should contain the following fields

{
    name: "the absulute owner name,
    ttl: 1234567,
    type: "DNS type",
    rdata: "rdata"
}

the meaning of fields is clear. just like the zone file.

Admin Commands

SHUKE has a tcp server used to execute admin operations, tools/admin.py is the client. it supports several commands:

  1. zone: this command used to manipulate the zone data in memory, it has many subcommands.
    1. get: get a zone
    2. getall: get all zones
    3. reload: reload multiple zone
    4. reloadall: reload all zone
    5. get_numzones: return the number of zones in memory cache.
  2. config: this command is used to manipulate the config of server.
  3. version: return version of shuke
  4. debug: mainly for debug
    1. segfault: cause a segement fault
    2. oom: trigger a OOM error.
  5. info: print information of server, including statistics. subcommands
    1. all or default or empty: return all information
    2. server: return the server information
    3. memory: return memory usage information
    4. cpu: return cpu usage information
    5. stats: statistics information

TODO

  1. support EDNS, DNSSEC and PTR (currently only support A,AAAA,NS,CNAME,SOA,SRV,TXT,MX.).
  2. support mysql (currently only support mongodb).
  3. plugin system
  4. some anti-attack mechanisms such as white list, black list, response rate limit(RRL), etc.
  5. HTTP api
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].