カーネル比較: 2.4と2.6でのWeb処理

新しいフィーチャーの追加で、より高速、高信頼性のWebパフォーマンスを実現

Linux 2.6カーネルでは、企業アプリケーションに好都合な改善が数多くなされています。この記事ではIBM Linux Technology Centerが行ったWeb処理に関するテストの結果を紹介しながら、Linux 2.4と2.6カーネルを様々な面から比較します。特にとりあげるのは2.6カーネルで機能強化された主な点、およびテスト方法とその結果です。結論として、2.6はWebページ処理に関しては2.4よりもずっと早く、しかも信頼性も充分、ということが判りました。

Li Ge, Staff Software Engineer, Linux Technology Center, IBM

Li GeはIBM Linux Technology Centerのスタッフ・ソフトウェア・エンジニアです。2001年にコンピューター・サイエンスの修士としてニューメキシコ州の州立大学を卒業後、この3年間Linuxに取り組んでおり、現在はLinuxカーネル検証とLinux信頼性計測を行っています。



2004年 2月 10日

IBM Linux Technology Center (LTC)におけるWeb処理テストの目的は、Linuxカーネルの欠陥を見つけ出すことでした。特に重視した点は、Webサーバー/アプリケーション・サーバーを使った現実的な企業ユーザー環境に近い作業負荷とすること、またLinuxカーネルの安定性、拡張性、Webサーバー/アプリケーション・サーバーとの互換性についても重視しました。Webサーバーやアプリケーション・サーバーの欠陥を特定することが主目的ではありません。

テストの概要

2種類のWeb処理テスト

Web処理用のサーバーには主に2種類あります。つまりWebサーバーとアプリケーション・サーバーです。ここでは両方を合わせてWeb処理と呼ぶことにします。

  • WebサーバーはHTTPプロトコルでの要求を処理し、Webブラウザで見えるページを提供するものです。
  • アプリケーション・サーバーは一般的なサーバーで、クライアント・アプリケーションに対してビジネス・ロジックを提供します。プロトコルにはHTTPを含む場合も多いですが、他にも各種プロトコルを使用します。アプリケーション・サーバーにはWebサーバーよりも複雑で強力な機能、例えばセッション管理、負荷分散、メッセージング、処理管理、セキュリティ等々などがあります。ある意味では、アプリケーション・サーバーはWebサーバーを包含するものです。

Linuxカーネルのテスト環境として、様々なWebサーバーや、アプリケーション・サーバーを選びました。Apache、Jakarta-Tomcat、IBM® WebSphere® Application Server、それにJbossなどです。大部分はオープンソース・プロジェクトで、無料でダウンロードできるものです(これらのサーバーについてさらに詳しくは参考文献のリンクを見てください)。

カーネル2.4と2.6の違いをテストする

2.5/2.6カーネルに対するテストではWebサーバーとアプリケーション・サーバーをテスト負荷として使いましたが、2.4カーネルに対するテストよりもずっと念入りなものです。2.4カーネルのテストでは、統合テスト・シナリオに使われたのはApacheとWebSphere Application Serverだけであり、使用したツールとしてはWeb Performance Tool (WPT)が主なものでした。Web処理のテストはカーネルの主要変更があった時や、ソフトウェア検証のために適宜要求された場合に行われます。

2.5/2.6のカーネル・テストでは、より堅固で完全なテスト計画を立てました(参考文献のリンクに2.5のテスト計画とSourceForgeの実行計画があります)。テストの範囲と基準、テスト方法や時間配分などもきちんと決まっています。Webサーバーとアプリケーション・サーバーのテストは統合テストやフォーカス・テスト、擬似ユーザー・テストなどのテスト・ツールとして広く使われています。

より多くのサーバーを使うだけでなく、WPTやHammerhead、HttperfそれにPagepoker などを含め、いくつかのWebクライアントのテスト・ツールも使用して、異なるユーザー環境を擬似的に実現するようにしました。入手可能で最新のカーネルを使い、すべてのサーバー・ツール、クライアント・ツールを定期的に実行しましたが、持続時間を24時間から96時間まで変化させています。

さらに、テスト用のハードウェアをインテル・ベースの、単一プロセッサーのシステムに限定しないようにしました。1-wayや4-way、それに8-wayのIBM eServer™ 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、それに埋め込みプロセッサーなどの新しいアーキテクチャーもサポートしています。

