Git Product home page Git Product logo

mtcp's Introduction

========================================================================
 README for mTCP
========================================================================

mTCP is a highly scalable user-level TCP stack for multicore systems. 
mTCP source code is distributed under the Modified BSD License. For 
more detail, please refer to the LICENSE. The license term of io_engine 
driver and ported applications may differ from the mTCP’s.

========================================================================
 PREREQUISITE
========================================================================

We require the following libraries to run mTCP.
 - libps (PacketShader I/O engine library)
 - libnuma
 - libpthread
 - librt

Compling PSIO driver requires kernel headers.
  - For Debian/Ubuntu, try apt-get install linux-headers-$(uname -r)

** PSIO requires Intel 82599-based 10 GbE cards and Linux 2.6 kernel **
  - Please refer to http://shader.kaist.edu/packetshader/io_engine/

========================================================================
 INCLUDED DIRECTORIES
========================================================================

mtcp - mtcp source code directory
mtcp/src - source code
mtcp/src/include - mTCP’s internal header files
mtcp/lib - library file
mtcp/include - header files that applications will use

io_engine - event-driven packet I/O engine (io_engine)
io_engine/driver - driver source code
io_engine/lib - io_engine library
io_engine/include - io_engine header files
io_engine/samples - sample io_engine applications (not mTCP’s)

apps - mTCP applications
apps/example - example applications (see README)
apps/lighttpd-1.4.32 - mTCP-ported lighttpd (see INSTALL)
apps/apache_benchmark - mTCP-ported apach benchmark (ab) (see README-mtcp)

util - useful source code for applications

config - sample mTCP configuration files (may not be necessary)

========================================================================
 INSTALL GUIDES
========================================================================

1. make in io_engine/driver
  - check ps_ixgbe.ko

2. install the driver
  - ./install.py <# cores> <# cores>
  - refer to http://shader.kaist.edu/packetshader/io_engine/
  - you may need to change the ip address in install.py:46

3. make in io_engine/lib
  - check libps.a

4. make in mtcp/src
  - check libmtcp.a in mtcp/lib
  - check header files in mtcp/include

5. make in apps/example
  - check example binary files

6. Check the configurations
  - epserver.conf for server-side configuration
  - epwget.conf for client-side configuration
  - you may write your own configuration file for your application

7. Run the applications!

========================================================================
 TESTED ENVIRONMENTS
========================================================================

mTCP runs on Linux-2.6-based operating systems with generic x86_64 CPUs,
but to help evaluation, we provide our tested environments as follows.

Intel Xeon E5-2690 octacore CPU @ 2.90 GHz
32 GB of RAM (4 memory channels)
10 GbE NIC with Intel 82599 chipset (specifically Intel X520-DA2)
Debian 6.0.7 (Linux 2.6.32-5-amd64)

Intel Core i7-3770 quadcore CPU @ 3.40 GHz
16 GB of RAM (2 memory channels)
10 GbE NIC with Intel 82599 chipset (specifically Intel X520-DA2)
Ubuntu 10.04 (Linux 2.6.32-47)

Event-driven PacketShader I/O engine (extended io_engine-0.2)
 - PSIO is currently only compatible with Linux-2.6.

========================================================================
 NOTES
========================================================================

1. mTCP currently runs with fixed memory pools. That means, the size of
   TCP receive and send buffers are fixed at the startup and does not 
   increase dynamically. This could be performance limit to the large 
   long-lived connections. Be sure to configure the buffer size 
   appropriately to your size of workload.

2. The client side of mTCP supports mtcp_init_rss() to create an 
   address pool that can be used to fetch available address space in 
   O(1). To easily congest the server side, this function should be 
   called at the application startup.

3. mTCP currently supports only 1 listening socket per an mTCP thread.

4. The supported socket options are limited for right now. Please refer 
   to the mtcp/src/api.c for more detail.

5. The counterpart of mTCP should enable TCP timestamp.

========================================================================
 FREQUENTLY ASKED QUESTIONS
========================================================================

1. How can I quit the application?
  - Use ^C to gracefully shutdown the application. Two consecutive 
    ^C (separated by 1 sec) will force quit.

2. My application keeps printing "No route to 0.0.0.0"
  - Try to turn off your network-manager for xge*. The network manager 
    can override the IP configuration set by install.py in PSIO driver.

3. Can I statically set the routing or arp table?
  - Yes, mTCP allows static route and arp configuration. Go to the 
    config directory and see sample_route.conf or sample_arp.conf. 
    Copy and adapt it to your condition and link (ln -s) the config 
    directory to the application directory. mTCP will find 
    config/route.conf and config/arp.conf for static configuration.

========================================================================
 CAUTION
========================================================================

1. Do not remove ps_ixgbe driver while running mTCP applications. The 
   application will go panic.

2. Use the ps_ixgbe driver contained in this package, not the one from 
   some other place (e.g., from io_engine github).

========================================================================

                   Contact: mtcp at list.ndsl.kaist.edu
                             April 2, 2014. 
                 EunYoung Jeong <notav at ndsl.kaist.edu>

mtcp's People

Stargazers

Felipe Monteiro avatar Clayton Wheeler avatar

Watchers

Sathish avatar Vinay Y S avatar  avatar Rolland Santimano avatar Phaneesh avatar Anup Patel avatar Regunath B avatar James Cloos avatar  avatar Smit Shah avatar  avatar  avatar  avatar Poornima avatar  avatar  Anand Immannavar avatar  avatar Nandhu Dheeraj avatar  avatar  avatar  avatar  avatar Ajay S avatar Kumar Gaurav avatar Shoury avatar Abinash Mohapatra avatar Kartik Ukhalkar avatar  avatar  avatar Anand Karthik Tumuluru avatar Koushik Ramachandra avatar Mayank Jha avatar Kevin Sebastian avatar Sudeep Kumar Moharana avatar Jain Johny avatar Anuj Agrawal avatar K avatar  avatar  avatar Harshvardhan Shrivastava avatar  avatar  avatar  avatar  avatar  avatar  avatar pavangundeti avatar  avatar Charu Jain avatar  avatar  avatar  avatar Sharath Gururaj avatar Arun Ray avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.