== 代號說明
我們主要以虛擬機器測試,在此簡單說明一下我們使用的代號:

 * host: 虛擬機主機,包含 hypervisor (type 1 / type 2) 和 host OS (type 2)
 * linuxrouter: 本身是 Linux 虛擬機,作為 router 使用,同時可接到 WAN 和 LAN
 * bsdrouter: 本身是 BSD 虛擬機,作為 router 使用,同時可接到 WAN 和 LAN
 * linuxserver:本身是 Linux 虛擬機,對外提供服務,例如 HTTP,但僅能接到 LAN
 * bsdserver:本身是 BSD 虛擬機,對外提供服務,例如 HTTP,但僅能接到 LAN

== 2014-05-10 測試
使用 Linux 作為 router,測試小型 (< 5 KiB) 靜態網頁。我們在 host 上用 `ab` (ApacheBench) 測試,測試的指令是:
----------------------
ab -n 10000 -c 5 http://hostname/
----------------------
每次測試前都會重新啟動 web server 和 router 上對應的程式。

 * 機器說明:
  - host: Xen 4.4.0, Dom0 Fedora 20, Linux 3.14.2
  - linuxrouter: Fedora 20, Linux 3.14.2
  - linuxserver: Arch Linux, Linux 3.14.2, Apache 2.4.9, NGINX 1.6.0, lighttpd 1.4.35
  - bsdserver: FreeBSD 10.0-RELEASE-p2, Apache 2.4.9, NGINX 1.6.0, lighttpd 1.4.35
 * 網路說明:
  - WAN: Dom0 Linux bridge,與實體網卡共同橋接以連至外網
  - LAN: Dom0 Linux bridge,只有虛擬網卡,必須由 linuxrouter 轉送才能連至外網

 * 測試結果:數字表示所需秒數,括號內數字表示和直接連線的差異

[grid="rows",options="header",cols="7"]
|=============================
| 連線方式 3+| linuxserver 3+| bsdserver
|| Apache | NGINX | lighttpd | Apache | NGINX | lighttpd
| 直接連線
|   2.278           |   2.130           |   2.225
|   2.068           |   1.822           |   2.107
| linuxrouter IPTables
|   2.980 (*76.4%*) |   2.728 (*78.1%*) |   2.742 (*81.1%*)
|   3.097 (*66.8%*) |   2.767 (*65.8%*) |   3.002 (*70.2%*)
| linuxrouter NFTables
|   2.972 (*76.6%*) |   2.909 (*73.2%*) |   2.785 (*79.9%*)
|   2.931 (*70.6%*) |   2.745 (*66.4%*) |   3.154 (*66.8%*)
| linuxrouter HAProxy
|   3.045 (*74.8%*) |   2.906 (*73.3%*) |   2.770 (*80.3%*)
|   3.240 (*63.8%*) |   2.870 (*63.5%*) |   2.757 (*76.4%*)
| linuxrouter NGINX reverse proxy
|   3.171 (*71.8%*) |   2.999 (*71.0%*) |   3.893 (*57.1%*)
|   3.234 (*63.9%*) |   3.216 (*56.7%*) |   3.358 (*62.7%*)
| linuxrouter sslh-fork
|  37.728 (*6.0%*)  |  36.492 (*5.8%*)  |  36.848 (*6.0%*)
|  52.024 (*4.0%*)  |  46.976 (*3.9%*)  |  47.576 (*4.4%*)
| linuxrouter sslh-select
| 161.864 (*1.4%*)  | 151.464 (*1.4%*)  | 153.428 (*1.5%*)
| 188.576 (*1.1%*)  | 165.536 (*1.1%*)  | 175.784 (*1.7%*)
|=============================

  - haproxy 的 balance 方法我們是選預設的 round-robin。
  - nginx 也會因為短時間內開啟太多 port 而無回應,因此這裡的數值實際上是將兩次 5000 次連線的結果相加得到的。
  - sslh 可能因為短時間內開啟太多 port 而無法回應,因此這裡的數值實際上是將 2500 次連線的結果乘以 4 得到的。