在支持企業應用程序方面,Linux 2.6 內核做了很多改進。本文給出了 IBM Linux Technology Center 的 Web 服務測試工作的結果,從各個不同的角度對 Linux 2.4 和 2.6 內核進行了比較。其中的亮點是 2.6 內核的關鍵增強功能、測試方法學和測試本身的結果。最終結果:2.6 內核提供 Web 頁服務要比 2.4 快得多,並且可靠性一點也不差。 在 IBM Linux Technology Center (LTC) 進行的 Linux Web 服務測試工作的目的是發現 Linux 內核的缺陷。測試著重於與實際情況中使用 Web 服務器/應用程序服務器的企業用戶環境相關的工作負荷,也著重於提高 Linux 內核的穩定性、可擴展性以及 (內核) 與 Web 服務器/實用程序服務器的兼容性。最重要的並不是識別 Web 服務器和應用程序服務器的缺陷。
測試綜述 兩類 Web 服務測試 有兩類服務器可以用於 Web 服務:Web 服務器和應用程序服務器。在本文中,我將使用術語“Web 服務”來統一表示它們。 Web 服務器 通過處理基於 HTTP 協議的請求來使網頁顯示在 Web 浏覽器中。 應用程序服務器 是廣義上的服務器,通過各種協議,其中可能包括 HTTP 協議,來向客戶機應用程序公開業務邏輯。相對於 Web 服務器,它提供了更為復雜和強大的功能,例如會話管理、負載平衡、消息傳遞、事務管理、安全,等等。在某種意義上,應用程序服務器是 Web 服務器的超集。 我們為 Linux 內核測試環境選擇了一些 Web 服務器和應用程序服務器,包括 Apache、Jakarta-Tomcat、IBM WebSphere Application Server 和 Jboss。這些大部分都是開放源代碼項目,可以免費下載(請參閱 參考資料 的鏈接以獲得更多關於這些服務器的信息)。
2.4 和 2.6 內核測試之間的差異 使用 Web 服務器和應用程序服務器作為測試工作負載,在 2.5/2.6 內核上的測試工作要比在 2.4 內核上詳盡得多。在測試 2.4 內核時,僅用到了 Apache 和 WebSphere Application Server 這兩個服務器作為綜合測試方案的一部分。Web Performance Tool (WPT) 是所用的主要 Web 測試工具。出於偶然的機會,當內核中有大的改動或者需要驗證軟件,要進行 Web 服務測試。 在對 2.5/2.6 內核的測試中,我們制定了更為可靠和完整的測試計劃 (請參閱 參考資料,獲得 SourceForge 上關於2.5 測試計劃和實施計劃的鏈接)。在計劃中制定了適當的測試范圍、測試方法和測試時間線。在綜合測試、重點測試和用戶仿真測試中,Web 服務器和應用程序服務器測試被廣泛用作測試工具。 除了使用更多的服務器以外,我們還使用了一些不同的 Web 客戶機測試工具,包括 WPT、Hammerhead、Httperf 和 Pagepoker,來模擬不同類型的用戶環境。所有服務器和客戶機工具執行的持續時間不同 (24 小時和 96 小時),不同於持續時間固定的對最新可用內核的測試。 此外,測試硬件不局限於基於 Intel 的單處理器系統。測試在 1 路、4 路和 8 路 IBM xSeries 機器上和 64 位 IBM PowerPC 系統上進行。內核相關的缺陷在 Linux 內核缺陷追蹤系統中公開。
2.6 內核的關鍵增強功能 Web 服務在企業界扮演著重要的角色。為支持企業應用程序,2.6 內核有了顯著的改進和變化。新硬件支持、軟件支持和內部的內核改進給 2.6 內核帶來了更好的擴展性和穩定性。2.6 內核在跨多個 CPU 和大內存時的高負載情形下性能比 2.4 更好。2.6 中將有益於企業應用程序的一些關鍵特性包括:
新硬件支持 Linux 支持范圍廣泛的硬件平台。2.6 內核支持新的體系結構,例如 64 位 PowerPC、64 位 AMD Opteron 和嵌入式處理器。
超線程 超線程是 Intel 的一項創新,是 2.6 內核所支持的主要的硬件提高。基本來說,超線程可以通過同步多線程技術(simultaneous multi-threading technology,SMT)在單個物理處理器上創建多個虛擬處理器;多個應用程序線程可以同時在一個處理器上運行。為充分利用這一特性,應用程序需要是多線程的。 超線程給 Web 服務器和應用程序服務器帶來了很多益處。它可以增加可處理的事務的數目,提供更快的服務器響應時間,並支持服務器處理更大的工作負載和更多的用戶請求。當前,Intel Pentium 4 Xeon 處理器具有內置的超線程硬件。 NUMA(不一致內存訪問,Non-Uniform Memory Access) NUMA 是為提高系統性能添加到 Linux 2.6 內核的另一個主要特性。在支持多處理器的傳統模型中(對稱多處理,或者說是 SMP),每個處理器對內存和 I/O 有同等的訪問權限。對處理器總線的高爭奪率成為性能瓶項。NUMA 體系結構可以在不增加處理器總線負載的情況下提高處理器速度。在 NUMA 系統中,每個處理器距某部分內存較近而距其他內存較遠。處理器被安排在稱為“節點”的較小的區域中。每個節點有其自己的處理器和內存,節點間可以互相通信。處理器訪問本地節點的內存要比訪問不同節點的內存快。盡量減少節點間通信可以提高系統的性能。 為支持 NUMA 硬件,Linux 內核在多個范圍的進行了一系列改進,包括調試器,多路 I/O,一個可以讓用戶可以了解用到的處理器和內存資源分配的用戶級 API,和內部的內核 API 以使內核子系統了解 NUMA 拓撲。NEC Azusa、IBM x440 和 IBM NUMA-Q 是 NUMA 機器的例子。
擴展的設備支持 在 2.6 內核中支持更多類型的設備。2.6 內核還將主識別號的限制從 255 增加到 4095,並且允許每種類型可以有多於 100 萬個子設備。這將給高端的企業系統以足夠的支持。
線程改進 2.6 內核采用了新的線程庫,Native POSIX Thread Library (NPTL)。這個新庫基於 1:1 模型,完全符合 POSIX 標准。Red Hat 所作的測試表明,在一個老的 IA-32 雙 450MHz PII Xeon 系統上,使用 NPTL 可以在 2.3 秒之內創建和銷毀 100,000 個線程 (在任一時刻最多可以同時運行 50 個線程)。 NPTL 為多線程應用程序在 SMP 環境中帶來了極大的性能提高。它尤其有益於超重量級的多線程企業級應用程序,例如 Java 應用程序、Web 服務器和應用程序服務器應用程序。 2.6 內核中另一個對線程的改進是,可分配的 PID 數目從 32,000 增加到了 10 億。這一線程變化改善了在重負載系統中應用程序的啟動性能。由於允許的 PID 上限較低,2.4 內核有時會出現應用程序請求的 PID 編號過高的情況。 O(1) 調度程序 0(1) 調度程序於 2002 年被接受並加入到官方的 Linux 2.5 內核樹中。0(1) 調度程序通過改善大量進程的吞吐率提高了 Linux 的擴展性和整體上的性能,尤其是在大型的 SMP 上。0(1) 在任務和 CPU 數目巨大時可以很好地擴展,具有很強的“親合力”,以避免任務在 CPU 之間反復移動。0(1) 調度程序還允許跨 CPU 的負載平衡和 NUMA-aware 負載平衡。 I/O 改進 塊 I/O 層 2.6 內核中的塊 I/O 層被重寫,以提高內核的可擴展性和性能。2.4 中的全局 I/O 請求鎖不再使用。在 2.6 中塊 I/O 緩沖區(kiobuf)允許 I/O 請求可以比 PAGE_SIZE 大。出現的大部分問題是由對緩沖區頭和 kiobuf 的使用引起的,在這個新的層中已經得以處理。完全重寫了 I/O 調度程序。對 SCSI 的支持也有了重大的改進。 異步 I/O 異步 I/O 是在 2.6 內核中新出現的。它為 Web 服務器和數據庫等企業應用程序的擴展提供了一個途徑,而不必求助用於網絡連接的復雜的內部池機制。 其他改進 除了這些改進以外,還有其他一些值得一提的變化和新特性。例如,2.6 內核提供了對一些新文件系統的支持,包括 JFS、XFS、NFS v4 和 Andrew File System (AFS)。新的網絡協議和特性,例如流控制傳輸協議 (Stream Control Transmission Protocol, SCTP)、Internet Protocol Security (IPSec)、改進的 IPv6 支持和 IP Payload Compression (IPComp),給 Linux 2.6 內核用戶提供了更好地網絡安全和傳輸質量。 不是 2.6 內核帶來的提高都可以應用於每一個企業應用程序。它們中有一些需要特定的硬件和軟件。無論如何,這裡列出的大部分提高都是全面的內核改進,將幫助 Linux 跨入企業門檻。
測試基礎設施 在這一節,我將討論 Web 服務測試是如何進行的,包括硬件環境、選擇的 Web 服務器/應用程序服務器和 Web 測試工具,以及針對典型測試情形的測試策略。以下的討論基於 2.6 內核。
Web 服務服務器 在 Linux 2.6 內核測試中使用了四個 Web 服務服務器。兩個是 Web 服務器 (Apache 和 Jakarta-Tomcat),另外兩個是應用程序服務器(WebSphere Application Server 和 Jboss)。 Apache 是處於市場領導地位的 Web 服務器。Netcraft Web Server Survey 的調查結果顯示,Internet 上超過 64% 的 Web 站點正在使用 Apache。它是一個開放源代碼的項目。 Jakarta-Tomcat 是一個開放源代碼的 servlet 容器,帶有經 Apache 許可的 jsp 環境。Jakarta-Tomcat 有一個內置的 Web 服務器,也可以在產品環境中與其他 Web 服務器一起使用。 WebSphere Application Server 是一個企業級的應用程序服務器,用於動態電子商務應用程序。這個服務器的基礎是 J2EE 技術和 Web Services。WebSphere Application Server 具有很高的性能,並提供了一個可以跨越大部分操作系統的高度可擴展的事務引擎。越來越多的 WebSphere 應用程序正在由傳統的 Unix OS 向 Linux 遷移,因為這樣可以通過更少的費用而獲得近乎同樣的性能。