posted by Jon Nelson on Mon 25th Nov 2002 02:49 UTC

"Performance"
What does "high performance'' mean?

In the context of web serving, a ``high performance'' webserver features low latency and high throughput. For some types of documents, Boa can do this very well. Using the benchmark systems and hardware described below, Boa boasts an excellent average latency of under 425ms under heavy load (that's on a Duron 700 client and servers with RealTek rtl8139 10/100 cards with a hub). That's pretty snappy, folks. Additionally, it maintains low latency while providing high throughput, typically saturating 100MBit connections, regardless of file size or concurrency.

What about Boa's resource consumption?

Boa has minimal resource requirements. The stripped binary size on Linux using gcc 2.95.3 and GNU libc 2.2.5 is 61K (495K statically linked). Using a library such as uClibc Boa can get much smaller - 92K statically linked. In conjuction with very low memory requirements, Boa is ideal for machines without a great deal of horsepower. Boa is particularly well suited to the embedded market, and can currently be found on numerous hardware devices (including the ThinkNIC and a series of Axis web cameras). Larry Doolittle has been successful in running Boa on (seemingly) modest hardware, including a 200MHz StrongARM-based unit roughly the size of a credit card (http://recycle.lbl.gov/~ldoolitt/bse/). Boa once powered the "World's Smallest Web Server'', located at http://wearables.stanford.edu/.

My current hardware, consisting of AMD Duron 700's with 384MB of RAM, RealTek 8139 and SiS900 chipset-based NICs, a LinkSys 10/100 hub, and Linux 2.4 is probably considered mid-range. For Boa, this hardware configuration is more than adequate. The VmSize of Boa on this workstation at this moment is 1696kB, 85% of which is libraries. The VmData size is currently 108kB. Boa consumes roughly 20kB of memory per concurrent connection. Thus, going full-tilt with (for example) 500 simultaneous connections, Boa would consume (1700 + 20 * 500) = 11700 == roughly 12MB of RAM. Determining total memory consumption of a statically compiled Boa is left as an exercise for the reader (determine the "resting'' memory consumption and add roughly 20KB per active connection).

As an example of Boa's resource utilization, please consult the following table:

Server Stripped Binary Size VmSize External Libraries
Boa 0.94.13 61kB 1700kB 0
Apache 1.3.26 277kB 11,000kB 9
thttpd 2.20c 64kB 1800kB 0

Over-the-Wire Performance

A very recent addition to my hardware includes two Netgear GA-302T Gig-E cards, connected to each other. Over these cards, on the same hardware, I have been able to achieve impressive results:

Results from running "ZeusBench'' with a file size of 105165 bytes, 215 concurrency, using keepalive. 10,000 fetches:

Server: Boa/0.94.14rc5
Document Length: 105165
Concurency Level: 215
Time taken for tests: 24.748 seconds
Complete requests: 10000
Failed requests: 0
Keep-Alive requests: 10002
Bytes transfered: 1064119164
HTML transfered: 1061744679
Requests per seconds: 404.07
Transfer rate: 42998.19 kb/s
Connnection Times (ms)
min avg max
Connect: 0 14 9029
Total: 388 526 9547

And from 'apache bench':

Concurrency Level: 215
Time taken for tests: 23.298 seconds
Complete requests: 10000
Failed requests: 0
Broken pipe errors: 0
Keep-Alive requests: 10001
Total transferred: 1063465974 bytes
HTML transferred: 1061094751 bytes
Requests per second: 429.22 [#/sec] (mean)
Time per request: 500.91 [ms] (mean)
Time per request: 2.33 [ms] (mean, across all concurrent requests)
Transfer rate: 45646.23 [Kbytes/sec] received

Distilling the numbers means that I was able to achieve 43-45% of the maximum theoretical bandwidth of Gig-E. Also note that at this time, both Gig-E cards had MTUs of 1500 bytes, as the author was unable to get the cards to behave with the 9000 byte Jumbo Frame MTUs. Keep in mind that both ZeusBench and ApacheBench are each only single processes, and therefore can't accurately reflect ``true'' load on machine from many disparite machines. However, also keep in mind that while serving static content, Boa will never introduce a load of more than 1.0 to the system, vitally important to some applications. In fact, I have received many reports from people detailing how Boa has helped them reduce load on their servers. One administrator wrote to describe how he reduced load on his main Apache servers from 200-300 down to 10-20 by serving static content from dedicated Boa servers.

Table of contents
  1. "Introduction, History"
  2. "Performance"
  3. "More Performance, Conclusion"
e p (0)    16 Comment(s)

Technology White Papers

See More