The Flash Web Server


Description The Flash Web server is a high-performance Web server developed using a novel concurrency architecture. It combines the high performance of single-process event-driven servers on cached workloads with the performance of multi-process and multi-threaded servers on disk-bound workloads. Furthermore, the Flash Web server is easily portable since it achieves these results using facilities available in all modern operating systems.

The Flash Web Server is described in detail in the paper "Flash: An efficient and portable Web server." Note that the current release is version 0.1 alpha, an experimental release. It is currently experimental software and is not intended for production use in its present form.
 

Features
  • High performance on a wide range of workloads
  • Low resource requirements
  • Handles large # of clients
  • Multiprocessor support
  • Source code availability
  • Portability across many Unix systems
  • Highly optimized code
  • Aggressive caching
  • Easy configuration

 
Uses &
Advantages
Flash is one of the fastest portable Web servers available. Furthermore, it is one of the few Web servers in its class that is available in source form.

The source code is small enough that it can be understood within a week by a senior undergraduate or early graduate student. As such, Flash is suitable for course projects.
 

Platforms The Flash Web Server has been compiled and run on
  • FreeBSD / x86
  • Linux / x86
  • Tru64(Digital) Unix / Alpha
  • Solaris / Sparc and x86
  • AIX / IBM RS6000

 
Developers The Flash Web Server was initially developed at Rice University by Vivek Pai under the direction of Peter Druschel and Willy Zwaenepoel. Further development has continued at Princeton University by Vivek Pai and his students.
 
License Flash is NOT under the GPL or its variants - please read this section carefully. We are licensing the Flash Web Server free of charge to individuals at universities for non-commercial academic use and to non-profit entities for non-commercial use. Any other use requires obtaining a license from the Rice University Office of Technology Transfer [techtran@rice.edu]

In short, if you are using the Flash server at a company in any capacity, then you must negotiate a license with the Rice University Office of Technology Transfer. Likewise if you are using it in any commercial capacity.

The Flash Web Server is copyrighted software and can NOT be redistributed. Please see the copyright notice for more details regarding the license terms and copyrights.
 

Files The Flash Web Server version 0.1a package includes all of the source files necessary to build the server. If you download the source-only version, we assume the availability of the gcc compiler or its equivalent, along with the gnumake utility. For more details, see the README file including with the package. Unpacking the files requires the gunzip and tar programs.

Note that the code released here has not been state-of-the-art for some time - it uses the standard select system call (not scalable), it uses writev instead of sendfile (more data copies), and uses far more mapped regions than is advisable. To download the package, please go here. Please do so only if you provably meet the requirements for the free version of the license. Commercial inquiries should be directed to the Office of Technology Transfer at Rice University.

To do a reasonable job of benchmarking, particularly on Linux, please take the following steps:

  • Re-enable mincore. When Flash was developed, mincore did not exist on Linux.
  • Mark all newly-accepted sockets as non-blocking. This flag is inherited on FreeBSD (and hence the code is commented out), but not on Linux
  • Set the cache sizes to something reasonable for the amount of physical memory on your machine
     
  • Contact Vivek S. Pai
    Princeton University CS Department
    35 Olden Street
    Princeton, NJ 08544
    609-258-2086
    vivek@cs.princeton.edu