ハイパー・スレッディング
ハイパー・スレッディングはインテルによる革新的技術ですが、2.6がサポートするハードウェア機能強化の中で中心的なものです。基本的に言えば、ハイパー・スレッディングは物理的に一つのプロセッサーからsimultaneous multi-threading technology (SMT、同時マルチ・スレッディング技術)を使って仮想プロセッサーを複数生成することができます。つまり一つのプロセッサーで複数のアプリケーション・スレッドが実行できるのです。これを最大限利用するにはアプリケーションもマルチスレッドになっている必要があります。

ハイパー・スレッディングはWebサーバーやアプリケーション・サーバーにとって非常に有利です。より多くのトランザクションを処理でき、サーバー反応時間が早くなり、より大きな作業負荷、より多くのユーザー要求を処理できるようになるのです。現在はインテルのPentium 4 Xeonプロセッサーがハイパー・スレッディングのハードウェアを内蔵しています。

NUMA (Non-Uniform Memory Access)
NUMAもLinux 2.6カーネルに追加された主なフィーチャーの一つで、システム・パフォーマンスを改善するものです。複数プロセッサー・サポート(symmetric multiprocessing つまり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に拡張し、タイプ毎に百万以上のサブタイプを許すようになりました。これでハイエンドの企業システムでも充分にサポートできるはずです。

スレッドの改善

2.6カーネルでは新しいスレッド・ライブラリ、Native POSIX Thread Library (NPTL)を採用しています。この新しいライブラリは1:1モデルに基づいたもので、完全にPOSIXに準拠しています。Red Hatによるテストによると、古いIA-32デュアル450MHz PII XeonシステムでNPTLを使っても、(常に50スレッドまで実行している状態で)100,000スレッドの生成・破棄が2.3秒でできたということです。

カーネルはNPTLによってSMP環境下のマルチ・スレッド・アプリケーションのパフォーマンスを大幅に向上することができます。これは特にJava®のような極度にマルチ・スレッドの企業レベル・アプリケーションや、Webサーバー、アプリケーション・サーバーのアプリケーションで価値のあるものです。

2.6カーネルのスレッド改善のもう一つは、割り付けられるPIDが32,000から10億にまで増加したことです。スレッドの変更で重負荷システムでのアプリケーション起動パフォーマンスが向上します。2.4カーネルでは許容されるPIDが低いので、アプリケーションが要求するPIDが高くなるとパフォーマンスが低下することがありました。

O(1)スケジューラー

O(1)スケジューラーは2002年にLinux 2.5のカーネル・ツリーに正式に採用されました。O(1)スケジューラーによってLinuxがよりスケーラブルなものになります。また、特に大きなSMPで、大量プロセスのスループットを改善することで、全体的なパフォーマンスも改善されます。O(1)は大量のタスクやCPUに柔軟に対応でき、タスクがCPU間で投げ回されるのを避けるために、非常に強い親和性を持っています。O(1)スケジューラーにより、CPUにまたがる負荷の分散やNUMA対応の負荷分散もできるようになります。

I/Oの改善

ブロックI/Oレイヤー
2.6カーネルのブロックI/Oレイヤーは書き直され、カーネルのスケーラビリティーとパフォーマンスが改善されています。2.4のグローバルI/Oリクエスト・ロックは無くなりました。2.6カーネルのブロックI/Oバッファー(kiobuf)ではPAGE_SIZEよりも大きなI/Oリクエストができます。よく見られる問題の大部分はバッファー・ヘッドと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)により、よりセキュリティの高いネットワークで、より高品質の通信が行えるようになります。

2.6カーネルで提供される機能強化のすべてが企業アプリケーションに適用できるわけではありません。強化された機能の中には、それを使うために特定のハードウェアやソフトウェアが必要とされるものもあります。ただ、ここで挙げた機能強化項目の大部分は一般的にカーネルを改善するものであり、企業でLinuxを使う上での障害を取り除くものと言えます。


テスト基盤

ここでは、どのようにWeb処理のテストを行ったか、使用したハードウェア環境、Webサーバー/アプリケーション・サーバーやWebテスト・ツール、典型的なテスト・シナリオでのテスト方針などについて説明します。ここでの説明は2.6カーネルを対象にしたものです。

