連載 / / 凵社 Language— 8 : # myservice を登金求 10 : ®ister—serv(SERVER, 'myservice' ) ; 11 : 12 : 13 : # サーバーループ ( この呼出しは返ってこない ) 14 : 15 : &run—serv() ; 16 : 17 : 18 : # 利用者は、次のルーチンを定義して与えなければなりません 19 : 20 : # $ ー [ 0 ] にはクライアントから送られてきたデータが、 21 : # $ ー [ 1 ] にはクライアントに対応するソケットが入っています 22 : 23 : sub serv—body { local($reply) ; 24 : 25 : # クライアントのソケット名を表示 26 : 27 : 28 : prlnt "client sock name= 29 : 30 : $reply who ( 31 : } elsif ( $ ー [ 0 ] eq "w") { 32 : $reply 33 : } elsif ( $ ー [ 0 ] eq "ps") { 34 : $reply 35 : } elsif ( $ ー [ 0 ] eq ” kill " ) { 36 : &cleanup-serv() ; 37 : else { 38 : $reply 0 is on this host\n" " who 39 : w(ho) is 0 Ⅱ this host\n" 40 : ShOW process\n" 41 : PS kill server\n" "kill 42 : s 0 this message\n' "help 43 : 44 : 45 : 46 : 47 : 48 : 49 : } # 関数の戻り値はクライアントに返される $reply; # This value is sent back tO the current client リスト 6 クライアント側のプログラム例 (easy-serv) 1 : # ! /usr/local/bin/perl 3 : # ライプラリをロード "easy—serv. 5 : 6 : 8 : # 'localhost' の 'myservice' ホートに孑妾 10 : ®ister—c1ient(CLIENT, 'localhost ' 11 : 12 : 13 : pr int 14 : while( く STDIN>) { 15 : chop ; 16 : # サーバーに要求を送る。 $sync = 1 なので答が返される 17 : 18 : $reply = &send-request (CLIENT, $ ー 19 : 20 : # 答を表示 21 : 22 : print $reply ; 23 : print " ー > " ・ 24 : 25 : } 123 UNIX MAGAZINE 1991.10
連載 / Li Language—O えます。 $timeout に 0 を与えると、プロックしなくな ります。反対に、 undef を与えるとタイムアウトせすに 待ち続けます。 easy-ipc の使い方の例 以上が easy-ipc の使い方です。これだけではどう使 えはいいのかよく分からない方も多いと思いますので、 リスト 2 ~ 3 に使用例を示します。リスト 2 はサーバー 側、リスト 3 はクライアント側のプログラムです。 ロこの例を試す場合は、 9969 のポートをすでに使 っているサービスがないかどうかを確認してください。 高レベノレライプ、ラリ (easy-serv) 次に紹介するのが、サーバー・クライアントプログラ ムを構築するための高レベルライプラリ easy-serv で す ( リスト 4 参照 ) 。このライプラリは、さきはど紹介 した easy-ipc ライプラリを下働きとして使います。 て、跏。で示されるポートにサーピスを設定します。 easy-ipc の &defserver() と同様、跏。にはポートを 表す数値そのもの、または /etc/services に定義されて いるサービス名が指定できます。たとえば、 ®ister—serv ()S , または、 ®ister-serv ()S , のように指定します。 9969 ) ; easy-ipc だけでも、サー ・クライアント型のア プリケーションは比較的簡単に構築できますが、大量 のデータを一度に受け取ろうとするときなどは、何回 かリトライの必要が出てきますし、また、サーバーか ら応答をもらおうとする場合にも同様の処理が必要で す。 easy-serv はこのあたりの面倒な処理をすべて引き 受け、ユーサーがやり取りされるデータの中身にだけ集 中できるようにするものです。 easy-serv の関数 通常、ユーサーが使うのは以下の 6 つの関数です。 ®ister-serv( GS, $ 〃 0 ) &run-serv ( ) ®ister-client( CS, $host, $ 0 ) &send-request ( CS, $ 7 ℃肥 s な $sync) &sync-request ( CS) &cleanup-serv ( ) ・ ®ister-serv( GS, 跏のの サーバー側で、 GS をジェネリック・ソケットとし ®ister—client (CS, ®ister—c1ient(CS, 'myservice' ) ; ' herhost ' 'herhost ' , 9969 ) ; UNIX MAGAZINE 1991.10 接続要求とクライアントからの要求処理を一手に引 き受けるループに入ります。この関数は、呼ばれると 返ってきません。 こで起こる疑問は、実際の処理をどう書くのかと いうことです。じつは &run-serv() は、接続の確立後 に送られてくるクライアントからの要求それぞれにつ いて &serv-body() という関数を呼び出します。この &serv-body() は、ライプラリを使用する人が用意しな けれはなりません。 &serv-body() の呼出し形式は、次 のようになります。 tserv—body($request, $socket) ; こで $request にはクライアントから送られてき たデータ、 $socket には、要求が送られてきたクライ アントに対応するソケットが渡されます。すなわち、 &serv-body() のなかでは、どのクライアントからど のようなデータが送られてきたかを知ることができま す。また &serv-body() の戻り値は、そのままクライ アントに返されます ( 返されない場合もあります。後述 の &send-request ( ) の項を参照 ) 。 ・ ®ister-client ( CS, $host, 跏 07 、り easy-ipc の &defclient() と同様に、 $host で示され るホストの上の跏。で示されるポートに接続を要求し ます。接続されたソケットは、ファイルハンドル CS にセットされます。 $ ん。はホスト名かインターネッ ト・アドレス、跏。はサーピスポートの番号そのもの か、 /etc/services に定義されている名前です。 次の指定はすべて有効です。 115
連載 / Li Language—O &selectsock-with-timeout ($timeout, @sockets) &selectsock-with-timeout-for-write($timeout, @sockets) ・ &defserver(), 跏のの サーバー側のソケットを設定します。跏。には、サ ーバーがサービスを設定したいポートの番号をケえま す。このとき数字を直接与えるか、あるいはサービス の名前を文字列で与えることができます。たとえば、 &defserver(), 9969 ) ; とすれば、ホート 9969 にサービスのソケットを設定 し、ファイルハンドル S にその値が返されます。 /etc/services に定義されている名前を跏。に与え myservice 9969 / tcp ることもできます。また、 /etc/services に 114 ク・ソケット " と呼はれ、サーピス開始の要求を受け付 &defserver() で設疋されるソケットは、、ジェネリッ ・ &acceptsock(NS, GS) と書くとシンタックス・エラーになります。 &defc1ient(), 192.42.172.23 , "myservice") ; は perl の数値表現ではありませんから、 などの呼出しも可能です。もちろん、このアドレス形式 " 192.42. 172.23 " 'myservlce") ; &defc1ient(S, ドレス形式でも与えることができます。 $ ん。は、普通の名前だけでなくインターネット・ア &defserver() か呼はれていなければなりません。 れます。もちろん、この呼出しの前にサー myservice という名則のサービスに接続がおこなわ とすれば、 herhost という名前のホストの上にある , myservlce") ; &defcIient(), "herhost" の名前を与えます。たとえは、 前を与えます。 $ ん。には、サーバーが存在するホスト 跏。には、さきの説明と同様に数字か、サーピスの名 イルハンドルとサーピスを受けたいポート番号です。 は &defserver() と同しで、ソケットを設定したいファ クライアント側のソケットを設定します。 S と跏。 7 イ ・ &defclient(), $ ん os な跏 0 ) という指定が可能です。 &defserver(), "myservice") ; というエントリが存在する場合は、 9969 の代わりに けるために利用されます。 &acceptsock() は、ジェネ リック・ソケットから要求を受けたクライアント専用の ソケットを生成します。たとえは、 &acceptsock(NS, (S) ; という呼出しは、ジェネリック・ソケット GS から、接 続要求のあったクライアント専用のソケット NS を生成 します。 サーバー・プログラムは、ジェネリック・ソケット に対する接続要求を待ちながら、生成された専用ソケッ トに到着する各クライアントからの要求にも答えなけれ ばなりません。 ・ &selectsock(@sockets) 引数に与えるのはソケットの配列です。接続要求や 処理の要求が到着するソケットを与えると、いすれかの ソケットに要求が到着するまで待ち続けます。関数の戻 り値は、要求が到着して読出し可能になったソケットの 配列です。たとえは GS をジェネリック・ソケット、 SI 、 S2 、 S3 を &acceptsock() によって GS から生成された ソケットだとすると、 @sockets @available = &selectsock(@sockets) ; という呼出しは、すべてのソケットに対する要求の到着 を待ち、要求が到着すると配列@available のなかに 読出し / 接続可能なソケットを返します。 残りの関数は必要に応じて使います。 ・ &selectsock-non-block(@sockets) &selectsock() とほは 1 司しですが、何も入力がないと すぐに制御が返ってきます。 ・ &selectsock with-timeout ($timeout, @sock- e な ) これも &selectsock() とほは、同しですが、何も入力 がない場合のタイムアウトを設定することができます。 $timeout に秒数を与えます。 ・ &selectsock with-timeout-for write($time- 0 社 t , @sockets) この関数は、引数のソケットが書出し可能かどうか を調べます。 $timeout には、タイムアウトの秒数を与 UNIX MAGAZINE 1991.10
1 : 2 : 4 : 6 : 7 : 8 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 連載 / Li Language 44 : } 17 : } リスト 2 サーパー・プログラムの例 (easy-ipc) 9 : while ( 1 ) { GS; $sockets{GS} &defserver(GS, 9969 ) ; # 9969 にサーピスを設疋、 GS がジェネリック・ソケットになる require "easy-ipc ・ pl # ! /usr/local/bin/perl # 要求がくるまで待っ for (@avails) { # 要求があったすべてのソケットを処理する @avails = &selectsock(keys(%sockets)) ; # クライアントの普通の要求 } else { $ 取 e ; $sockets{$new} &acceptsock ($new , (S) ; print "got a connection request\n" # 接続要求 else # 接続終了 print connection iS closed\ll't delete $sockets{$—} ; # 読出し可能なデータか有在する $line print "got : $line\n" 1 : 2 : ′ 3 : 7 : 8 : 9 : 11 : 12 : 13 : 14 : 15 : 16 : 18 : 19 : 20 : 21 : 10 : while ( く > ) { print STDERR " ー > " ・ print STDERR print " sent : print CS $ ー # サーノヾーにデータを送る c10se(CS) ; # ソケットをクローズ UNIX MAGAZINE 1991 ユ 0 リスト 3 クライアント側のプログラム例 (easy-ipc) &defclient (CS, 'localhost ' , 9969 ) ; 5 : # CS にサーバーとの接続に使われるソケットか薇疋される 4 : # ローカルホストのサーピス 9969 に接続要求を出す require "easy—xpc ・ p # ! /usr/local/bin/perl 119
ない場合は、 MAKEDEV コマンドを使って作成します ) 。 シンに付いているテーブドライプをもってこられるのなら、 これが終ると、マシンをもう 1 度立ち上けなおして、 何も問題はありません。しかし、テーブドライプなどを取 ルートをプートすることができます。詳しい手順について り外すにはマシンの電源を切らなけれはなりません ( 間違 は、インストール・マニュアルなどをお読みください。 っても引っこ抜かないように ) 。そのマシンの管理者が優し ニルートが立ち上がれは、 suninstall コマンドが使え い人だったら、「あの一、テープをちょっと貸してもらいた るようになります。しかし、リモートのテーブドライプを いんですけど・・・・・」とお願いすれば、快く応してくれるで 使ってインストールをおこなうので、テーブドライプは しよう。しかし、本体内蔵型のテーブドライプでは、そう remote" を指定し、テーブドライプをもっているマシン もいきません。また、「べつに持っていかんでもインストー の IP アドレスを入力してやる必要があります。これを除 ルできるやろ」と、すげなく断わられるかもしれません。 けは、通常の suninstall でおこなう作業とまったく変わり このようなときは、ネットワークを経由してテープを使 う方法を考えなけれはなりません。具イ勺には、マシンを ません。 インストールのとき以外でも、 rdump/rrestore を使っ ニルートをスワッ ディスクレスと同様にして立ち上げ、 たり rsh をうまく使えばリモートホストのテーブドライ ニルートからプートしなおす フ。領域に読み込んだあと、 プが利用できます。テープのあるマシンにディスクを などの作業が必要になります。 NFS マウントして作業するよりは、かなり効率的です。 テーブドライプをもっているマシンは、 add ー client コマ ニルートを入れる過程で一時的 テープレス・ホストに ンドなどを使ってディスクレス・サーバーと同様のセット にディスクレス・クライアントとしてプートすることを逆 アップをおこないます。そのはかにも、クライアントが使 手にとって、マシンのインストールを簡単にすませてしま 用する ( サーバー上の ) ファイルシステムの上に、インスト ール・テープからミニルートのイメージファイルを読み込 う、、裏技〃もあります。 ディスクレス・クライアントとしてプートした段階で んでおく必要があります。 format プログラムでディスクをフォーマットし、パーテ テーブドライプのないはうのマシンはディスクレス・マ ィションを切り、 newfs をかけてしまいます。次に、 / と シンとして立ち上けますが、実際はディスクが接続されて /usr ノヾーティションを restore か tar で書き込み、 install- いるので、起動時に自分がディスクレスであるとは判断し boot でプートプロックを書き込みます。そして、 /etc/rc. ません。このため、前号の「ディスクレス・マシンの起動」 boot や /etc/rc 、 /etc/rc. local ( インストール作業中はお の節で紹介した方法を利用してマシンを立ち上けます。 そらく / mnt / etc / rc. boot などになっていると思います ) ディスクレス・マシンとして立ち上がったら、 root のア を手で修正し、ホスト名などを設定してやれは、一応は動 カウントでログインします。ます、 format コマンドでフォ くようになるでしよう。 ーマットを実行し、パーティションを設定します。その後、 ただし、 suninstall が使えないので設定作業か嘆隹しくな dd コマンドを使ってディスクレス・サーバーに置かれてい るのが欠点です。 るミニルートのイメージファイルをディスクの b パーテ イションに読み込みます ( ディスクのデバイスファイルが ネットワークあれこれ NIS と NFS ネットワーク上のサービスに関するトラブルの原因は、 分かりにくいものです。たとえば、デーモンやサーバーを 起動する順序、設定ファイルの史新をデーモンに知らせる のを忘れた、などがあります。このため、単純そうにみえ るトラブルでも調べるのに時間がかかりがちです。 ロ 皆さんのところでも、かならすといっていいほど N FS 54 UNIX MAGAZINE 1991.10
連載 / Li 社 Language—⑩ ®ister-c1ient(CS, ' 123.123.123.123 ) ®ister—c1ient(CS, ' 123.123.123.123 ' , 9969 ) ; ・ &send-request ( CS, $ 7 ℃甲肥 s な $sync) 'myservice ) ; ーに接続されたソケット CS に対して $request のデータを送り出します。 $ れ c の値が perl の値として真なら、サーバーから返される答を待ち、そ れが &send-request() の戻り値となります。 $sync が 偽の場合は、一方的にメッセージが送られるだけて答は 待ちません。すなわち、サーバーからの答は捨てられま す。 $ s c が偽のときには、ある程度送るデータが溜ま るまで実際の送信はおこなわれす、ある時点でまとめて 送り出されます。 、、ある時点 " とは以下の 3 つの場合です。 1 ) &send-request() が $sync== 真 ' で呼はれた : 以前 に溜まっていたデータがます書き出され、さらに最後 の要求の応答を待ちます。 2 ) &sync-request ( ) ( 後述 ) カ平はれた : 溜まっている 要求を強制的に送り出します。 3 ) ある限界以上にデータが溜まった : 限界値は easy- serv. pl のなかの $easy-serv 'max-qlen という変数 で決まります。答を待たなければ、それだけ処理が速 くなるわけです。 ・ &sync-request ( CS) &send-request() の項でも触れたように、 cs に対し て送られすに溜まっている要求を強制的に送り出しま す。サーバーからの答は捨てられます。 ・ &cleanup—serv 現在オープンしているサーバー内のソケットをす べてクローズして、プログラムを終了します。通常は &serv-body() から呼はれます。 リスト 1 easy-ipc. easy-serv の関数使用例 リスト 5 ~ 6 に、 easy-serv の使用例を掲載します。 リスト 5 はサーバー側、リスト 6 はクライアント側の プログラムです。この例では、サー ーはクライアント からのリクエストに応して wh 。、 w 、 ps コマンドの結果 を返します。 ロ、の例を試す場合は、 myservice という TCP のサービスを /etc/services に登録してからおこなって ください ( サーバー・ホスト、クライアント・ホストと も ) 。また、登録の際にはシステム管理者と相談のうえ、 安全なポートを使うようにしてください。 まとめ いかがでしたか ? 簡単なライプラリですが、けっこ う役に立つはずです。ェラー処理やきわめて負荷の高い 場合の処理などに改善のお也はありますが、これはそれ ほど難しくないでしよう。また、 UDP や UNIX ドメ インのソケットの支援なども組み込みたいところです。 こうしてみると、 perl の強力さにいまさらながら感心さ せられます。 お気づきの方も多いと思いますが、今回紹介したラ イプラリは、思想的には RPC (Remote Procedure Call) に近いものです。 途中で 2 回はかり注意恥頁を挙げましたが、現在の UNIX はネットワーク・セキュリティに甘い部分がか なりあります。また、ソケットの取扱いを間違えるとダ ウンしてしまうシステムもありますので、このライプラ リを使った実験はある程度知識のある人やシステム管理 者と相談しながらおこなうことをお勧めします。 1 : 3 : 9 : 116 # EASY—IPC . PL UNIX MAGAZINE 1991.10 require "sys/socket . ph" modified by : srekcah@sra. CO ・ jp P1ease distribute widely, but leave my name here . original : written by Hiroshi Sak0h (sakoh@sra. CO ・ (p) on 11 ー 01 ー 90 Software Research Associates, lnc . 1990 , 1991 C opyr i ght
統合されたクライアントサーバ境の実現をめざして Sun は、創業以来、一震して統合されたクライアント・サーバ環境の実現をめざし、オープン・システムズ を提供してきました。ファイルの共有化を実現する NFS 、 G 田、アプリケーション間発効率に優れた Open Windows 、また SC アーキテクチャの代表的な存在である SPARC チップ。このようなテクノロジーのも と、全システムで同一のソフトウェアを走らせることができる、バイナリレベルの互換性を実現しています。 伊忠テクノブイエンス株式会社 本社 : 〒 154 東京都世田谷区駒沢 1 -16-7 TEL. 03 ( 3419 ) 00 ( 代 )
連載 /An lntroduction to X Window System Orientation (Box 、 Paned 、 Scrollbar) 部品の方向を示すもので、水平方向を示す horizontal と垂直方向を示す vertical が指定できます。 Justify (Label 、 SmeBSB) 揃える位置を示します。左揃えの left 、中央揃えの center 、右揃えの right が指定できます。前ページの図 4 は、 xload の Label での変更例です。 BackingStore (Clock 、 SimpleMenu) ウインドウが重なっていったん表示されなくなったあ とで、再度現れるなどして再表示が必要になったとき、 X では一般にサーバーがクライアントにこれを通知するイ べントを送りつけますにれを、、 Expose イベント〃といい ます ) 。ただし、この方法ではクライアントやネットワーク に負荷がかかってしまいます。そこで、代わりにサーバー 内部に一時退避の領域を用意し、この情報をうまく利用し て負荷を軽減する機能をもつサーバーもあります。この機 能を、、バッキングストア (Backing Store)" と呼びます。 Ellipse 、 ShapeEllipse 、角のとれた四角を示す Round- もっとも、サーバーにこの機能があるからといって、すべ edRectangle あるいは ShapeRoundedRectangle が指 てのウインドウに対して活用されるわけではありません。 定できます。ただし、この機能は長方形以外のウインドウ クライアントから、ウインドウごとに利用の意志を示す必 を使うため、利用するサーバーに Shape 拡張が設定され 要があります。 、、バッキングストアを利用するぞ〃という意志を示す値が、 ていないと Rectangle が適用されてしまいます。 BackingStore です。これには、活用が非効果的であるこ 図 3 の例では、 Quit ボタンは Rectangle 、 Delete ボタ とを示す notUseful 、マッフ。後は有効であってほしいこと ンは Oval 、 New ボタンは Ellipse 、 Save ボタンは Round- edRectangle に設定してあります。 を示す whenMapped 、つねに活用を求める always 、デフ ォルトに従う default のいすれかが指定できます。 XawEdgeType (Form) Form 特有の型を示します。 Form 部品で構成されたウ AsciiType (AsciiSrc) インドウがリサイズされたときに関係する設定値の型で、 AsciiSrc 特有の型を示します。 AsciiSrc は、 text と呼 リサイズの対象となる 4 辺のそれぞれに対して適用できま はれる部品で利用されるファイルあるいはメモリに収めら す。指定できる値は、リサイズされたウインドウのなかに れた文字列情報を読み出すときに使われます。 AsciiType 子ウインドウが左右あるいは上下均等になるように空間 では、ファイルからの読出しを示す file 、メモリに用意され をとる rubber 、リサイズ前に左にとられていた間隔を保 たバッフアからの読出しを示す string が指定できます。 つ chainLeft 、右にとられていた間隔を保つ chainRight 、 上にとられていた間隔を保つ chainTop 、下にとられてい ShapeStyle(Command) Command 特有の型を示します。図 3 に示すように、コ た間隔を保つ chainBottom です。図 5 は、 xcalc の表示 部 (bevel) での変更例です。 マンドボタンはさまざまな形をしています。設定できる値 は、長方形を示す Rectangle あるいは ShapeRectangle 、 ソーセージ型の Oval あるいは ShapeOval 、楕円形の 図 5 XawEdgeType の設定佰リ DEG こ日こ AC lfx 2 SQRT 鶯、 V 3 れ tan 0 日こ = = > リサイズしたとき 5T0 8CL EXC XCalc*beveI. Edge:rubber OEG AC 匸に Su 日一 STO 日こ L 5 」 M EXC 0 日 G につ、 XCaIc*beveI. Edge:chainLeft OEG AC C 日匸 SQRT を、 2 EE 0 日し INV STO 日匸し SLIM EKC 149 UNIX MAGAZINE 1991.10
第 e $ & 第 0 ce 0 ce のは、 OpenWindows のサーバーで、 mit は MIT のサ ンプルサーバーをコンパイルしたものです。また MIPS 社のマシンのカッコ内の数字 ( 3.21 と 4.00 ) は RISC - windows のバージョンです。測定環境ですが、 SS2 およ び RS3230 、 RS3330 はクライアントとして Sun3 / 470 を用い、 X サーバーと xbench クライアント間の通信に は 10Mbps の Ethernet を使っています。 Sun3 / 260 だ けは xbench をローカルなクライアントとして動作さ せています。 例によって簡単に表の見方を説明すると、左からマシ ン名、プレーン数、通信方式、直線および塗り潰さない 四角形のテスト、塗り潰す四角形のテスト、反転やコピ ー操作のテスト、文字列のテスト、円と円弧のテスト、 複合テスト、そして最後に総合点 (xstones) となってい ます。結果の値は Sun3/50 上で動作する X11R3 に付属 するモノクロのサンプル・サーバーの速度を 10 , 000 と した相対値であり、 20 , 000 であれは性能が Sun3/10 の 2 倍であるということを思いだしてください。では結果 を見ていきましよう。 ます気がつくのは同し RS3230 で比較して、新しいサ ー ( 4.00 ) のほうが旧いサーバー ( 3.21 ) よりも遅い ということです。 xstones の値を見ると、バージョン 4. 0 のはうが 3.21 にくらべて約 4 , 000 低くなっています。 これは RISCwindows4.00 の X サーバーが R4 に初め て対応したものなので、まだまだチューニングが完全で ないことが原因と思われます。したがって、今後のバー ジョンアップで成績の上昇は十分に予想できます。 また、 4.0 は曲線テスト ( arc ) の成績が抜群によいこ とにも気づきます。 R4 対応になると arc の成績が上が るのは普通のことなのですが、 SS2 をも上回る成績を出 しているのはすごいですね。 arc はどではありませんが、テキスト描画 ( text ) の成 績もアップしています。プログラムや文書の作成などで はテキスト描画の速度が X ウインドウ・システムの快適 さを大きく左右するので、これは好ましいことです。 RS3230 と RS3330 を比較すると 1 . 3 倍前後となり、 Dhrystone の成績の比率どおりの差がついています。 RS3330 は、驚異的な速さをもつ GX を備えた SS2 ( OW ) の次に位置し、カラーであることを考慮に入れれ ば素晴らしい成績といえます。 UNIX MAGAZINE 1991.10 xllperf の結果 xllperf というべンチマークは、ユーサーのためでは なく、 X サーバー開発者のためのべンチマークであると よくいわれます。しかしながら、私たちは xbench の結 果では分からない X サーバーの欠点 ( あるいはよい点 ) をみつけられるという利点を認めて、毎回 xllperf の結 果を紹介しています。 RS3230 RS3230 でおこなった xllperf の結果は 23 ~ 25 ペー ジの図 1 です。掲載しているデータは、 RS3230 の RISC- windows4.00 でのテスト結果です。結果は棒グラフで 表してあります。左の欄がテスト項目で、グラフの棒は Sun3 / 260 ( モノクロ ) の処理速度を 1 としたときの相対 値を対数表示したものです。また右の欄はテスト結果の データ ( 相対値と絶対値 ) です。たとえはテスト Dot で は RS3230 の処理速度が Sun3 / 260 の処理速度の 1 . 07 倍で、 RS3230 が 1 秒間に 65 , 500.0 個の点を描画した ということを示しています。くれぐれも目盛が対数目盛 であることに注意してください。また比較のために毎回 使用している Sun3 / 260 がモノクロサーバーを使って いる点にも、十分注意してください。では結果を見てみ ましよう。 ます、図に掲載はしていませんが、 RS3230 の RISC- windows3.21 での結果を簡単に説明しますと、 5 つの wide-double-dashed な円と楕円の表示テストはテスト 自体が失敗し、そのほかのテストは相対値で 0.07 ~ 69. 20 倍という結果が出ました。ウインドウ関係のテストで は領域のコピーを除いてほば 4 倍前後となり、ウインド ウ生成が速いことを裏づける結果が得られました。 さて、 RS3230 の RISCwindows4.00 では失敗する テストはありませんでした。描画関係のテストでは 0.48 ~ 34.60 倍であり、 バージョン 3.21 では劣っていた曲 線テストもよい成績が出ています。ウインドウ関係のテ ストでは、領域のコピー以外ははば一貫して 3 ~ 4 倍と いう成績となっています。これは RS3230 がカラーであ ロ ることを考えると立派な成績といえるでしよう。 19
ースー 時刻合わせ portmap がもっているポートのマッピング情報は、 ないます。 必要があります。 portmap は、この割当てを自動的におこ は、そのサービスに対してソケットのポートを割り当てる れています。そのため、 RPC のサーピスを利用するときに map というデーモンです。 RPC はソケットの上に実装さ を使ったプログラムを利用するときに必要なのが、 port- が入手したいときには RPC が利用されます。この RPC も触れたように、サーバーがもつ情報などをクライアント 続き呼出し〃を司るものです。たとえば、 NIS のところで ものです。これは名前が示すとおり、、、リモート計算機の手 RPC とは、 Remote Procedure CaII の頭文字をとった RPC について ノヾー ユーサーへの道 6 マシンの時刻がよく狂うときは、ときどき合わせなくて はいけません。手作業で定期的に合わせるのは面倒なの で、 cron と rdate を使って自動的におこないます。 ます、正確な時計をもっているマシンをみつけます。あ るいは、そのネットワークのなかで標準時となるマシンを 決めます。そして、 root で、、 crontab -e" を実行しま す。そこで、 0 0 * * 1 rdate monkey00 /usr/etc/rpcinfo で確認できます。 % /usr/et c/rpc 土 0 -p program vers proto 100000 100000 100029 100003 100005 2 tcp 2 udp 1 udp 2 udp 1 udp po れ 111 111 654 2049 698 portmapper portmapper keyserv nfs mountd このようなマッピング情報は、 RPC のサーバー ( プログ ラム ) が起動するときに、 portmap と通信することによっ て作られます。ですから、クライアントからの要求が何も きていない状態では、このようなマッピング情報は存在し ません。 さて、 RPC を利用している標準的なプログラムは、通常 inetd から起動されます。したがって、 portmap デーモン は inetd デーモンより前に立ち上げられなければなりま せん。すなわち、なんらかの原因で portmap を再起動しな ければならない場合、サーバー (inetd) や RPC を利用して いるデーモン (nfsd や biod) も再起動しなければなりませ ん。もっとも確実な方法は、リプートでしよう : ー ) UNIX MAGAZINE 1991.10 のように書いておくと、週 1 回、自動的に monkey00 の時 刻に合わせます。 /etc/shells この /etc/shells というファイルが存在しないマシンも あります。このファイルは、ネットワーク環境での ftp コマ ンドとユーザーが使っているシェルに関係があります。 あるユーザーが ftp コマンドを使うときに、 ftp のサー バー側で起動するシェルが B シェルや C シェルなら、この ファイルがなくてもなんら問題はありません。しかし、そ れ以外のシェルを使っているユーサーが ftp コマンドを 実行するときには、 /etc/shells にそれらのシェルのパス を書いておく必要があります。ただし、この /etc/shells フ ァイルを作る場合は、 B シェルや C シェルも含めたすべて のシェルのパスを絶対パスで書いておかなければなりま せん。たとえば、 /bin/sh /bin/csh /usr/local/bin/t csh /usr/local/bin/bash というように書いておきます。 逆に考えると、 / etc / shells に登録していないシェルを 使っているユーザーを締めだせるということにもなります。 57