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