Sambaパラメーターとパフォーマンス
Sambaのパラメーターの調査方法
CentOSの/etc/samba/smb.confに明示的に記載されていないSambaのパラメーターは、以下のようにtestparm-vを実行することにより出力可能です。
# testparm -v > defult.parm
Sambaをバージョンアップしたときに、Samba.orgから提供されるソース内のパラメータの設定値が気付かないうちに変更になり、以前のsmb.confでは動作しなくなるなどの事象が発生したことがあります。そのような時でも、自分が設定していないパラメーターでもデフォルト値を調べられれば問題解決に有益です。もちろん、パフォーマンスの改善やチェックなどにも、便利です。
今回紹介する[log level]、[syslog]、[socket options]は上記testparmによる調査の結果デフォルト値は以下の通りでした。
log level = 1
syslog = 0
socket options = TCP_NODELAY
なお、これらのSambaのバージョンやパッケージ開発元によりデフォルト値が変更になる場合がありますので、実際にお手元の環境で確認してください。
パフォーマンスに影響すると考えられるパラメータの1つがlog levelです。これは取得するSamba独自のログのレベルを指定するパラメーターです。またauthやpassdb、winbindなどデバッグクラス別にレベルを指定することもできます。
レベルを上げたときに出力される詳細なログは問題解決に便利ですが、パフォーマンスとの兼ね合いにより適切な値を設定する必要があります。
syslogパラメーターは、Samba独自ログファイルとは別に、Sambaのログをsyslogへ出力する時のログレベルを指定できます。ただし、syslogパラメーターに、log levelで指定したSamba独自ログの出力レベルの値以上を指定しても、Samba自体からそれ以上のログは出力されないため、syslogでも同じレベルになります。
効率的な運用方法としては、Samba独自ログは詳細に出力し、syslogへはログレベルの低いログを出力するなど、レベルに差を設けるなどが考えられます。
今回は以下の4パターンで計測しました。
ケース(1)は、Samba独自ログとsyslogの両方を1とした場合です。以下のようなパラメータ値になります。
log level = 1
syslog = 1
ケース(2)は、Samba独自ログを3としsyslogは1とした場合です。以下のようなパラメータ値になります。
log level = 3
syslog =1
ケース(3)は、Samba独自ログとsyslogの両方を3とした場合です。以下のようなパラメータ値になります。
log level = 3
syslog = 3
ケース(4)は、全体のlog levelは1としたが、認証のログだけを3とした場合です。以下のようなパラメータ値になります。
log level = 1 auth:3
syslog = 1
パフォーマンスに影響するパラメーター「log level」の計測結果
計測の結果、ログレベルの一番低いケース(1)の場合が、一番スループットが良いのは予測どおりですが、ネットワークを経由する、しないにかかわらずHDBENCHにおいてもケース(2)、(3)の結果がよくありませんでした。
HDBENCHは1台での接続であるため、絶対的ログ出力量が少なく、ケース(2)、(3)の結果に差はそれほどありませんが、smbtortureでは20台分の負荷をかけているためケース(2)の結果に比べ、syslogへの書き出し処理があるケース(3)のパフォーマンス劣化が激しいのがわかります。
ケース(4)のように認証の記録など用途を限定したログレベルのみ3に設定した場合は、パフォーマンスの劣化を抑えられます。
以上の結果から、安定運用期に入った場合にはlog level=1、syslog=0とデフォルトの設定をしておき、必要に応じてデバッグクラスを指定した、機能別のログレベル設定をお勧めします。