Web処理用サーバー

Linux 2.6カーネルのテストに使用したWeb処理用サーバーは4台あります。2台はWebサーバー(ApacheとJakarta-Tomcat)で、残りの2台はアプリケーション・サーバー(WebSphere Application ServerとJboss)です。

Apacheは市場で一番使われているWebサーバーです。NetcraftによるWebサーバー調査(Netcraft Web Server Survey)によると、インターネット上の64%以上のWebサイトがApacheを使っています。Apacheはオープンソース・プロジェクトです。

Jakarta-Tomcat はオープンソースのサーブレット・コンテナで、Apacheライセンスの下で使用できるJSP環境を持つものです。Jakarta-TomcatにはWebサーバーが組み込まれており、生産環境で他のWebサーバーと組み合わせて使うこともできます。

WebSphere Application Serverは企業レベルのアプリケーション・サーバーで、大きく変化するeビジネス・アプリケーションに対応したものです。J2EE技術やWeb処理はサーバーの基礎ですが、IBM WebSphere Application Serverは大部分のオペレーティング・システムにまたがって高パフォーマンスを発揮し、非常にスケーラブルな処理エンジンです。伝統的なUNIXから、同等パフォーマンスで低価格なLinuxに移行するWebSphereのアプリケーションが次第に増えてきています。

Jboss Application Serverもオープンソースで、完全にJ2EEで装備されたアプリケーション・サーバーです。オープンソースのEJBコンテナとして始まったJbossは現在、企業での使用に耐えるアプリケーション・サーバーになることを狙っています。

Webテスト・ツール

ネット上には非常にたくさんのWebテスト・ツールやベンチマークがあります。2.6カーネルテスト環境でWebクライアントのストレスを近似するために私たちが主に使用したのは、次の4つのオープンソース・ツールです(参考文献にさらに情報があります)。

  • HttperfはWebサーバーのパフォーマンスを測るためのツールです。Httperfツールは要求を発行する頻度、合計接続数、タイムアウト制限などを制御できます。
  • HammerheadはWebサーバーをテストするために設計されたストレス・テスト・ツールです。HammerheadはIPエイリアスから複数の接続を開始でき、任意の時間に、擬似的に大量(256以上)のユーザーになることができます。
  • PagePokerはPerlパッケージで、Webサーバーのテスト・フィーチャーを持ったブラウザ・エージェントを定義するものです。PagePokerには3つのスクリプトがあり、複数クライアント、ストレス・テスト、ベンチマーキングといった使用方法により、使い分けることができます。
  • Web Performance Tool (WPT)はIBMが開発したWebテスト・ツールです。

Web処理のテストで説明した以前のツールに加えて、IBMにはTrade3と呼ばれるツールがあります。これはWebSphereのエンド・ツー・エンドのベンチマークとパフォーマンス・サンプル・アプリケーションです。Trade3ベンチマークはオンライン株取引アプリケーションをモデルにしており、WebSphereのパフォーマンス要素やフィーチャーに影響する現実的な作業負荷を提供するものです。

テスト方針

ここでのWeb処理のテストは、システムを全体として見るシナリオとなるように工夫しました。テストの継続時間は、最初が24時間です。2回目の実行では96時間に増やし、3回目、4回目はそれぞれ7日と14日にしました。すべてのシナリオでサーバーやクライアントのツールの組み合わせが異なりますが、8-way IBM xSeriesとpSeries®サーバーまで含めて実行しました。またカーネルのストレス・レベルを記録するために、システム・ユーティリティのモニタリング・ツールを使用しました。

図1は異なるWebサーバーやアプリケーション・サーバーに対して、テスト・ツールをどのように使用したかを示したものです。異なったテスト・ツールを使い、異なるユーザー環境を擬似的に再現するようにしています。

図1. テスト環境
Test environment

図2はIBM WebSphere製品でベンチマーク・ツールのTrade3を使ったストレス・テスト環境で、擬似的なオンラインの株取引環境を再現するものです。

図2. ストレス・テスト環境
Stress test environment

テスト結果の要約

次の節はWeb処理テストの結果をまとめたもので、2.4/2.6カーネルを使った典型的なシナリオに基づいたものです。8-way SMP IBM xSeriesシステム上で行った典型的なApache/WPTテストでは、2.6カーネルが処理品質に影響なく劇的にパフォーマンスが向上していることを示しています。

