〜 /proc/sysの主要パラメータ群総解説 〜
遠田 耕平
2002/12/17
チューニングの実例
ここで、具体的なチューニング例を2つ紹介します。
■ファイルI/Oのチューニング
何といってもファイルI/OはUNIXの基本操作ですので、チューニングできるとメリットがたくさんあります。
よく知られているとおり、ファイルI/Oの一番のネックはディスクアクセスです。UNIXはメモリ中の「バッファ」にデータを書き込み、そのデータを後でまとめてディスクに書き出すことで、見掛け上の性能を稼いでいます。この方式も良しあしで、あまりメモリ上に(ダーティな)データを残しておくと、システムのクラッシュの際に重要なデータが失われてしまうことにもなりかねません。そこで、UNIXシステムは常にメモリ上のキャッシュとディスク上のデータを同期させるように動作します。
この同期を取る動作は通常OSが自動的に行うので、ユーザーは大船に乗った気でいればよいのですが、アプリケーションの性質によっては動作パターンを変更することで性能を稼ぐことができます。例えば、処理中に大量のデータを一時ファイルに格納するようなアプリケーションを考えてみます。この場合、一時ファイルの内容をわざわざディスクに書き出す必要は(さほど大きくは)ないと考えられるので、極力メモリ上で動作させる方が理にかなっています。
そのような意味での一番簡単な例がbdflushによるチューニングです。前述のように、bdflushの第1パラメータと第7パラメータは、「全メモリのうち、どの程度ダーティなバッファがたまったら実際のディスクへの書き出しを始めるか」を制御します。
第1パラメータはいわゆる「ソフトリミット」で、このパーセンテージを超えるとI/O要求と同時にディスクへのI/Oを始めます。
第7パラメータは「ハードリミット」で、これを超えるとbdflushデーモンによる書き出しも開始します。端的には、これらを高いパーセンテージに設定することで、ファイルI/Oを「メモリ上でのみ」動作させることができます。
実際に試してみましょう。bdflushパラメータを変更してcpコマンドの実行時間を測定したのが下の例です。いずれもユーザー時間(user)、システム時間(sys)はほぼ同等で、実経過時間(real)のみが大きく異なっています。
30 500 0 0 500 3000 60 20 0 |
100 500 0 0 500 3000 100 20 0 |
この例は、実装メモリが128Mbytesのコンピュータで80Mbytesのファイルのコピーを実施し、測定しています。128Mbytesの30%は約40Mbytesですから、80Mbytesのコピーを行うとダーティなバッファの量がしきい値(30%)を超えてしまいます。100%の場合はしきい値に到達せずにコピーが終わってしまいます。従って、上のような大きな差が出ているわけです。
このことからも明らかですが、この方法はデータの一貫性が重要なアプリケーションやメモリ量を大きく超えるような大量のデータを扱うアプリケーションの場合にはあまり意味がないばかりか、かえって性能劣化の原因ともなります。
何にせよ、チューニングの際にはチューニング対象のシステムの性質の分析を正しく行うことが重要なのはいうまでもありません。
■ネットワークのチューニング
ネットワークについては、CPUの処理速度とネットワーク性能の兼ね合いによってtcp_rmemのチューニングが可能です。
起動直後のtcp_rmemは(実装メモリ量にも依存しますが)多くの場合、
tcp_rmem=4096 87380
174760 |
になっているはずです。この状態でギガビットイーサネット・インターフェイスを通してFTPで200Mbytesの転送を行ったところ、平均して60Mbytes/sの性能が出ていました。
次に、設定を
tcp_rmem=4096 873800
1747600 |
と変更して(一度FTPを抜けてFTPサーバを終了させて)FTPを再実行したところ、平均して76Mbytes/sの性能が出るようになりました。
ギガビットネットワークなど高速のメディアの場合、特にネットワーク性能が高くなってきていてCPU性能とのバランスが重要になるため、このように顕著な差が表れます。
3/4
|
|
||||||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|