Solaris実践的パフォーマンスチューニング


はじめに

コンピュータの革新的、爆発的なハードウェア性能向上、高性能化はとどまるところを知らず、新たな技術がどんどん出現しています。大規模化が進み、ハードウェアの性能向上にともない、ソフトウェア面の利用技術も高度化しました。サーバとクライアントの連携による処理をベースに、DSS、OLTP、WEB、WEBサービス、大規模ネットワークファイルシステムなど、TCP/IPネットワークを経由した多様で複雑な使い方が一般的になりました。

これらのシステムで、導入のためのキャパシティプランニング、システム稼動中の定常的性能管理、現在使用中システムの業務拡大や、データ増加等の成長要因見積もり、あるいは、次期システム移行の際の性能評価等、さまざまな場面で性能管理が重要な課題になっています。

一般的にベンダーの立場では、システム資源が枯渇するとハードウェア増強を勧めることが多いです(あたり前ですよね。売り上げが伸びるのですから…)。常に最新技術を追い求めると、高額な設備投資が必要です。ベンダーから勧められる製品カタログで、どのように製品が優れているかが示されます。しかしながら、システムが本番を迎え大事なく稼動すると、何となくシステムが遅く感じられたり、バッチシステムが時間内に終了しない等、性能問題が顕在化することがあります。巨大なシステムや複雑なシステムほど、この傾向が強いようです。なぜでしょうか?

いくらハードウェアが優れていても、そのもとで実行されるアプリケーションがダメな場合や、構成に元々問題があったりすると、対策実施に大きなコストがかかります。また、エンドユーザに対するサービス力は確実に低下します。このような問題を解決するため、本コンテンツは実践的なパフォーマンスチューニングを解説します。

本コンテンツは、Solaisシステムの性能問題の解決方法を解説するものです。実際に発生し得る問題を明らかにして、解決策を例示します。性能低下の原因は一つではなく、たくさん潜んでいるかも知れません。本コンテンツは、UNIXの基礎知識をお持ちで、基本的なコマンド操作が可能な読者を対象にしています。システム管理者の方だけでなく、設計、開発担当の方々にも、ぜひご活用いただきたいと思います。

さて、最初に誤解を解いておきたい事が一つあります。色々あるカーネルチューニングパラメタの調整は、性能改善の特効薬ではないということです。CPUのクロック数やキャッシュ量の増加、速い(回転数等)ディスクの採用や、チャネル速度向上等のハードウェア的変更を除いたとして、システム性能改善の最も効果的なチューニングは、アプリケーションの作りを良くすることと、ハードウェア構成を見直すことに尽きます。また、いくつかのカーネルチューニングパラメタを変更すると、システムの動作が不安定になったり、応答性能が低下するなどの副作用を伴い、大変危険です。カーネルチューニングパラメタを変更する際は、充分なテストを経て実施するようご留意ください。 


構成

本コンテンツは大きく5つに分かれています。おのおのをクリックして内容をご覧下さい。行き先から戻る場合は、ブラウザのボタンを使用して下さい。基本、応用編は性能情報を採取して分析する手順を解説します。事例編は、具体的な問題解決方法、対策、カーネルチューニング方法を述べます。道具箱は性能情報を採取するための便利なコマンドやツールを紹介します。シナリオは、本コンテンツで使用された各種のテストデータを紹介します。

表1.コンテンツの構成

区分 内容
基本編 CPU、メモリ、ディスク入出力、及びネットワークに関する性能問題の分析方法を解説します。
応用編 各々の性能問題をより深く分析する方法を解説します。
事例編 分析、対応の結果、どのように性能問題が改善したのか、事例をもとに解説します。
道具箱 便利な性能情報収集コマンドや、その他のツールを紹介します。
シナリオ コンテンツで例示されたサンプルのテストシナリオを紹介します。各シナリオから、PDFグラフ、Excelデータ、およびExcel編集情報がリンクされています。
  


サイトマップ

本コンテンツのサイトマップを図1に示します。なお、コンテンツ中のイメージファイル(imagexxx.jpg、imagexxx.gif等。xxxは番号)は省略しています。

index.htm
|
+---------------------------+------------------------+-----------------------------+-------------+
| | | | |
+ basic.htm + advanced.htm + casestudy.htm + tools.htm + scenario.htm
| | | | |
+ cpu.htm------- + + cpu1.htm----- + + cpu2.htm----- + + acctlist.htm + data------- +
| | | | | | + sweep.htm | |
| + ipcinfo.htm | + prex.htm | + solarisdisp.htm + nddlist.htm | + s01~33,39~45data.xls.gz
| | | + svr4disp.htm + sardo.htm |
+ diskio.htm + diskio1.htm--- + | + info------- +
+ memory.htm--- + | | + diskio2.htm--- + | |
| | | + prex.htm | | | + s01~33,39~45info.xls.gz
| + tmpfs.htm | | + dnlc.htm |
| + memory1.htm | + graph------ +
+ network.htm + network1.htm + memory2.htm |
+ solaristools.htm | + network2.htm + s01~33,39~45graph.pdf.gz
+ dullup.htm + summry.htm
+ sar.htm
+ vmstat.htm
+ mpstat.htm
+ pmap.htm
+ iostat.htm
+ netstat.htm
図1.サイトマップ


カーネルアーキテクチャの見方

本文で、カーネルのビット長を確認しておかなくてはならないことがあります。この際、isainfoコマンドでアーキテクチャを表示することで、ビット長を調べることが出来ます。図2にカーネルアーキテクチャの見方を示します(最初に1回だけ確認してください…それでOKです!!)。

# isainfo -vk <CR>
64-bit sparcv9 kernel modules
#

