JP5005028B2 - 受信したリクエストに応じて動作するサーバ装置 - Google Patents

受信したリクエストに応じて動作するサーバ装置 Download PDF

Info

Publication number
JP5005028B2
JP5005028B2 JP2009514153A JP2009514153A JP5005028B2 JP 5005028 B2 JP5005028 B2 JP 5005028B2 JP 2009514153 A JP2009514153 A JP 2009514153A JP 2009514153 A JP2009514153 A JP 2009514153A JP 5005028 B2 JP5005028 B2 JP 5005028B2
Authority
JP
Japan
Prior art keywords
identification information
storage area
request
information storage
stored
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009514153A
Other languages
English (en)
Other versions
JPWO2008140053A1 (ja
Inventor
武史 小笠原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2009514153A priority Critical patent/JP5005028B2/ja
Publication of JPWO2008140053A1 publication Critical patent/JPWO2008140053A1/ja
Application granted granted Critical
Publication of JP5005028B2 publication Critical patent/JP5005028B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、受信したリクエストに応じて動作するサーバ装置に関する。特に、本発明は、受信した複数のリクエストに応じて複数の処理部が並列に動作するサーバ装置に関する。
近年、ウェブ・サーバを利用したビジネスは益々盛んになっており、ウェブ・サーバに求められる機能も高度かつ複雑になっている。例えば、ウェブ・サーバは多数のリクエストを同時並行的に受信する場合がある。これらに効率的に応えるため、大規模なウェブ・サーバは、複数のCPUを備えており、オペレーティング・システム上で複数のスレッドを動作させ、そのそれぞれに各リクエストを割り当てて、並列に処理させている。
Winsockについて。ホームページURL「http://e-words.jp/w/Winsock.html」2007年4月18日検索
ウェブ・サーバによりリクエストを効率的に処理するためには、スレッドがあるリクエストの処理を終えてから、次のリクエストの処理を開始するまでの待ち時間(以降、アイドル時間と称す)を短縮し、あるいはアイドル時間を無くすことが有効である。これを実現するためには、各スレッドは、前回のリクエストの処理を終えたら直ちに、受信済みで未処理のリクエストを検索すればよいとも考えられる。しかしながら、複数のスレッドのそれぞれが他のスレッドとは独立にこのようなリクエストを検索した場合には、効率が悪い場合がある。
具体的には、ウェブ・サーバに限らずサーバ装置がクライアント装置との間でTCP/IPプロトコル等に準拠して通信する場合には、ソケット・インターフェイスとして知られているインターフェイスを用いる場合が多い。例えば、BSD系のUNIXオペレーティング・システム向けに開発されたSocketインターフェイスやウィンドウズ・オペレーティング・システムのWinsockインターフェイスなどが良く知られている(非特許文献1を参照。)。
このソケット・インターフェイスにおいて、クライアント装置から受信したリクエストは、オペレーティング・システムやデバイスドライバなどの機能によって、ファイル・ディスクリプタと呼ばれる識別情報に対応付けられてシステムメモリ空間に格納される。各スレッドは、受信済みかつ未処理のリクエストを検索しようとする場合には、このシステムメモリ空間を走査して、個々のファイル・ディスクリプタに対応するリクエストを読み出して、そのリクエストが受信済みかつ未処理であるか判断しなければならない。
この検索にはシステムメモリ空間へのアクセスが必要なため、システムコールの呼び出しが必要になる場合が多い。また、各スレッドがこの検索を独立して行うと1つのリクエストが複数のスレッドに割り当てられてしまうなどの不都合があるため、この検索のためには他のスレッドとの間の排他制御を行うことが望ましい(この排他制御もシステムコールの機能として実現されている場合が多い)。このため、各スレッドが独立にこのような検索を行うと処理に時間がかかり、ウェブ・サーバ全体としての性能を却って低下させてしまうおそれがある。
これに対し、ある特定のスレッドのみがその他のスレッドにリクエストを割り当てるためにこのような検索を行うことで、システムコールに必要な処理間を短縮することも考えられる。但し、この特定のスレッドの処理はウェブ・サーバ本来のリクエストに応じた処理ではないので、頻繁に動作し過ぎるとウェブ・サーバ全体としての処理能力を却って低下させてしまう。一方で、この特定のスレッドの動作頻度を低下させ過ぎると、リクエストが受信済みにも関わらずそれを他のスレッドに割り当てることができず、アイドル時間を増加させてしまう。
そこで本発明は、上記の課題を解決することのできるサーバ装置、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明の一側面においては、クライアント装置から受信したリクエストに応じて動作するサーバ装置であって、システムメモリ空間に、クライアント装置から受信したリクエストをその識別情報に対応付けて記憶しているリクエスト記憶領域を有し、かつ、ユーザメモリ空間に、処理待ちのリクエストの識別情報を記憶するための識別情報記憶領域を有する、記憶装置と、前記識別情報記憶領域に記憶されている識別情報の数が、予め定められた基準数以下に減少したことを条件に、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索して、その識別情報を前記識別情報記憶領域に格納する識別情報格納部と、相互に並列に動作し、前記識別情報記憶領域から識別情報を取得できたことを条件に、その識別情報により識別されるリクエストを前記リクエスト記憶領域から取得し、そのリクエストに応じた処理を行う複数の要求処理部とを備えるサーバ装置、当該サーバ装置によりリクエストを処理する方法、および、当該サーバ装置としてコンピュータを機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、情報システム10の全体構成を示す。情報システム10は、複数のクライアント装置15と、サーバ装置20とを備える。複数のクライアント装置15は通信ネットワークを介してサーバ装置20に接続されている。そして、複数のクライアント装置15のそれぞれは、その利用者の指示などに応じ、サーバ装置20に対しリクエストを送信する。サーバ装置20がウェブ・サーバである場合において、このリクエストは例えばHTTPリクエストである。そして、サーバ装置20は、このリクエストに応じた処理を行い、その処理結果として例えば新たなウェブページを生成し、HTTPレスポンスに含めてクライアント装置15に返信する。
サーバ装置20は、コンピュータにより実現され、そのハードウェア構成の少なくとも一部として、記憶装置200と、1以上のCPU210と、通信インターフェイス220とを有する。記憶装置200は、このコンピュータをサーバ装置20として機能させるためのプログラムおよびデータを記憶している。少なくとも1のCPU210は、これらのプログラムおよびデータを読み込んで情報処理を行う。通信インターフェイス220は、プログラムに基づき動作するCPU210の指示に基づいて、複数のクライアント装置15との間で通信を行う。
本実施の形態に係るサーバ装置20は、これらのCPU210の処理能力を有効活用して、多数のリクエストを同時並行的に受信した場合であってもそれらを効率的に処理することを目的とする。
図2は、本実施の形態に係るサーバ装置20の第1の構成例の概要を示す。サーバ装置20は、記憶装置200のシステムメモリ空間にリクエスト記憶領域205Aを有し、記憶装置200のユーザメモリ空間に識別情報記憶領域205Bを有する。システムメモリ空間は、オペレーティング・システムまたは各種のデバイスドライバにより管理されたメモリ領域である。このシステムメモリ空間にアクセスするためには、多くの場合、オペレーティング・システム等が提供する所定のシステムコールを呼び出す必要がある。システムメモリ空間に記憶されたデータは、ハードウェアやオペレーティング・システム自体の動作と密接に関連しており、ユーザ・プログラムによる自由なアクセスを許すとサーバ装置20の動作に支障をきたすからである。
リクエスト記憶領域205Aは、クライアント装置15から受信したリクエストをその識別情報に対応付けて記憶している。リクエストは、例えば、クライアント装置15がサーバ装置20に要求する処理の内容を示すものである。一例として、このリクエストは、要求する処理を実行するためのサービス・プログラムの所在およびそれに与えるパラメータである。サービス・プログラムの所在とは、例えば、パス名、ファイル名、拡張子などを含み、URL(Uniform Resource Locator)と呼ばれる。オペレーティング・システムおよび通信用のデバイスドライバは、サーバ装置20がクライアント装置15からリクエストを受信すると、そのリクエストをこのリクエスト記憶領域205Aに順次格納する。記憶するリクエストの数は、運営するウェブサイトの規模によって異なるが、数万から数十万に及ぶ場合もある。
リクエストに対応する識別情報は、そのリクエストやそれに対応するレスポンスを授受するための接続(コネクションとも呼ばれる)を識別するための情報である。一例として、Socketインターフェイスを用いてTCP/IP接続を行う場合において、この識別情報はファイル・ディスクリプタと呼ばれ、ユーザ・プログラムがリクエストを処理したりレスポンスを返信したりする場合に用いられる。図ではこれらのファイル・ディスクリプタを、fd1、fd2、fd3、…、fdNなどの記号で示す。接続が確立されていてもリクエストが到着していない場合には、(たとえばクライアント装置15側の処理が完了していない場合やその前のリクエストをサーバ装置20で処理している場合である)、ファイル・ディスクリプタのみがリクエスト記憶領域205Aに記憶されていてそれに対応するリクエストは記憶されていない。
一方で、ユーザメモリ空間は、ユーザ・プログラムによりシステムコールを呼び出すことなくアクセス可能なメモリ領域である。識別情報記憶領域205Bは、このユーザメモリ空間に、処理待ちのリクエストの識別情報を記憶するために設けられている。識別情報記憶領域205Bは先入れ先出し(FIFO:First In First Out)のキューであり、識別情報格納部215により格納された識別情報を末尾に記憶し、先頭から要求処理部218−1〜nに対し識別情報を供給する。処理待ちのリクエストは、たとえば、サーバ装置20が受信済みであるがまだ後述の要求処理部218によって処理が開始されていないリクエストのことである。従って、ファイル・ディスクリプタがリクエスト記憶領域205Aに記憶されているがそれに対応するリクエストが記憶されていない場合には、識別情報記憶領域205Bは、そのファイル・ディスクリプタを記憶しない。一方、識別情報記憶領域205Bは、一旦は記憶したものの既に何れかの要求処理部218により取得されて処理が開始されたリクエストの識別情報は、記憶していない。
サーバ装置20は、少なくとも1つのCPU210の制御によって動作する識別情報格納部215および要求処理部218−1〜nを有する。識別情報格納部215および要求処理部218−1〜nの実現方法の概要は以下の通りである。オペレーティング・システムは、プログラマやユーザの視点ではあたかもCPUのように動作する、スレッドという実行主体を複数動作させている。その実体は、プログラムを順次実行するためのプログラム・カウンタ、プログラムが処理中のデータの格納する記憶装置200中の位置を記録するためのスタック・ポインタ、プログラムが処理中のデータを格納するためのレジスタ、および、そのプログラム専用に用意されたユーザメモリ空間内の記憶領域である。
そして、オペレーティング・システムは、複数のCPU210のそれぞれを何れかのスレッドに割り当てて、各スレッドにより実際にプログラムを実行させる。プログラムが比較的低速な入出力デバイスの処理完了を待つ場合や、他のスレッドの所定の動作の完了を待つ場合等には、オペレーティング・システムは、そのスレッドに割り当てていたCPUを、他のスレッドに割り当てることで、CPUの能力を処理完了待ちに浪費することを避け、CPUを有効活用する。即ち、スレッドとは、CPUの数と同時並行的に動作するプログラムの数が異なる場合にCPUを有効活用し、また、入出力完了待ちの時間を有効活用するために、CPUの動作を仮想化した実行主体である。
このようにスレッドが処理待ちとなってCPUを他のスレッドに割り当てることを、スレッドのブロックまたはスレッドのブロック動作という。スレッドのブロックは、具体的には、例えば、そのCPUのプログラム・カウンタ、スタック・ポインタ、および、レジスタの値を、処理完了待ちのスレッドに対応して予め定められた記憶領域に退避したうえで、当該他のスレッドのプログラム・カウンタ、スタック・ポインタ、および、レジスタの値を、そのCPUのプログラム・カウンタ、スタック・ポインタ、およびレジスタに格納することで実現される。スレッドのブロックはオペレーティング・システムにより迅速に処理されるものの、処理にある程度の時間はかかることから、ブロックの回数は少ない方が処理の効率は向上する。
本実施の形態に係る識別情報格納部215、および、要求処理部218−1〜nのそれぞれは、互いに異なる複数のスレッドのそれぞれによって実現される。即ち、オペレーティング・システムが各CPU210を、識別情報格納部215および要求処理部218−1〜nの何れかに割り当てて動作させる。CPU210が複数であれば、これらの各部は並列に動作する。また、CPU210の数が識別情報格納部215および要求処理部218−1〜nの総数に満たない場合には、(CPU210の処理能力をできるだけ活用しようとすれば多くの場合はこのようになるが、)、あるスレッドが頻繁に動作し過ぎると、他のスレッドの動作を妨害し得る。
次に、このようにして実現される識別情報格納部215および要求処理部218−1〜nの機能について説明する。識別情報格納部215は、リクエスト記憶領域205Aから1以上の処理待ちのリクエストを検索して、その識別情報を識別情報記憶領域205Bに格納する。図2の例ではファイル・ディスクリプタfd1およびfd3が検索されて、識別情報記憶領域205Bに格納される。好ましくは、識別情報格納部215は、予め定められた数を上限数として1以上のリクエストをリクエスト記憶領域205Aからまとめて検索するためのシステムコールを発行し、その結果として得られた識別情報を識別情報記憶領域205Bに格納する。一例としてこのシステムコールは、Socketインターフェイスのpollsetシステムコールである。これにより、リクエストを1つずつ検索するのと比較して処理を効率化できる。
要求処理部218−1〜nは、相互に並列に動作する。但し、このように動作するのは、既に説明してきたように、CPU210の数が少なくとも2以上であって十分に多いことが前提となる。そして、要求処理部218−1〜nのそれぞれは、FIFOキューである識別情報記憶領域205Bの先頭から識別情報を取得することを試みる。1つのリクエストを複数の要求処理部218で重複して処理してしまうことを防ぐため、この識別情報の取得には排他制御が必要となる。但し、この排他制御は、ユーザメモリ空間の記憶領域を対象とするから、システムコールの発行は不要であって、極めて高速な処理として実現される。たとえば、compare_and_swapと呼ばれる命令を含む数命令であって、CPUによっては数サイクルから数十サイクルで実行可能な命令列により実現され、システムコールの発行などと比較すれば極めて高速に処理される。
排他制御において排他権を獲得し、なおかつ識別情報記憶領域205Bが空でない(少なくとも1つの識別情報を記憶していることをいう、以下同じ)場合には、識別情報の取得に成功する。なお取得とは、対象となる情報を読み出した上で、その情報をその後に読出し不能となるようにする(例えば消去する)ことをいうものとして、以降「読出し」などの用語と区別して用いる。識別情報が取得できたことを条件に、要求処理部218−1〜nのそれぞれは、その識別情報により識別されるリクエストをリクエスト記憶領域205Aから取得する。リクエストの取得には、システムメモリ空間に対するアクセスが必要なので、多くの場合はシステムコールの発行が必要である。但し、識別情報が取得できた時点でそのリクエストを独占的に取得できることは保証されているので、このシステムコールにおいてリクエストが取得できなくてスレッドがブロックすることは無い。
そして、要求処理部218−1〜nのそれぞれは、取得したそのリクエストに応じた処理を行う。例えば、要求処理部218−1〜nは、リクエストに応じた処理を行うものとして予め作成されたJavaプログラムにより実現され、そのJavaプログラムをJava仮想機械により実行させることでリクエストに応じた処理を行う。必要に応じて、要求処理部218−1〜nのそれぞれは、処理結果を例えば新たなウェブページに含めてHTTPレスポンスとしてクライアント装置15に返信する。返信の処理もTCP/IPに準拠した通信であるからファイル・ディスクリプタが用いられる。
以上、図2を参照して説明した第1の構成例においては、処理待ちのリクエストを識別する識別情報をユーザメモリ空間に記憶して、それを1つのスレッドのみが随時更新することで、要求処理部218−1〜nを実現する多数のスレッドがシステムメモリ空間へのアクセスにおいて競合することを防止する。この結果、スレッドがブロックする可能性を低減し、また、システムコールの発行回数や頻度を低減して、本来処理に費やされるCPU210の利用率を向上させることができる。
しかしながら、識別情報格納部215が頻繁に動作し過ぎると、CPU210をその動作のために費やすあまり、リクエストに応じた本来の処理を行う要求処理部218の動作を阻害するおそれがある。一方で、識別情報格納部215の動作頻度が低すぎると、リクエスト記憶領域205Aに処理待ちのリクエストがあるにもかかわらず識別情報記憶領域205Bにその識別情報が格納されておらず、要求処理部218のアイドル時間を増加させ、あるいは、要求処理部218を実現するスレッド(ワーカ・スレッドと呼ぶ)を頻繁にブロックさせるおそれがある。これに対し、以下に説明する第2の構成例によれば、識別情報格納部215を状況に応じて適度な頻度で実行させることで、識別情報格納部215により本来処理を阻害しないようにしつつも識別情報記憶領域205Bを空にしないようにし、なおかつ頻度調整の処理もまたリクエストに応じた本来の処理をできるだけ阻害しないようにすることができる。
図3は、本実施の形態に係るサーバ装置20の第2の構成例の概要を示す。サーバ装置20が、リクエスト記憶領域205Aと、識別情報記憶領域205Bと、識別情報格納部215と、要求処理部218−1〜nとを有すること、およびその処理機能および実現方法については図2に述べたものと同様であるから、以下一部の相違点を除き説明を省略する。一方、第2の構成例におけるサーバ装置20は、第1の構成例におけるサーバ装置20に加えて、さらに、サーバ装置20のユーザメモリ空間に状態記憶領域205Cを有する。
状態記憶領域205Cは、識別情報記憶領域205Bの状態を記憶するために設けられている。そして、その状態は、識別情報格納部215が識別情報記憶領域205Bに格納した識別情報の数、および、要求処理部218−1〜nが識別情報記憶領域205Bから取得した識別情報の数の、少なくとも一方に基づく。少なくとも要求処理部218(例えばここでは要求処理部218−nとする、すべての要求処理部218のそれぞれであってもよい)は、既に述べた処理によって識別情報記憶領域205Bから識別情報を取得したことに応じ、取得した識別情報の数に基づき状態記憶領域205Cに記憶された状態を更新すると共に、識別情報格納部215に対し動作の開始を指示するかどうかを判断する。
具体的には、まず、要求処理部218−nは、識別情報記憶領域205Bから識別情報を取得した結果、識別情報記憶領域205Bに記憶されている識別情報の数が、予め定められた基準数以下に減少したかどうかを判断する。この判断は、識別情報記憶領域205Bを走査して識別情報の数をカウントすることによって実現されてもよいが、状態記憶領域205Cにアクセスして識別情報記憶領域205B中の識別情報をカウントしているカウンタを参照することで、迅速な処理として実現される。そして、要求処理部218−nは、識別情報の数が基準数以下に減少した場合に、識別情報格納部215に動作の開始を指示する。また、この処理と共に、既に述べた要求処理部218と同様、要求処理部218−nは、取得した識別情報により識別されるリクエストを取得して、それに応じた処理を行う。
識別情報格納部215は、何れかの要求処理部218(例えば要求処理部218−n)から指示を受けて動作を開始する。即ち動作を開始するときには、識別情報の数についての所定の条件、例えば、識別情報記憶領域205Bに格納されている識別情報の数が基準数以下に減少したという条件が満たされている。そして、識別情報格納部215は、リクエスト記憶領域205Aから1以上の処理待ちのリクエストを検索して、それらの識別情報をFIFOキューである識別情報記憶領域205Bの末尾に順次格納する。そして、識別情報格納部215は、識別情報を識別情報記憶領域205Bに新たに格納したことに応じ、新たに格納した識別情報の数に基づき識別情報記憶領域205Bに記憶された状態を更新する。
以上、図3を参照して説明した第2の構成例によれば、識別情報記憶領域205Bの識別情報が基準数以下に減少して空になりそうなときに、かつ、空になる前に、識別情報格納部215を動作させて、識別情報記憶領域205Bを識別情報で満たすことができるので、要求処理部218−1〜nを実現するワーカ・スレッドのアイドル時間、あるいはワーカ・スレッドのブロック回数を低減できる。また、そのように識別情報格納部215の動作開始を識別情報記憶領域205Bの状態に基づいて決定することで、要求処理部218−1〜nがすべて処理継続中の場合には識別情報格納部215は一切動作せず、サーバ装置20全体として本来処理の性能を向上できる。さらには、識別情報格納部215の動作を開始させるべきかどうかは要求処理部218が新たなリクエストの処理を開始しようとする場合にのみ、その開始をするための処理過程で判断するので、識別情報格納部215の動作頻度の調整に必要なCPU210資源も最小限にすることができる。なお、基準数の決め方によっては処理の効率を一層高めることもできる。以下、図4以降を参照して基準数の決め方およびそれに適した状態記憶領域205Cの更新方法について説明する。
図4は、本実施の形態に係る識別情報格納部215の動作を示すフローチャートである。サーバ装置20が起動し、または、サーバ装置20がリセットされると、サーバ装置20は識別情報格納部215を実現するためのスレッドを生成する(S400)。識別情報格納部215は、このようにスレッドが生成された場合や、後にS450として説明するように動作の開始を指示された場合に動作を開始して、リクエスト記憶領域205Aから1以上の処理待ちのリクエストを検索する(S410)。これは、既に述べたpollsetシステムコールの引数に、検索するリクエストの上限数(厳密にはリクエストを具体化したデータのパケットサイズ)を引数として与えて発行することによって実現される。また、識別情報格納部215がJavaプログラムにより実現されている場合には、このシステムコールの発行に際しJNI(Java Native Interface)が用いられる。また、多くの場合はリクエスト記憶領域205Aの全部または一部についての排他アクセス権の獲得が必要である。これにより、動作の開始を示す一度の指示について、あるいは、初回のスレッド生成1回について、この上限数を上限とする複数の識別情報がまとめて検索される。
そして、識別情報格納部215は、検索されたリクエストの識別情報をFIFOキューである識別情報記憶領域205Bの末尾に順次格納する(S420)。この格納にも、識別情報記憶領域205Bに対する排他アクセス権の獲得が必要であるが、要求処理部218は識別情報記憶領域205Bの先頭をアクセスするのに対し識別情報格納部215はその末尾をアクセスするので、多くの場合排他アクセス権の獲得は成功する。また、排他アクセス権はユーザメモリ空間についてのものであるから、その処理も極めて迅速に完了する。そして、識別情報格納部215は、識別情報を識別情報記憶領域205Bに新たに格納したことに応じ、新たに格納した識別情報の数に基づき状態記憶領域205Cに記憶された状態を更新する(S430)。
次に、識別情報格納部215は、リクエストの受信待ち状態にあった他のスレッドを起床させる(S440)。例えば、本実施の形態の制御にも関わらず識別情報記憶領域205Bが空となって他のワーカ・スレッドがブロックしている場合もあり得る(例えば後述のS510)。このため、識別情報格納部215は、ブロックしているそのようなワーカ・スレッドの検出を試みて、検出できた場合にはそのワーカ・スレッドを起床させる。起床したワーカ・スレッドは後に図5を参照して説明するように、リクエストの取得を試みたうえでそれに応じた処理を行う。
次に、識別情報格納部215は、検索された識別情報の数が予め定められた上記の上限数と等しいかどうかを判断する(S445)。この上限数は、サーバ装置20とクライアント装置15との間の接続(コネクション)数と比較して極めて小さく、例えば数十程度であってよい。これは、リクエストの検索に要するシステムコールのオーバヘッド、例えば、識別情報記憶領域205Bの記憶容量、初期化や直列化に要する時間などの制約のためである。上限数と識別情報の数が等しいということは、処理待ちで未検索のリクエストが存在し得るということである。このため、識別情報格納部215は、識別情報の数が上限数と等しいことを条件に(S445:YES)、S410に処理を戻して直ちにリクエストを検索させる。
一方、検索された識別情報の数が上限数未満であれば(S445:NO)、識別情報格納部215は、動作を開始する指示をワーカ・スレッド、即ちここでは要求処理部218−1〜nの何れかから受けるまで待機する(S450)。この指示は後のS550として説明する処理によって発行されるものである。また、好ましくは、識別情報格納部215は、待機開始前に、あるいはそれと同時に、識別情報格納部215を実現するスレッドに割り当てられたCPU210の制御を、他のスレッドに割り当てるためにオペレーティング・システムに返す処理を行う。この処理の詳細については、今日のオペレーティング・システムの機能として知られたものであるから説明を省略する。
図5は、本実施の形態に係る要求処理部218−1の動作を示すフローチャートである。要求処理部218−2〜nのそれぞれについても要求処理部218−1と略同様に動作する。ここではそれらを代表して要求処理部218−1についてその動作を説明する。要求処理部218−1は、スレッド・プールから選択されたスレッドを割り当てられると動作を開始する。スレッド・プールとは、サーバ装置20の起動時またはリセット時に予め生成されたスレッドの集合である。オペレーティング・システム又はミドルウェアは、このようなスレッド・プールを予め生成しておき、それの一部を適宜要求処理部218を実現するためのプログラムを実行するために割り当ててもよい。なお、これに代えて、要求処理部218−1は、サーバ装置20の起動時またはリセット時に直ちに動作を開始して、その後も動作し続けてもよい。即ち、図5を参照して説明する動作は、要求処理部218−1を実現するワーカ・スレッドがどのように起動されるかに関わらず、要求処理部218−1を実現するワーカ・スレッドによる要求処理部218−1としての動作を示している。
要求処理部218−1は、動作を開始すると、まず、リクエスト記憶領域205Aに対するアクセスの排他権を獲得することなく、既に述べた処理によって識別情報記憶領域205Bから識別情報の取得を試みる(S510)。識別情報記憶領域205Bはユーザメモリ空間に設けられているのでシステムコールの発行は不要である。但し、識別情報記憶領域205Bのアクセスには排他アクセス権の取得は必要な場合がある。この取得の処理は、既に説明したように極めて迅速に完了する。ここで、識別情報の取得に失敗した場合(失敗した、というのは、唯一度だけ識別情報の取得を試行して取得できなかった場合であってもよいし、予め定められた回数の試行が連続して失敗した場合であってもよい)、要求処理部218−1は、処理待ちのリクエストが新たに受信されるまで待機する。この待機は、図4のS440によって解除される。
次に、要求処理部218−1は、取得した識別情報の数に基づき状態記憶領域205Cに記憶された状態を更新する(S520)。要求処理部218−1が自ら処理するリクエストを取得する場合において、取得する識別情報の数は1個である。次に、要求処理部218−1は、識別情報格納部215に対し動作の開始を指示するかどうかを判断する(S530)。条件が成立した場合に(S540:YES)、要求処理部218−1は、識別情報格納部215に動作の開始を指示する(S550)。この指示は前述のS450の受信待ちに対するものである。識別情報を取得できたので、次に、要求処理部218−1は、取得したその識別情報により識別されるリクエストをリクエスト記憶領域205Aから取得する(S560)。リクエストの取得のために、要求処理部218−1は、取得したその識別情報により識別されるリクエストを記憶するリクエスト記憶領域205A内の領域の排他権を獲得する。
リクエストの取得には、システムメモリ空間に対するアクセスが必要なので、多くの場合はシステムコールの発行が必要である。但し、識別情報が取得できた時点でそのリクエストを独占的に取得できることは保証されているので、このシステムコールにおいてリクエストが取得できなくてワーカ・スレッドがブロックすることは無い。このため、要求処理部218−1は、例えば、スレッドをブロックさせる機能を省略して高速に動作可能な専用のシステムコールを発行してもよい。スレッドをブロックさせる機能とは、たとえば、取得しようとするリクエストが既に処理待ち状態になっているかどうかをチェックして処理待ち状態でなければスレッドをブロックさせる機能、または、取得しようとするリクエストを記憶する記憶領域への排他権を獲得して獲得できなければスレッドをブロックさせる機能のことをいう。そして、要求処理部218−1は、取得したそのリクエストに応じた処理を行う(S570)。処理完了後には、要求処理部218−1は、直ちにS510に処理を戻して他の識別情報の取得を試みる。
図6は、S430、S520、およびS530における動作の詳細を示す。S430において、具体的には、識別情報格納部215は、新たに識別情報記憶領域205Bに格納した識別情報の数を、状態記憶領域205Cに格納する(S600)。また、S520において、具体的には、要求処理部218−1は、S600において格納されたその識別情報の数から、1減じる。また、S530において、具体的には、要求処理部218−1は、状態記憶領域205Cに記憶された識別情報の数が0かどうかを判断する(S620)。これにより、前回に識別情報格納部215により識別情報が識別情報記憶領域205Bに格納されてから、識別情報記憶領域205Bから取得した識別情報の総数が、前回に識別情報記憶領域205Bに格納された識別情報の数に達したかどうかが判断される。
識別情報の数が0であれば(S620:YES)、要求処理部218−1は、条件成立と判断し(S630)、状態記憶領域205Cに記憶した識別情報の数を初期値にリセットする(S650)。即ち、この場合の上記の予め定められた基準数とは、識別情報格納部215が前回に識別情報を識別情報記憶領域205Bに格納した場合における、その格納の直前における識別情報記憶領域205B中の識別情報の数となる。一方、識別情報の数が0でなければ(S620:NO)、要求処理部218−1は、条件不成立と判断する(S640)。
以上、図6の例によれば、前回に格納した数の識別情報が既に取得された場合に識別情報格納部215を動作させることで、リクエストに依存した処理量の偏りに関わらず識別情報記憶領域205B内の識別情報の数を安定的に推移させ、識別情報記憶領域205Bが空になることを防ぐことができる。
識別情報格納部215が動作するタイミングは他の基準によって決定されてもよい。他の基準を用いる場合について変形例として以降順次説明してゆく。
図7は、本実施の形態の第1変形例について、S430、S520、およびS530における動作の詳細を示す。S430において、具体的には、識別情報格納部215は、新たに識別情報記憶領域205Bに識別情報を格納したことに応じて、リクエストを検索するために指定したそのリクエストの上限数を、状態記憶領域205Cに格納する(S700)。また、S520において、具体的には、要求処理部218−1は、S600において格納されたその識別情報の上限数から、1減じる。また、S530において、具体的には、要求処理部218−1は、状態記憶領域205Cに記憶された識別情報の数が0かどうかを判断する(S720)。これにより、前回に識別情報格納部215により識別情報が識別情報記憶領域205Bに格納されてから、識別情報記憶領域205Bから取得した識別情報の総数が、上記の上限数に達したかどうかが判断される。
識別情報の数が0であれば(S720:YES)、要求処理部218−1は、条件成立と判断し(S730)、状態記憶領域205Cに記憶した識別情報の数を初期値にリセットする(S750)。一方、識別情報の数が0でなければ(S720:NO)、要求処理部218−1は、条件不成立と判断する(S740)。
以上、この第1変形例によれば、新たに格納した識別情報の数という変数ではなく、上限数という定数をS700において格納すればよいので、S430における更新の処理を簡素にすることができる。また、格納する数値が定数であれば、定数という性質を利用した更なる効率化、例えばS750の数値のリセット時にS700において定数が格納される予定であることを見越してその定数を予め格納するとともにS700を省略する等の効率化が可能であることが、当業者にとって明らかである。
図8は、本実施の形態の第2変形例について、要求処理部218−1の動作を示すフローチャートである。本第2変形例において、識別情報格納部215の動作については図4を参照して説明したものと同様である。また、図8のS510およびS520については、図5を参照して説明したS510およびS520と同様である。即ち、要求処理部218−1は、識別情報記憶領域205Bから識別情報の取得を試みる(S510)。識別情報の取得に失敗した場合、要求処理部218−1は、処理待ちのリクエストが新たに受信されるまで待機する。次に、要求処理部218−1は、取得した識別情報の数に基づき状態記憶領域205Cに記憶された状態を更新する(S520)。但し、本第2変形例において、要求処理部218−1は、状態記憶領域205Cに記憶された状態を単に更新するのではなく、更新の時刻を更新後の状態に対応付けて記憶する。また、要求処理部218−1は、更新時には、更新前の状態および前回の更新時刻を履歴として状態記憶領域205Cに記憶しておく。
そして、要求処理部218−1は、状態記憶領域205Cに記憶した状態および履歴に基づいて、単位時間当たりに識別情報が識別情報記憶領域205Bから取得される数の速度を算出する(S580)。速度算出の具体例を図9に示す。要求処理部218−1は、ある時点1における識別情報の数の履歴と、他の時点2における識別情報の数の履歴とに基づいて、これらの間の時間における識別情報が取得される数の速度を算出する。一例としては2時点間の識別情報の数の差分を、2時転換の経過時間で割り算することによって実現される。算出する速度は、この2時点間における識別情報の数の変化を示す直線の傾きΔで表される。速度算出に用いる異なる2時点の組については、任意の方法により選択されたものでよい。例えば、要求処理部218−1は、直近の2時点の履歴に基づいて速度を算出してもよい。速度の算出処理自体も、要求処理部218−1が識別情報を取得したときに毎回でなくてもよく、予め定められた回数ごとに算出してよい。
図8に戻る。次に、要求処理部218−1は、この算出した速度に基づいて、識別情報記憶領域205Bに記憶されている識別情報の数が基準数以下に減少することが予測される時刻(以降、単に予測時刻という)を算出する(S590)。この予測時刻の算出例を図9に示す。要求処理部218−1は、上述の速度Δを傾きとし、この予測時刻の算出時点に対する識別情報記憶領域205Bに記憶された識別情報の数を示す座標を通過する一次関数を生成する。そして、要求処理部218−1は、この1次関数が、識別情報の数が基準数であることを示す定数関数と交わる点を求め、その点の時間軸上の座標値を予測時刻1として算出する。
要求処理部218−1は、この予測時刻1の時点で識別情報格納部215の動作を開始させてもよいが、識別情報格納部215が動作を開始してから実際に識別情報が新たに識別情報記憶領域205Bに格納されるまでの時間を考慮して、それよりも早く識別情報格納部215の動作を開始させてもよい。例えば、要求処理部218−1は、識別情報格納部215が動作を開始してから実際に識別情報が新たに識別情報記憶領域205Bに格納されるまでに要する、予め定められた所要時間を、予測時刻1から減じて、予測時刻2を算出してもよい。この所要時間は、このように予め定められたものであってもよいが、識別情報格納部215が識別情報記憶領域205Bに識別情報を格納する数の変化を観測した上でその速度を算出することによって求められてもよい。
図8に戻る。次に、要求処理部218−1は、上記のように算出した予測時刻(予測時刻2が望ましいが予測時刻1でもよい)に識別情報格納部215の動作を開始させる設定を行う(S590)。これは、予め定め設定した時刻に動作を開始するアラーム・スレッドを生成することによって実現されてよい。このアラーム・スレッドは、動作を開始すると直ちに識別情報格納部215に動作の開始を指示して処理を終了する。これにより、識別情報格納部215を予測時刻に動作させることができる。なお、既にアラーム・スレッドが生成されているときには、重複して識別情報格納部215に動作の開始を指示することを防ぐため、要求処理部218−1は、ここで説明した速度計算の処理自体を行わなくてよい。また、続いて行うS560およびS570の処理については図5を参照して説明したとおりであるから説明を省略する。
以上、この第2変形例によれば、識別情報が基準数以下に減少する速度を一旦予測すれば、その後に識別情報格納部215の動作開始を指示するかどうか判断する処理を省略でき、要求処理部218−1〜nの処理効率を向上させることができる。また、予測は実際に観測された識別情報の数に基づいて行われるので、サーバ装置20の運用状況に応じて識別情報格納部215の動作頻度を柔軟に調整することができる。
図10は、本実施の形態の第3変形例について、識別情報格納部215の動作を示すフローチャートである。本第3変形例において、要求処理部218−1の動作については図5やその変形例において説明したものと同様であるから説明を省略する。また、識別情報格納部215の動作についても、図4を参照して説明したS400からS445までの動作については同様である。即ち、識別情報格納部215は、受信済みのリクエストをリクエスト記憶領域205Aから検索してその識別情報を識別情報記憶領域205Bに格納すると共に、状態記憶領域205Cの状態を更新する。そして、識別情報格納部215は、検索されたリクエストの数が、検索するリクエストの上限数と等しいか判断する(S445)。
以降の処理は図5を参照して説明した処理とは相違する。検索された識別情報の数が上限数未満であれば(S445:NO)、識別情報格納部215は、動作を開始する指示を他のワーカ・スレッド、即ちここでは要求処理部218−1〜nの何れかから受けたかどうか判断する(S460)。動作を開始する指示を受けた場合には(S460:YES)、識別情報格納部215は、S410に処理を戻して、次のリクエストを検索する。受けていない場合には(S460:NO)、識別情報格納部215は、前回に動作を開始してから予め定められた期間が経過したかどうかを判断する(S470)。経過していれば(S470:YES)、識別情報格納部215は、動作を開始して、予め定められた条件が成立したかどうかを判断する(S480)。この期間が経過したかどうかの判断は、オペレーティング・システムなどにより予め提供されたタイマー機能により実現されることが好ましい。条件が成立した場合にはS410に処理を戻し(S490)、次のリクエストを検索する。
S480として示すこの条件判断は、上記のS530として説明した要求処理部218−1による判断と同様である。即ち、本第3変形例では、要求処理部218−1のみならず識別情報格納部215もが、この条件判断を行う。即ち例えば、具体的には、識別情報格納部215は、予め定められた期間が経過する毎に動作を開始して、識別情報記憶領域205Bに記憶されている識別情報の数が基準数以下に減少したかどうかを判断し、減少したことを条件に、リクエスト記憶領域205Aから1以上の処理待ちのリクエストを検索する。このようにすることで、判断の頻度を高めることができ、識別情報記憶領域205Bを識別情報で満たし易くすることができる。
なお、これに代えて、本第3変形例においては、要求処理部218−1が、条件判断を行わず、識別情報格納部215のみが図10に示す判断を行ってもよい。これにより、識別情報格納部215−1〜nはリクエストに応じた本来処理に費やす時間を増加させることができ、効率的である。
図11は、本実施の形態の第4変形例について、識別情報格納部215の動作を示すフローチャートである。本第4変形例において、要求処理部218−1の動作については図5やその変形例において説明したものと同様であるから説明を省略する。また、識別情報格納部215の動作についても、図4を参照して説明したS400からS445までの動作については同様である。即ち、識別情報格納部215は、受信済みのリクエストをリクエスト記憶領域205Aから検索してその識別情報を識別情報記憶領域205Bに格納すると共に、状態記憶領域205Cの状態を更新する。そして、識別情報格納部215は、検索されたリクエストの数が、検索するリクエストの上限数と等しいか判断する(S445)。
以降の処理は図5を参照して説明した処理とは相違する。検索された識別情報の数が上限数未満であれば(S445:NO)、識別情報格納部215は、上限数に対する、動作一度あたりに検索される識別情報の数の割合である情報充填率を算出する(S1000)。情報充填率は、2以上の所定回数の動作において検索された識別情報の数の平均に基づいて算出されてもよい。即ち例えば、識別情報格納部215は、S430における状態情報の更新において、直近から数えて予め定められた回数の検索動作において検索された識別情報の数の履歴を状態記憶領域205Cに格納する。そして、S1000における情報充填率の算出処理において、識別情報格納部215は、それら識別情報の数の履歴に基づいて、一度の動作で検索された識別情報の数の平均を算出して、上記上限数で割り算することにより、情報充填率を算出する。
そして、次に、識別情報格納部215は、この情報充填率に基づいて、識別情報格納部215が動作する時間間隔を算出して設定する(S1010)。例えば、識別情報格納部215は、この情報充填率がより高いことを条件に、この情報充填率がより低い場合と比較してこの時間間隔をより短く設定する。情報充填率が高い場合には処理待ちのリクエストがリクエスト記憶領域205Aにまだ残っている可能性が高く、すぐに次の検索動作を開始しても多くの識別情報を検索できる可能性が高いからである。
そして、次に、識別情報格納部215は、設定したこの時間間隔が経過したかどうかを判断する(S1020)。経過していれば(S1020:YES)、識別情報格納部215は、S400に処理を戻して次の検索に処理を移す。経過していなければ(S1020:NO)、識別情報格納部215は、動作を開始する指示を他のワーカ・スレッド、即ちここでは要求処理部218−1〜nの何れかから受けたかどうか判断する(S1030)。動作を開始する指示を受けた場合には(S1030:YES)、識別情報格納部215は、S410に処理を戻して、次のリクエストを検索する。受けていない場合には(S1030:NO)、識別情報格納部215は、S1020に処理を戻して設定時間が経過したかどうかを判断する。
以上、この第4変形例によれば、識別情報格納部215は、情報充填率に基づいてリクエスト記憶領域205Aの現在の状態や近い将来の状態を予測して、一度の動作あたりに検索できる識別情報の数が多いと予測される場合には頻繁に動作する。これにより、識別情報記憶領域205Bのみならずリクエスト記憶領域205Aの状態に基づきリクエスト検索の頻度を調整して、識別情報格納部の動作を効率化できる。この第4変形例の更なる変形として、ウェブサイトの運用状況に応じて動作頻度を更に細かく変更すれば、識別情報格納部215の動作頻度を調整して更なる性能向上を実現することができる。例えば、サーバ装置20が同時に受信し得るリクエストの総数やサーバ装置20を実現するシステム・ソフトウェアの種類によって、識別情報格納部215が発行するシステムコールの1回あたりの所要時間、即ち、リクエスト記憶領域205Aからリクエストの識別情報を検索するための所要時間は異なる場合がある。
もしシステムコールの所要時間が極めて短いならば、情報充填率がたとえ低くても高頻度でシステムコールを呼び出すことによる性能低下は小さい。一方、システムコールの所要時間が長い場合には、情報充填率が高い場合にのみ低頻度でシステムコールを呼び出すのが望ましい。以上の観点から、識別情報格納部215は、この所要時間がより小さい場合に、この所要時間がより大きい場合と比較して、時間間隔をより短く設定する。この設定は、サーバ装置20の起動時またはリセット時に識別情報格納部215が予め行ってもよいし、運用中に適宜変更してもよい。
以上のように、第4変形例においては、識別情報格納部215の動作を情報充填率という観点から調整可能とすることで、ウェブサイト運営上の様々な環境に柔軟に対応して、サーバ装置20の動作を効率化できる。
図12は、本実施の形態に係るサーバ装置20として機能するコンピュータのハードウェア構成の一例を示す。サーバ装置20は、ホストコントローラ1082により相互に接続される少なくとも1のCPU210、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部を備える。この図12においてサーバ装置20はSMP(Symmetric Multiple Processor)型のアーキティクチャを採用する。即ち、CPU210がRAM1020を中心に対称的に配置され、それぞれのCPU210がRAM1020を共有してアクセスする。また、サーバ装置20は、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス220、記憶装置(例えばハードディスクドライブ)200、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU210及びグラフィックコントローラ1075とを接続する。CPU210は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU210等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU210等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス220、記憶装置200、及びCD−ROMドライブ1060を接続する。通信インターフェイス220は、ネットワークを介して外部の装置と通信する。記憶装置200は、サーバ装置20が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又は記憶装置200に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、サーバ装置20の起動時にCPU210が実行するブートプログラムや、サーバ装置20のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020または記憶装置200に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
サーバ装置20に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記
録媒体から読み出されサーバ装置20にインストールされて実行される。プログラムがサーバ装置20等に働きかけて行わせる動作は、図1から図11において説明したサーバ装置20における動作と同一であるから、説明を省略する。
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをサーバ装置20に提供してもよい。
以上、本実施の形態および各種の変形例に沿って説明したように、サーバ装置20によれば、同時並行的に多数のリクエストを受信する場合であっても、それらを各スレッドに効率的に割り当てて処理を効率化できる。本願発明者によりこのサーバ装置20をウェブ・サーバとして動作させて性能を計測した結果、ウェブ・トランザクションを擬似的に発生させるベンチマークプログラム(通常の改良技術では1%の性能向上も極めて困難である)の処理効率を6%も向上させることができた。また、ストレステストにおいては30%程度の性能向上が観測された。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。例えば、要求処理部218−1〜nおよび識別情報格納部215はそれぞれ別々のスレッドにより実現されなくともよく、要求処理部218−1〜nを実現するワーカ・スレッドのうちの1つが、識別情報格納部215を実現するスレッドを兼ねてもよい。即ちこの場合、要求処理部218−1が図5のS550に示す動作の開始の指示に代えて、図4に示す繰り返し処理を1回分行ってよい。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
情報システム10の全体構成を示す。 本実施の形態に係るサーバ装置20の第1の構成例の概要を示す。 本実施の形態に係るサーバ装置20の第2の構成例の概要を示す。 本実施の形態に係る識別情報格納部215の動作を示すフローチャートである。 本実施の形態に係る要求処理部218−1の動作を示すフローチャートである。 S430、S520、およびS530における動作の詳細を示す。 本実施の形態の第1変形例について、S430、S520、およびS530における動作の詳細を示す。 本実施の形態の第2変形例について、要求処理部218−1の動作を示すフローチャートである。 本実施の形態の第2変形例について、識別情報を取得する速度に基づき動作開始時刻を算出する処理の概要を示すフローチャートである。 本実施の形態の第3変形例について、識別情報格納部215の動作を示すフローチャートである。 本実施の形態の第4変形例について、識別情報格納部215の動作を示すフローチャートである。 本実施の形態に係るサーバ装置20として機能するコンピュータのハードウェア構成の一例を示す。
符号の説明
10 情報システム
15 クライアント装置
20 サーバ装置
200 記憶装置
205A リクエスト記憶領域
205B 識別情報記憶領域
205C 状態記憶領域
210 CPU
215 識別情報格納部
218 要求処理部
220 通信インターフェイス

Claims (13)

  1. クライアント装置から受信したリクエストに応じて動作するサーバ装置であって、
    システムメモリ空間に、クライアント装置から受信したリクエストをその識別情報に対応付けて記憶しているリクエスト記憶領域を有し、かつ、ユーザメモリ空間に、処理待ちのリクエストの識別情報を記憶するための識別情報記憶領域を有する、記憶装置と、
    前記識別情報記憶領域に記憶されている識別情報の数が、予め定められた基準数以下に減少したことを条件に、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索して、その識別情報を前記識別情報記憶領域に格納する識別情報格納部と、
    相互に並列に動作し、前記識別情報記憶領域から識別情報を取得できたことを条件に、その識別情報により識別されるリクエストを前記リクエスト記憶領域から取得し、そのリクエストに応じた処理を行う複数の要求処理部と
    を備えるサーバ装置。
  2. 前記識別情報格納部、および、前記複数の要求処理部、のそれぞれは、互いに異なる複数のスレッドのそれぞれによって実現され、
    少なくとも1の前記要求処理部は、前記識別情報記憶領域から識別情報を取得した結果、前記識別情報記憶領域に記憶されている識別情報の数が前記基準数以下に減少した場合に、前記識別情報格納部に動作の開始を指示し、
    前記識別情報格納部は、何れかの前記要求処理部から指示を受けて動作を開始し、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索して、その識別情報を前記識別情報記憶領域に格納する
    請求項1に記載のサーバ装置。
  3. 前記記憶装置は、ユーザメモリ空間に、前記識別情報記憶領域に格納した識別情報の数および前記識別情報記憶領域から取得した識別情報の数の少なくとも一方に基づく、前記識別情報記憶領域の状態を記憶するための状態記憶領域を更に有し、
    前記識別情報格納部は、識別情報を前記識別情報記憶領域に新たに格納したことに応じて、新たに格納した識別情報の数に基づき前記状態記憶領域に記憶された状態を更新し、 前記要求処理部は、前記識別情報記憶領域から識別情報を取得したことに応じて、取得した識別情報の数に基づき前記状態記憶領域に記憶された状態を更新し、更新後の状態に基づいて、前記識別情報記憶領域に記憶されている識別情報の数が前記基準数以下に減少したかどうかを判断する
    請求項2に記載のサーバ装置。
  4. 前記要求処理部は、前記識別情報記憶領域から識別情報を取得したことに応じて、前回に前記識別情報格納部により識別情報が前記識別情報記憶領域に格納されてから、前記識別情報記憶領域から取得した識別情報の数が、前回に前記識別情報記憶領域に格納された識別情報の数に達したかどうかを、前記状態記憶領域に記憶された状態に基づいて判断する
    請求項3に記載のサーバ装置。
  5. 前記識別情報格納部は、動作の開始を示す一度の指示について、予め定められた数を上限数として1以上のリクエストを前記リクエスト記憶領域から検索して、その識別情報を前記識別情報記憶領域に格納し、
    前記要求処理部は、前記識別情報記憶領域から識別情報を取得したことに応じて、前回に前記識別情報格納部により識別情報が前記識別情報記憶領域に格納されてから、前記識別情報記憶領域から取得した識別情報の数が、前記上限数に達したかどうかを、前記状態記憶領域に記憶された状態に基づいて判断する
    請求項3に記載のサーバ装置。
  6. 前記状態記憶領域は、異なる2以上の時点のそれぞれにおける、前記識別情報記憶領域に記憶された識別情報の数を記憶しており、
    前記要求処理部は、前記識別情報記憶領域から識別情報を取得したことに応じて、前記状態記憶領域に記憶された状態に基づき、単位時間当たりに識別情報が前記識別情報記憶領域から取得される数の速度を算出し、この速度に基づき、前記識別情報記憶領域に記憶されている識別情報の数が前記基準数以下に減少する予測時刻を算出し、この予測時刻に前記識別情報格納部の動作を開始させる設定を行う
    請求項3に記載のサーバ装置。
  7. 前記識別情報格納部は、さらに、予め設定した時間間隔で動作し、一度の動作について、予め定められた数を上限数として1以上のリクエストを前記リクエスト記憶領域から検索して、その識別情報を前記識別情報記憶領域に格納し、かつ
    前記上限数に対する、動作一度あたりに検索される識別情報の数の割合である情報充填率が、より高いことを条件に、この情報充填率がより低い場合と比較して前記時間間隔をより短く設定する
    請求項1に記載のサーバ装置。
  8. 前記リクエスト記憶領域からリクエストの識別情報を検索するための所要時間が予め定められており、
    前記識別情報格納部は、この所要時間がより小さい場合に、この所要時間がより大きい場合と比較して、前記時間間隔をより短く設定する
    請求項7に記載のサーバ装置。
  9. 前記識別情報格納部は、予め定められた期間が経過する毎に動作を開始して、前記識別情報記憶領域に記憶されている識別情報の数が、予め定められた基準数以下に減少したかどうかを判断し、減少したことを条件に、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索して、その識別情報を前記識別情報記憶領域に格納する
    請求項2に記載のサーバ装置。
  10. 前記識別情報格納部は、システムコールを発行してリクエストを前記リクエスト記憶領域から検索し、
    それぞれの前記要求処理部は、システムコールを発行することなく識別情報を前記識別情報記憶領域から取得することを試みて、取得できたことを条件に、システムコールを発行してリクエストを前記リクエスト記憶領域から取得する
    請求項1に記載のサーバ装置。
  11. 前記識別情報格納部は、前記リクエスト記憶領域に対するアクセスの排他権を獲得してから、リクエストを前記リクエスト記憶領域から検索し、
    それぞれの前記要求処理部は、前記リクエスト記憶領域に対するアクセスの排他権を獲得することなく識別情報を前記識別情報記憶領域から取得することを試みて、取得できたことを条件に、取得したその識別情報により識別されるリクエストを記憶する前記リクエスト記憶領域内の領域の排他権を獲得してそのリクエストを前記リクエスト記憶領域から取得する
    請求項1に記載のサーバ装置。
  12. サーバ装置に、クライアント装置から受信したリクエストに応じて処理をさせる方法であって、
    前記サーバ装置は、
    システムメモリ空間に、クライアント装置から受信したリクエストをその識別情報に対応付けて記憶しているリクエスト記憶領域を有し、かつ、ユーザメモリ空間に、処理待ちのリクエストの識別情報を記憶するための識別情報記憶領域を有する、記憶装置を有し、 前記サーバ装置の識別情報格納部により、前記識別情報記憶領域に記憶されている識別情報の数が、予め定められた基準数以下に減少したことを条件に、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索させて、その識別情報を前記識別情報記憶領域に格納させるステップと、
    前記サーバ装置の複数の要求処理部を、相互に並列に動作させ、前記識別情報記憶領域から識別情報を取得できたことを条件に、その識別情報により識別されるリクエストを前記リクエスト記憶領域から取得し、そのリクエストに応じた処理を行わせるステップと、 を備える方法。
  13. クライアント装置から受信したリクエストに応じて動作するサーバ装置として、コンピュータを機能させるプログラムであって、
    前記コンピュータを、
    システムメモリ空間に、クライアント装置から受信したリクエストをその識別情報に対応付けて記憶しているリクエスト記憶領域を有し、かつ、ユーザメモリ空間に、処理待ちのリクエストの識別情報を記憶するための識別情報記憶領域を有する、記憶装置と、
    前記識別情報記憶領域に記憶されている識別情報の数が、予め定められた基準数以下に減少したことを条件に、前記リクエスト記憶領域から1以上の処理待ちのリクエストを検索して、その識別情報を前記識別情報記憶領域に格納する識別情報格納部と、
    相互に並列に動作し、前記識別情報記憶領域から識別情報を取得できたことを条件に、その識別情報により識別されるリクエストを前記リクエスト記憶領域から取得し、そのリクエストに応じた処理を行う複数の要求処理部と
    して機能させるプログラム。
JP2009514153A 2007-05-10 2008-05-09 受信したリクエストに応じて動作するサーバ装置 Expired - Fee Related JP5005028B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009514153A JP5005028B2 (ja) 2007-05-10 2008-05-09 受信したリクエストに応じて動作するサーバ装置

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2007125505 2007-05-10
JP2007125505 2007-05-10
JP2009514153A JP5005028B2 (ja) 2007-05-10 2008-05-09 受信したリクエストに応じて動作するサーバ装置
PCT/JP2008/058658 WO2008140053A1 (ja) 2007-05-10 2008-05-09 受信したリクエストに応じて動作するサーバ装置

Publications (2)

Publication Number Publication Date
JPWO2008140053A1 JPWO2008140053A1 (ja) 2010-08-05
JP5005028B2 true JP5005028B2 (ja) 2012-08-22

Family

ID=39970509

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009514153A Expired - Fee Related JP5005028B2 (ja) 2007-05-10 2008-05-09 受信したリクエストに応じて動作するサーバ装置

Country Status (6)

Country Link
US (1) US8078674B2 (ja)
EP (1) EP2157512A4 (ja)
JP (1) JP5005028B2 (ja)
KR (1) KR101103905B1 (ja)
CN (1) CN101681273B (ja)
WO (1) WO2008140053A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8078674B2 (en) * 2007-05-10 2011-12-13 International Business Machines Corporation Server device operating in response to received request
JP5860634B2 (ja) * 2011-08-23 2016-02-16 任天堂株式会社 情報処理システム、情報処理方法、サーバプログラム、サーバ装置、および、サーバシステム
US20150113602A1 (en) * 2012-05-08 2015-04-23 Serentic Ltd. Method and system for authentication of communication and operation
CN106302570A (zh) * 2015-05-14 2017-01-04 阿里巴巴集团控股有限公司 一种请求处理方法及装置
US9778951B2 (en) * 2015-10-16 2017-10-03 Qualcomm Incorporated Task signaling off a critical path of execution
CN106657187A (zh) * 2015-10-30 2017-05-10 南京中兴新软件有限责任公司 报文处理的方法及装置
JP7034681B2 (ja) * 2017-11-27 2022-03-14 アズビル株式会社 通信制御装置
JP7015203B2 (ja) * 2018-04-11 2022-02-02 株式会社日立製作所 アプリの実行方法
US10623328B1 (en) * 2018-06-08 2020-04-14 West Corporation Message brokering for asynchronous status updates
CN109271869B (zh) * 2018-08-21 2023-09-05 平安科技(深圳)有限公司 人脸特征值提取方法、装置、计算机设备及存储介质
CN109391682B (zh) * 2018-09-14 2023-05-12 联想(北京)有限公司 一种信息处理方法及服务器集群
CN109491895A (zh) * 2018-10-26 2019-03-19 北京车和家信息技术有限公司 服务器压力测试方法及装置
CN109918249A (zh) * 2019-03-12 2019-06-21 浪潮商用机器有限公司 一种服务器上设备信息的收集方法、装置和介质
CN110430070B (zh) * 2019-07-19 2022-07-22 北京奇艺世纪科技有限公司 一种服务状态分析方法、装置、服务器、数据分析设备及介质
CN116089437B (zh) * 2022-11-30 2023-10-03 荣耀终端有限公司 一种数据处理方法及服务器

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0520100A (ja) * 1991-07-11 1993-01-29 Mitsubishi Electric Corp オペレーテイングシステム

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838910A (en) * 1996-03-14 1998-11-17 Domenikos; Steven D. Systems and methods for executing application programs from a memory device linked to a server at an internet site
US6981215B1 (en) * 1998-12-31 2005-12-27 Microsoft Corp. System for converting event-driven code into serially executed code
US7171473B1 (en) * 1999-11-17 2007-01-30 Planet Exchange, Inc. System using HTTP protocol for maintaining and updating on-line presence information of new user in user table and group table
US20020055982A1 (en) * 2000-11-03 2002-05-09 The Board Of Regents Of The University Of Nebraska Controlled server loading using L4 dispatching
US7051330B1 (en) * 2000-11-21 2006-05-23 Microsoft Corporation Generic application server and method of operation therefor
US7499966B2 (en) * 2001-08-23 2009-03-03 International Business Machines Corporation Web server architecture for improved performance
US20030065701A1 (en) * 2001-10-02 2003-04-03 Virtual Media, Inc. Multi-process web server architecture and method, apparatus and system capable of simultaneously handling both an unlimited number of connections and more than one request at a time
US20030156547A1 (en) * 2002-02-15 2003-08-21 Exanet. Inc. System and method for handling overload of requests in a client-server environment
CA2379090A1 (en) * 2002-03-27 2003-09-27 Ibm Canada Limited-Ibm Canada Limitee Efficient server handling of multiple requests from a web browser
US7448049B1 (en) * 2002-10-18 2008-11-04 Crossroads Systems, Inc. System and method of supporting kernel functionality
KR100451211B1 (ko) * 2002-10-31 2004-10-13 엘지전자 주식회사 이동 컴퓨팅 환경에서 트랜잭션 캐시 일관성 유지 시스템및 방법
US7237242B2 (en) 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US7587510B1 (en) * 2003-04-21 2009-09-08 Charles Schwab & Co., Inc. System and method for transferring data between a user space and a kernel space in a server associated with a distributed network environment
JP2005115600A (ja) * 2003-10-07 2005-04-28 Hitachi Ltd 情報処理装置及び方法
JP4873852B2 (ja) * 2004-02-26 2012-02-08 株式会社リコー 第一の通信装置、情報処理装置、情報処理プログラム、記録媒体
US7577707B2 (en) * 2004-04-21 2009-08-18 International Business Machines Corporation Method, system, and program for executing data transfer requests
US7657892B2 (en) * 2004-05-20 2010-02-02 Bea Systems, Inc. System and method for application server with self-tuned threading model
US8370448B2 (en) * 2004-12-28 2013-02-05 Sap Ag API for worker node retrieval of session request
JP4151978B2 (ja) * 2005-05-25 2008-09-17 インターナショナル・ビジネス・マシーンズ・コーポレーション サーバ装置、管理方法およびプログラム
US8713180B2 (en) * 2005-06-22 2014-04-29 Cisco Technology, Inc. Zero-copy network and file offload for web and application servers
US8005943B2 (en) * 2005-10-12 2011-08-23 Computer Associates Think, Inc. Performance monitoring of network applications
US8347293B2 (en) * 2005-10-20 2013-01-01 Network Appliance, Inc. Mutual exclusion domains to perform file system processes on stripes
US20090094611A1 (en) * 2005-12-15 2009-04-09 Anders Danne Method and Apparatus for Load Distribution in Multiprocessor Servers
JP4842690B2 (ja) * 2006-04-14 2011-12-21 富士通株式会社 アプリケーション管理プログラム、アプリケーション管理方法およびアプリケーション管理装置
US8667120B2 (en) * 2006-04-26 2014-03-04 Nippon Telegraph And Telephone Corporation Load control device and method thereof for controlling requests sent to a server
US8849981B2 (en) * 2006-12-01 2014-09-30 Ca, Inc. Response time benchmarking
US20080172679A1 (en) * 2007-01-11 2008-07-17 Jinmei Shen Managing Client-Server Requests/Responses for Failover Memory Managment in High-Availability Systems
US7769931B1 (en) * 2007-02-15 2010-08-03 Emc Corporation Methods and systems for improved virtual data storage management
US8078674B2 (en) * 2007-05-10 2011-12-13 International Business Machines Corporation Server device operating in response to received request

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0520100A (ja) * 1991-07-11 1993-01-29 Mitsubishi Electric Corp オペレーテイングシステム

Also Published As

Publication number Publication date
EP2157512A1 (en) 2010-02-24
US8078674B2 (en) 2011-12-13
CN101681273A (zh) 2010-03-24
CN101681273B (zh) 2013-01-09
WO2008140053A1 (ja) 2008-11-20
JPWO2008140053A1 (ja) 2010-08-05
KR101103905B1 (ko) 2012-01-12
KR20100019453A (ko) 2010-02-18
EP2157512A4 (en) 2012-10-10
US20080281906A1 (en) 2008-11-13

Similar Documents

Publication Publication Date Title
JP5005028B2 (ja) 受信したリクエストに応じて動作するサーバ装置
EP3796168A1 (en) Information processing apparatus, information processing method, and virtual machine connection management program
JP6447217B2 (ja) 実行情報通知プログラム、情報処理装置および情報処理システム
JP5296373B2 (ja) 処理の所要時間を予め提供する技術
JP4629587B2 (ja) 予約管理プログラム
JP5623139B2 (ja) クラウドコンピューティングシステム、文書処理方法、及びコンピュータプログラム
TWI359358B (en) Methods, system and machine-readable storage mediu
US20090276205A1 (en) Stablizing operation of an emulated system
CN112416437B (zh) 信息处理方法、信息处理装置和电子设备
JP5136658B2 (ja) 仮想計算機の割当方法及び割当プログラム並びに仮想計算機環境を有する情報処理装置
WO2017016380A1 (en) Advance cache allocator
US20060280171A1 (en) Method, system, and article of manufacture for mapping programming interfaces
JP5704176B2 (ja) プロセッサ処理方法、およびプロセッサシステム
JP5884595B2 (ja) メッセージ通信方法,メッセージ通信プログラムおよびコンピュータ
JP5376042B2 (ja) マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム
JP6200100B2 (ja) 計算機システム
US20240104468A1 (en) Maintenance background task regulation using feedback from instrumented waiting points
JP2024002405A (ja) リソース割当プログラムおよびリソース割当方法
US20230252003A1 (en) Parallel data store system, computer-readable recording medium storing program, and parallel data store method
WO2016092667A1 (ja) 計算機及び割込み制御方法
US20210026809A1 (en) Data caching method and node based on hyper-converged infrastructure
JP2023116924A (ja) 情報処理プログラム、情報処理方法および情報処理システム
JP4780327B2 (ja) パーティション・コンテキスト制御装置及び方法、並びにコンピュータ
JP2005284630A (ja) オペレーティングシステム
JP2016184188A (ja) 管理装置、管理方法とそのプログラム、および、情報処理システム

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120424

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120522

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150601

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees