CoW: A Cooperative Multithreading Web server

Introduction

CoW (Cooperative Multithreading Web Server) is a high performance, multithreaded web server developed at the University of California, Davis. CoW's use of threads rather than processes makes context switches less expensive and decreases resource usage, resulting in higher performance. Furthermore, CoW uses the userspace GNU Pth cooperative threading library. Using cooperative multithreading avoids the additional overhead associated with ensuring mutual exclusion in critical regions and thus further increases performance over traditional process and thead-based servers. In general, the use of GNU Pth gives us the high performance of an event-driven server like Boa with the ease of programming of a threaded server.

Requirements

CoW has been developed and tested on Linux, but should run only any unix-like operating system. If you have any problems running CoW, please send a bug report to roper@cs.ucdavis.edu. Please include as much information about your system setup as possible (operating system/distribution, versions of relevant libraries, etc.).

Previous versions of CoW required a patched version of GNU Pth to run. Starting with version 0.4.0, a stripped down, patched copy of Pth 2.0.0 is included in the CoW distribution and statically linked into the final CoW executable. If you have an existing copy of Pth installed on your system, it will not be affected.

Download

CoW can be downloaded below. A changelog for the latest release is available here.

Notice: We discovered a major bug which caused CoW to only return the beginning of each requested webpage. This bug has been fixed in version 0.4.1; all versions prior to 0.4.1 were affected and should not be used.

I finally got around to fixing up the autoconf build rules for version 0.4.2 so that I could release it; 0.4.2 includes experimental support for Linux 2.6's epoll event notification mechanism as well as significantly improved output buffering support, a working HTTP keep-alive implementation, and more. Version 0.4.2 performs much better than 0.4.1 and is the version described in the paper we submitted to Usenix 2004. It is highly recommended that you use this version, although the experimental epoll support will not be enabled unless you pass the --with-epoll option to the configure script.

FilenameReleased
cow-0.4.2.tar.gz1-20-2004
cow-0.4.1.tar.gz8-28-2003
cow-0.4.0.tar.gz7-23-2003
cow-0.3.2.tar.gz6-23-2002

Authors and Contributors

CoW was originally designed and implemented by Takashi Ishihara (ishihara@cs.ucdavis.edu). Takashi was in charge of all releases up to 0.3.2.

Starting with version 0.4.0, Matt Roper (roper@cs.ucdavis.edu) became the maintainer for CoW. Matt has added added configuration file support to CoW, improved the autoconf/automake build system, and fixed bugs from the previous release. Matt has also developed a version of CoW that runs on the 8-bit Rabbit microprocessors from Z-World, Inc (website coming soon).

The development of CoW was partially supported by Z-World, Inc. and the University of California under the MICRO program. The National Science Foundation partially supported the computing equipment used in our work through grant EIA-0224469.

License

Starting with version 0.4.0, CoW includes a stripped down copy of GNU Pth so we have changed the license from a BSD license to the GPL. You can view a copy of the license here.

Links