テスト環境

  • マシン: IBM xSeries Netfinity 8500R 8681-7RY
  • CPU: (8) Pentium III-700MHz
  • メモリ: 9 GB
  • スワップ空間: 2 GB
  • Linux ディストリビューション: Red Hat 7.3
  • Web サーバー: Apache Http Server 2.0.47
  • Web テスト・ツール: WPT 1.9.4

考察

  • 同じシステムの同じ設定で2つのテストを行いました。違いはカーネルのバージョンのみです。
  • 擬似的なWebクライアントとして自動Webテスト・ツールWPTを使用しました。
  • 2.6カーネルを使った場合、同じ時間内では、Apacheサーバーは2.4カーネルを使った場合に比べて6倍のWebページを処理しました。2.6カーネルによる平均ページ処理時間は、2.4カーネルの処理時間の1/5にすぎません。
  • 24時間継続の実行2回の間、接続失敗、サーバー早期終了、リクエスト・ライト失敗、タイムアウトを含めて、接続失敗は一度もありませんでした。
表1. 結果の比較
カーネル平均CPU使用率平均メモリ使用率平均swap使用率処理した総Webページ数処理ページ数/秒平均処理時間(ms)接続失敗
2.4.18 -smp100% (ユーザー: 7.38%, システム: 92.62%)6.41%0%8,845,147102.37294.440
2.6.0 -test599.42% (ユーザー: 39.35%, システム: 60.07%)35.96%0%53,827,939623.0057.710
図3. 時間の経過に対して処理したページ数
Web pages served vs. time

まとめ

典型的なテスト・シナリオ(8-way SMP IBM xSeriesシステム上でApache/WPTを実行)を使用した場合、Apache サーバーのスケーラビリティーもパフォーマンスも、2.6カーネルの方が2.4カーネルよりも高いことをお見せしました。同じシステムで同じ作業負荷の場合、Apacheサーバーのシステム利用効率は2.6.0-test5カーネルを使った場合の方が、2.4.18カーネルを使った場合よりも高く、6倍のWebページ数を処理しています。2.6カーネルで行われたフィーチャー追加や各種の変更がスケーラビリティとパフォーマンスの向上に寄与していること、その結果、企業レベルのアプリケーションに耐えられるだけ成熟したものになったことがデータで実証されたと言えます。

参考文献

  • 2.5に対するテストと実行計画がSourceForgeの test plan execution planにあります。
  • テスト中に発見された欠陥はLinux kernel bug tracking systemに報告されています。
  • HammerheadはWebサーバーのストレス・テスト・ツールです。
  • Web Performance Tool (WPT)はAkstressとも呼ばれ、IBMが開発したものですが、Rational Suite Test StudioWebSphere Studio Workload Simulatorなど、既存のIBMツールが持っている機能と重複するため、使われなくなっています。
  • Trade3はIBM WebSphereベースでエンド・ツー・エンドのベンチマークとパフォーマンス用のサンプル・アプリケーションです。
  • テストに使用したサーバーはApacheJakarta-TomcatIBM WebSphere Application ServerそれにJbossです。
  • 2.6カーネルで追加された機能などについてさらに詳しくは、Ulrich Weigandによる資料「What’s new in Linux 2.6? 」を読んでください。
  • Joseph PranevichによるThe Wonderful World of Linux 2.6は、新しいカーネルのフィーチャーについて素晴らしいまとめ方をしています(ただ、明らかにi386 Linuxに偏ってはいますが)。
  • Linuxカーネルの性能と拡張性の改善」(developerWorks 2003年1月)はLTCのメンバー数人が行ったテストについて説明しており、ディスクおよびブロックI/O、SMPスケーラビリティ等を含め、多様な作業負荷をとりあげています。
  • Putting Linux reliability to the test」(developerWorks 2003年12月)では2.4カーネルに対して念入りに行った信頼性テストの結果をとりあげています。
  • developerWorksのLinuxゾーンにはLinux開発者のための資料がさらにたくさん用意されています。
  • Developer BookstoreのLinux sectionにはLinuxに関連する、幅広い内容の本が用意されています。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=231485
ArticleTitle=カーネル比較: 2.4と2.6でのWeb処理
publish-date=02102004