【参考】他のオプションは次のように表示されます。
# isainfo <CR>    ←オプション無し。
sparcv9 sparc
# isainfo -v <CR>
64-bit sparcv9 applications
32-bit sparc applications
# isainfo -vb <CR>
64-bit sparcv9 applications
# isainfo -vn <CR>
64-bit sparcv9 applications
#

図2.カーネルアーキテクチャの見方


カーネル変数の見方

本文で、adb(アブソリュートデバッガ)コマンドを使用して、カーネルの持つ各種の変数を表示することがあります。この際、32ビット長変数か、64ビット長変数かによって使用するファンクションが違ってきます。図3にカーネル変数の見方を示します。

# adb -k <CR>
physmem   1eecb
freemem/e <CR>
freemem:
freemem:   55419
freemem/D <CR>
freemem:
freemem:   0
$quit <CR>

#

図3.カーネル変数の見方

adbコマンド-kオプションは、現在のブートされているカーネルに対してデバッガを起動します。

adbコマンドは、起動後、最初の行に物理メモリのサイズphysmemを16進数で表示します。図3の2行目がカーネル変数physmemの値です。16進数は関数電卓で変換しても良いですが、取り扱いがややオタッキーですので、通常は10進数で表示するほうが簡単でわかりやすいです。

adbコマンドであるカーネル変数を表示する場合、"カーネル変数名/ファンクション"と入力します。図3の3行目は、システムの空きメモリページを持つカーネル変数freememを10進数で表示しているものです。5行目にfreememが10進数で表示されています。"e"は、64ビット長変数の場合に、値を10進数で表示するファンクションです。"D" は、32ビット長変数の場合に、値を10進数で表示するファンクションです。

この例では、64ビット領域の前32ビットを表示していることになりますから、値は"0"と表示されます。図2のisainfoコマンドでカーネルモジュールのビット長を確認して、"e"なのか"D" なのかを選んでください。

なお、数あるパフォーマンスチューニングの文献では、adbコマンドに-wオプションを指定してデバッガを起動し、カーネルに直接パッチする手法が記述されています。本コンテンツでは誤って他の領域を壊してしまったりしないよう、参照のみ取り扱うことにします。カーネル変数やパラメタを変更する方法は、本文内で都度解説します。


 

ひとりごと

世の中、数多(あまた)の似たような文献があります。どの文献もオペレーティングシステムを理解する必要があること、コンピュータを熟知しなければパフォーマンスチューニングは出来ない等と書かれています。ある面で、正しいことを言っていると思います。けれども、これは実にムズカシイことなのです。このコンテンツは、実践を通じてこのムズカシイ事を簡単に理解するように記述しています。出来るだけ例を豊富に、解りやすいように努めました。

パフォーマンスチューニングの答えは実にシンプルです。いつもはどのようにシステムは動いているのかと、何かが起こった時にどのように動きに違いがあったのかの2つです。この2つを明らかにするためのアプローチが、性能問題に対する姿勢として大切なことなのです。

続いて、これも世の中、同種の数多の性能管理システムがあります。極めて高額な性能管理システムをご利用ではありませんか? 極めて高額な料金で性能分析を外部に委託していませんか? はっきり申し上げて、お使いの性能管理システムは、そのシステム自身のパフォーマンスを低下させている張本人かも知れないのです(主に「ログ収集」と呼ばれる処理がとっても重いっ。これホントの話!!)。また、あるイベントが報告されても、何が原因で発生したイベントなのかよくわからないのです…(これもホントの話です!!)。

ぜひご提案したいです。このコンテンツから得たもので実践してください。イベントのしきい値決定も恐らく、お客様の意見無しでベンダーが決めたりしていませんか? 本当の性能管理は定量的データ採取と、その情報を分析することから生まれます。パフォーマンスチューニングがどのようなものか、きっと見えてくると思います。


【参考文献】

1. SPARC & Solarisパフォーマンスチューニング Adrian Cockroft著 日本サン・マイクロシステムズ監訳 アスキー出版局 1995年7月
2. Unixシステムパフォーマンスチューニング第2版 Gian-Paolo D.Musumeci、Mike Loukides著 砂原秀樹監訳、岡島順治郎、高橋敏明訳 株式会社オライリー・ジャパン 2003年11月
3. SOLARISインターナル カーネル構造のすべて Jim Mauro & Richard McDougall著 福本秀、兵頭武文、細川一茂、大嶺朋之、佐藤敬役 ピアソン・エデュケーション 2001年12月
4. サンのシステムパフォーマンス:システムチューニング GregSchmitz、AllanEsclamado共著 サン・マイクロシステムズ 2000年2月(原典1999年4月)
5. Sun Microsystems User's Manual http://www.sun.com/processors/manuals/USIIIv2.pdf
6. SOLARIS 8 SOURCE FOUNDATION (SPARC/Intel Platform Edition)
7. Solarisカーネルのチューンアップ・リファレンスマニュアル Sun Microsystems,Inc Part No. 816-1248-10 Revision A. 2001年8月
8. ネットワークトラブルシューティングツール Joseph D.Sloan著 鷺谷好輝訳 オライリージャパン 2002年10月
9. TCP/IPネットワーク管理第3版 Craig Hunt著 村井純、土本康生監訳 林秀幸訳 オライリージャパン 2003年6月
10. ヘネシー&パターソン コンピュータ・アーキテクチャ John L.Hennessy & David A.Patterson 富田眞治、村上和彰、新實治男訳 日経BP社 2000年5月第3刷(初版1992年12月)

本コンテンツに掲載の製品名、会社名等は一般にそれぞれの会社の商標、または登録商標です。本文中では、TM、(R)、(C)の各マークは省略しています。


Copyright (C) 2004 by The Art of Computer Technologies, Corp.  All rights reserved.