cytune(8) Cyclades ドライバーパラメータのチューニング

書式

cytune [-q [-i interval]] ([-s value]|[-S value]) [-g|G] ([-t timeout]|[-T timeout]) tty [tty ...]

説明

cytune は、Cyclades ドライバーの割り込み発生の閾値の表示と変更を行う。 Cyclades カード上の各シリアルラインは、入力データ用に 12 バイトの FIFO を持っている (出力用には、別の 12 バイトの FIFO を持っている)。 閾値には、割り込みを発生させるまで FIFO 中に蓄えるデータのバイト数を指定する。 Cyclades の tty がオープンされると、この閾値は、 以下のようにボーレートによって定められたデフォルト値に設定される:

ボーレート 閾値

50-4800 10
9600 8
19200 4
38400 2
57600-150000 1

閾値が低すぎると、割り込み回数が増大し、マシンの負荷が高くなるため、 システムの全体的なスループットが低下する。 閾値が高すぎると、FIFO バッファがオーバーフローしやすくなり、 データが失われることになる。 また、遅いマシンでは、割り込みの負荷に耐え切れないかも知れないため、 閾値を高めに調整する必要がある。

Cyclades ドライバーが、 ENABLE_MONITORING 付きでコンパイルされている場合には、cytune コマンドに -q オプションを指定して、モニタリング周期中に転送されたデータ数と モニタリング周期中の割り込み回数をレポートさせることができる。 また、FIFO の状態もレポートされる。 割り込み発生時の FIFO 中の最大データ数、FIFO 中のデータ数の瞬時値、 現在の FIFO 中のデータ数がレポートされる。 この出力は、次のようになる:

/dev/cubC0: 830 ints, 9130 chars; fifo: 11 threshold, 11 max, 11 now

   166.259866 interrupts/second, 1828.858521 characters/second

この結果をみると、このモニタリングサイクルの間、 max の値が決して上記の閾値 (threshold) の値を越えることがないため、 割り込みは常に所定の時間内に処理されていることがわかる。 この例を見るかぎりでは処理はうまく行なわれている。 より長い時間サンプリングしてみて大丈夫なようならば、この設定で問題ないだろう。 Cyclades のハードウェアは、DCE から DTE へのハードウェアフロー制御のための RS-232C の RTS ラインをサポートしているようには見えないので、 FIFO がオーバーランすると、データが失われてしまう。

問い合わせモードで起動すると、 cytune は、SIGINT で終了させるか、閾値を超えるか、 タイムアウトが発生するまでのサマリーを出力する。

応答性とスループットはトレードオフの関係にある。 Cyclades のカードは、高速時 (高速の接続で FIFO の閾値を小さくした時) には、 とても割り込み負荷が高くなる。 このため、システム上で他のタスクで使用できる CPU 時間が少なくなる。 一方、閾値を大きくすると、1 文字当たりの応答にかかる時間が増大する。 このことは、Cyclades のカードを使って SLIP 接続しているホストに対して ping(8) を実行してみればわかる。 SLIP を通常、 telnet(1) のような対話的な作業に使用する場合は、出来るだけ早いレスポンスを得るために、 閾値を低くしたくなる。 SLIP をファイル転送や WWW などに使用する場合は、 スループットに (悪) 影響が出ず、システムの負荷を抑えるために、 FIFO の設定を大きな値にする方が良い。 これとは別に、 -t あるいは -T オプションを使うと、cyclades がバッファをフラッシュするまでの待ち時間 を調整できる。単位は、5ms である。

Cyclades のポートにマウスをつないでいる場合は、閾値とタイムアウト値を 低い値にしたくなる。

オプション

-s value
現在の閾値を value 文字に設定する。 tty が、他のプロセスによってオープンされていなければ、閾値は次回のオープン 時にリセットされる。指定する値は、1 〜 12 の範囲内でなくてはならない。
-t value
現在のバッファフラッシュのタイムアウト時間を value に設定する。 tty が、他のプロセスによってオープンされていなければ、 タイムアウト時間は次回のオープン時にリセットされる。 指定する値は、0 〜 255 の範囲内でなくてはならない。 value に 0 を指定すると、デフォルト値 (現在は 0x20 (160ms)) が使用されるが、 すぐに 0x02 (10ms) になる。設定単位は、5 ms である。
-g
現在の閾値とタイムアウト値を表示する。
-T value
デフォルトのバッファフラッシュタイムアウト値を value にする。 tty の次回オープン時に、この値がデフォルト値の代わりに使用される。 value に 0 を指定すると、デフォルト値 0x20 (160) となるが、 すぐに 0x02 (10ms) となる。
-G
デフォルトの閾値とバッファフラッシュタイムアウト値を表示する。
-q
tty に関する統計情報を表示する。 この結果は、Cyclades ドライバーが ENABLE_MONITORING 付きでコンパイルされている場合にのみ有効である。 おそらく、デフォルトでは、 ENABLE_MONITORING は付いていない。
-i interval
統計情報を収集する周期を interval 秒に設定する。

バグ

同じポートの統計情報を取得するために、同時に 2 つの cytune を実行すると、 'ints', 'chars', 'max' の値はリセットされ、正しい結果を得ることができない。 cytune は、これを避けるべきだが、そうなっていない。

ファイル

/dev/ttyC[0-8]
/dev/cubC[0-8]