JP2005534116A - 複数の消費者をもつコンピュータシステムで資源を動的に割当てて管理する方法 - Google Patents

複数の消費者をもつコンピュータシステムで資源を動的に割当てて管理する方法 Download PDF

Info

Publication number
JP2005534116A
JP2005534116A JP2004524038A JP2004524038A JP2005534116A JP 2005534116 A JP2005534116 A JP 2005534116A JP 2004524038 A JP2004524038 A JP 2004524038A JP 2004524038 A JP2004524038 A JP 2004524038A JP 2005534116 A JP2005534116 A JP 2005534116A
Authority
JP
Japan
Prior art keywords
account
resources
code
task
address space
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.)
Pending
Application number
JP2004524038A
Other languages
English (en)
Inventor
エテルソン、ゲイリック
ボンダル、グレゴリー
ストーラー、マイケル
Original Assignee
スフェラ コーポレイション
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 スフェラ コーポレイション filed Critical スフェラ コーポレイション
Publication of JP2005534116A publication Critical patent/JP2005534116A/ja
Pending legal-status Critical Current

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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

オペレーティングシステム(OS)で管理され、複数の消費者アカウントを有するコンピュータシステムにおいて、資源を動的に割当てて管理する方法である。必要に応じて、個々の消費者のアカウントについて、スワップファイル中に、仮想メモリアドレス空間の各部分が割当てられる。メモリアドレス空間は、各アカウント毎に制限される。CPU使用量が、各アカウントから要求されたタスク間で分配され、オリジナルコード中の一つ以上の特定の手続きを決めて、仮想メモリアドレス空間の割当ておよび/または制限、および/または、プロセス数および/または分配されたCPU使用量の制限に応じて、実行する特定の手続きを変更することにより、OSのオリジナルコードのセグメントが変更される。

Description

発明の分野
本発明は、コンピュータシステムを管理する分野に関するものである。特に、本発明は、所与のコンピュータシステムの消費者、システムおよびWEBサービスにより利用される資源を制限する方法に関するものである。
発明の背景
WEBサイトを個別にホスティングすることは、比較的コストのかかることである。その理由は、ホスティングには、サイトへのインターネットアクセスのために充分な回線容量を割当て、サイトを常時利用可能とするような(ソフトウェアとハードウェア両面の)資源を割当て、ファイアーウォールなどのセキュリティ面を管理する必要があるためである。
WEBサイトのホスティング業者(WHP;Web Hosting Provider)は、コンピュータシステムの消費者(consumer)であり、様々なサービスモデルを活用して、様々なサービスの種類に応じて、異なる種類の顧客に対応できるようにしている。通常、小規模および中規模のビジネス向けWEBサイトは、専用サーバのような余裕のある資源を事前に確保しておくことはなく、共有サーバモデルで解決している。しかし、WHPの要求は変化し、それらのサイトはより複雑な処理を行うようになってきているため、これらの処理は、より多くの資源を消費するものとなってきている。WHPがより多くの資源を消費するような場合には、通常は、より多くの資源を借用するか、性能を落としてでも資源の容量を変えないで使用せざるを得ない。サイトのサービスへの要求は、時間毎に一定ではないため、顧客は、より多くの資源を借用することよりも、資源の容量を変えずに使用し続けることを選ぶ。これは、資源に対する比較的高い要求は、比較的短い時間に限って発生するという想定に基づくものである。
通常、各専用サーバは、OS(オペレーティングシステム)のインスタンスを実行している。しかし、各専用サーバでのOSの実行には、OSの各インスタンスに対して必要とされる比較的多くの資源量を必要とする。
以下では、「コンピュータシステム」という用語は、複数のサービスを実行する複数の仮想専用サーバをホストする一つのサーバを指すものとする。ここでは、仮想専用サーバの各々は、コンピュータ資源の大部分を利用している。
このようなコンピュータシステムでは、仮想専用サーバは、実際には、コンピュータシステムのインターフェースのエミュレーションとなっており、このエミュレーションでは、リモートクライアントが、そのシステムのユーティリティとプログラムとにアクセスするものとなっている。以下では、この仮想専用サーバを、VDS(Virtual Dedicated Server)と呼ぶ。複数のVDSは、単一のホスティングコンピュータシステム上で、同時に実行することができる。
「アカウント」という用語は、特定のユーザに割当てられたマシン資源のある部分を指すものである。アカウントは、その割当てられた資源を、他のアカウントと共有することができるが、割当てられた量よりも多くの資源を同時に利用することはできない。ユーザ、ドメイン、VDS、サービス、特定のプロセスまたはプロセスグループに対して、またはマシンの資源の他の適当なユーザに対しては、一つの「アカウント」を割当てることが可能である。
アカウントの資源消費を制限するための既存の方法の一つとしては、計算機資源を静的に分配して利用する方法がある。運営コンピュータの資源は、仮想コンピュータの間で、静的な方法で、分配される。この方法では、例えば、実際のコンピュータを、10個の同一の仮想コンピュータに分割し、たとえ一つの仮想コンピュータだけが運用されたとしても、そのシステム資源の10%づつを、各仮想コンピュータに割当てることになる。動的な資源割当てでは、複数のVDSが同時に動作した場合でも、(あらかじめ定められたパラメータに応じて)各VDSに適切な資源割当てを行い、(全てのVDSが同時に動作したとしても)各仮想コンピュータがより高い性能を果たすようになる。従って、動的な資源割当ては、ユーザの観点からは、より高い性能をもたらすものとなる。動的な資源割当ては、異なるサービス、異なるユーザなど、コンピュータ資源の任意の消費者が利用できるものとなっている。
コンピュータシステムの資源は、予算、空間的な制約など、いくつかの因子によって制限される。コンピュータシステムの資源は、とりわけ、中央演算処理装置(CPU)の使用量、メモリアドレス空間のサイズ、データの格納容量などを含んでいる。複数の消費者により利用されるコンピュータシステムは、消費者がWHPであるか、通常の消費者であるかにかかわらず、その消費者の各々に対して、コンピュータシステムの各消費者と対応する資源の所有者との間で取り決められた契約または合意に従い、少なくとも、予め定められた割合の資源を提供する必要がある。WHPは、全ての消費者が同時に最大の資源を要求する確率は低いという仮定に基づき、実際に利用可能な資源よりも多くの資源を提供することが可能である。従って、異なる消費者に対して、予め定められた割合の資源を利用可能とするためには、予め定められた資源に応じて、特定の消費者が利用可能となる資源を制限する必要がある。複数の消費者をもつコンピュータシステムにおいて、各消費者に対する資源を制限するための他の理由としては、以下のものがある。
− もし、資源が予め予約可能な種類ではない(すなわち、非予約可能な)場合には、コンピュータシステムの適切なプロセスが、資源への要求があった場合には、これらの資源を解放する必要がある。例えば、コンピュータシステムのメモリ、または適切な格納ディスクは、通常は、非予約可能な資源である。多くの数の資源を割当てることにより、以前の資源が解放される前に、プロセスがその資源を共有できないようにすることができる。残念ながら、一旦割当てられた資源を解除することは比較的複雑なものとなる。
− もし、資源が予め予約可能な種類である(すなわち、予約可能な)場合には、各タイムスライスでは、これらの資源は、資源要求中のプロセスの間で、分配される。例えば、通常、CPUは、予約可能な資源である。予約可能な資源を扱う際には、資源割当てが各タイムスロット毎に最初から行われるため、利用されていない資源を扱う状況としては、2つの可能性がある。一つは、当初の割当量よりも多くのプロセスを確保することにより、ユーザは、それ相当の性能を扱えるようになる。しかし、追加された消費者が、コンピュータシステムに接続し、資源割当て分を利用し始めると、このシステムに接続されていた以前からの消費者は、それらの全体としての性能が悪化することになる。もう一つの状況は、最初から資源を制限することにより、このような状況を回避できるものの、エンドユーザの観点からは好ましくない。
− 資源が予約可能であり、コンピュータシステムの所有者が、その消費者の各々に確保された資源量に応じて、異なる課金を施したいと希望する場合には、結果的に、所有者は、各消費者に割当てられた資源のみに、消費者の利用を限定しようとする。
「Ensim Corporation」などのように、コンピュータ内に、「静的な仮想的コンピュータ」を設ける企業がいくつか存在する。「静的な仮想的コンピュータ」の各々に、CPU、メモリの所定の量が割当てられる。しかし、他のユーザがそれらに割当てられた資源を使っておらず、利用可能な資源があるからといって、コンピュータの所有者は、仮想的コンピュータに対し、それに割当てられた資源以上のものを利用させることはできない。
さらに、静的な仮想的コンピュータでは、例えば、WHPがコンピュータ資源を2つの異なる再販業者(reseller)に割当て(すなわち、各再販業者に対して、資源の50%ずつを割当て)、一方の再販業者が、それに割当てられた部分を2つのユーザに供給し、各ユーザに対して(再販業者自身に割当てられた部分の)75%を保証しようとした場合には、このような階層的な割当ては不可能なものとなる。その理由は、各ユーザに対して割当てられた資源の25%は、保証された資源よりも少なく、他方の再販業者の他のユーザへの影響を考えると、37.5%では多すぎて、これは消費者が利用できない資源量となる。
従来の技術では、コンピュータシステムの資源を割当てる通常の方法は、予め定めら得た資源量を、各消費者に割当てるというものである。しかしこの方法には、いくつかの欠点がある。例えば、比較的多くの消費者をもつコンピュータシステムでは、新たに消費者をシステムに追加する際には、他の全ての消費者に対して、資源の再割当てが必要になる。例えば、コンピュータシステムの所有者が、その消費者すべてに、平等にシステム資源を分配しようとする場合、例えば、10の消費者がいる場合、所有者は、システム資源の10%を各消費者に割当てる(つまり、システム資源の100%を全ての消費者に割当てる)。しかし、もし所有者が、システムに消費者を追加しようとする場合には、新たに追加された消費者にも資源が利用可能となるように、既存の10の消費者の各々に割当てた資源を更新する必要がある。もし、多くの(例えば、100、1000、またはそれ以上の数の)クライアントがいる場合には、このタスクは、膨大な時間を要し、もしくは、システムのステータス変化をもたらす毎に、全ての消費者に対する全ての資源の割当て中に、ユーザエラーを生じさせやすいものとなる。一つ以上の消費者に対して、他の消費者よりも多くの資源を割当てる場合には、資源を再配分するタスクは、複雑度を増すことになる。もし、コンピュータシステムの所有者が、「再販業者」(すなわち、他の消費者に資源を配分できる資格をもっている消費者)を抱えている場合には、より複雑度が増すことになる。通常は、アカウントが消費する量と、それに対する割当量との比較が行われる。しかし、ソフトウェアは、資源を利用する各処理のシステム資源を再計算する。例えば、比較のためにチェックされる資源がメモリである場合、メモリ割当ての前にのみ比較が行われるが、この方法では、割当てが事前に行われるため、好適な割当てとは言えない。
上記のすべての方法は、複数の消費者を有するコンピュータシステムの資源を効率的に割当て管理する問題に対して、満足のゆく解決策を提供するものとは言えない。
本発明の目的は、サービスであるかユーザであるかにかかわらず、各消費者の資源消費を個々に制限する方法を提供することにある。
本発明の目的は、消費者間で資源を割当てるためのより良い方法を提供することにある。
本発明の目的は、所望の階層をもたせて、資源を割当てる方法を提供することにある。
本発明の他の目的は、動的にかつ要求に応じて、割当て資源を計算する方法とシステムを提供することにある。
さらに本発明の目的は、現在の資源割当て状況を消費者が監視できるようにする方法とシステムを提供することにある。
本発明の他の目的と利点については、以下の説明によって明確なものとなる。
発明の概要
本発明は、オペレーティングシステム(OS)により管理され、複数の消費者のアカウントを有するコンピュータシステム中の資源を動的に割当てて管理するための方法に関するものである。仮想メモリアドレス空間の各部分が、必要に応じて、消費者に対する各アカウント毎にスワップファイル中に割当てられる。メモリアドレス空間は、各アカウント毎に制限される。CPU使用量は、各アカウントから要求されたタスク間で分配され、一つ以上の特定の手続きをOSのオリジナルコード中で特定し、仮想メモリアドレス空間の割当ておよび/または制限、および/または、プロセスおよび/または分配されたCPU利用量の数の制限に応じて特定の手続きが動作するように、この特定の手続きを変更することにより、OSのオリジナルコードのセグメントが変更される。
好ましくは、メモリアドレス空間および/または分配されたCPU使用量の割当ておよび/または制限の変更に応じて、特定の手続きは、動的にその動作を変更する。要求された処理の決定は、シンボルテーブルに格納されている要求された処理の名前を取得すること、または、要求された処理のバイトシーケンスを識別することにより可能となる。
特定の手続きを変更するためには、割当てられたメモリアドレス空間を取得し、割当てられたメモリアドレス空間中で実行コードを生成する。オリジナルコードからコードセグメントをコピーし、コピーされたコードの開始にあるコマンドラインを保存し、さらに、オリジナルコード中の次のコマンドが開始するまで、コマンドをスキップする。オリジナルコードの開始にあるコマンドラインは、生成されたアプリケーションの開始までスキップし、生成されたアプリケーションの未使用バイトに無演算バイトを付加することにより置換される。空白のバイトが、この無演算(NOP)データとなる。
資源の消費するための呼び出しが特定の消費のアカウントによるものでない時には常にオリジナルコードを呼び出すことにより、且つその関連パラメータによってアカウントを識別することにより、メモリアドレス空間の制限が実装される。アカウントにより資源の消費が要求される毎に、割当てられたメモリアドレス空間に応じて、アカウントが、そのクオータ(quota)、またはそれ以上のレベルのクオータを上回ることはないことが確認される。アカウントに関連した演算の結果は、その演算が成功する毎にチェックされ、アカウントおよび/またはアカウント以上のレベルの消費データが更新される。特定されるパラメータは、ユーザID、グループIDまたはプログラム名である。
プロセスの数を制限する際には、アカウントにより資源の消費が要求される毎に、割当てられたプロセス数に応じて、アカウントが、そのクオータ、またはそれ以上のレベルのクオータを上回ることはないことが確認される。アカウントに関連した演算の結果は、その演算が成功する度にチェックされ、アカウントおよび/またはアカウント以上のレベルの消費データが更新される。識別されるパラメータは、ユーザID、グループIDまたはプログラム名である。
アカウントの資源割当方針に従って、アカウントにより要求されないCPU資源は、他の要求中のアカウント資源に動的に割当てられ、アカウント毎に最適な共有割当となるように、利用可能なCPU資源が、すべてのタスク間に分配される。タスク間のCPU使用量の分配は、実行される候補となるタスクのカウンタ計算を修正することにより得られ、タスクに対応づけられたアカウントのクオータにより各タスクが制限される。
カウンタ計算の変更は、カウンタの計算を行う関数に割り込みをかけることにより行われる。そして、ユーザアカウントに対して保証された値に基づき、タスク毎の所望のカウンタ値を計算し、同一のアカウントに所属する複数のタスクがある場合には、常に、カウンタ値が計算される際に、クオータに従ってカウンタの正しい値を保持する。タスクのカウンタ値は、これらの内部割当が使用量に応じて現在行われている間、アカウントに応じて合計される。各プロセスの動作に関する情報は保持され、最終時間の間にアカウントが受け取ったCPU資源の量が、ティック(tick)ごとに計算され、計算された量は、アカウント上のレベルに加えられる。アカウントまたはアカウント上のレベルが、その割当て以上のものを受ける際には、常に、次のCPU割当が行われるまで、タスクのカウンタはゼロに減らされる。次に実行すべきタスクが決定される際は、常に、次に実行すべきタスクの選択が有効であることが確認される。
本発明の、上記および他の特徴と利点は、以下の図面を参照して、その好適な実施例の以下の例証と制限を加えない詳細な説明によって、よりよく理解することができる。
詳細な実施例
コンピュータシステムにおいて、消費者に割当てられた資源を上回ることがないようにするためには、各消費者に対してこのシステムから利用可能となっているメモリ、プロセス数およびCPUの使用を制限することが必要である。
以下で説明する実施例は、次の用語を明確に定義することにより、より明確なものとなる。
○ プログラム カーネルがメモリ上に読み出し、実行することが可能な、実行可能ファイル。
○ プロセス プログラムの実行インスタンス。UNIX(登録商標)の各プロセスは、プロセスID(PID)と呼ばれる一意の数値の識別子を持つことが保証されている。
○ スレッド プロセス中の単一の逐次制御フロー。従って、一つのプロセスは、複数の同時実行されるスレッドを有することができる。Linuxでは、各スレッドは、独自のPIDを有している。
LinuxOSでは、プロセスを生成する関数は、do_forkである。プロセス終了を扱う関数は、exitの種類のものである。単純な実装方法としては、「root」アカウント(UID=0)が所有するプロセス以外のアカウント毎のプロセスの初期化と終了に応じて、システムが増加、減少させるユーザ毎のカウンタ値を保持する方法が考えられる。アカウントが、そのクオータを上回るような新しいプロセスを初期化しようとした場合には、システムは、「fork」(または、「vfork」、「thread_create」)関数の実行に失敗する。この場合、階層的な意味(セマンティック)は、メモリ管理のものと同一である。
以下では、コンピュータシステムにおける、特定のアカウントのメモリ消費を制限するための構成について説明する。まず始めに、明確化のために、Unix、Linux等のオペレーティングシステムにおけるメモリ割当の方法を説明する。
各実行アプリケーションは、メモリエリアの一部分を取得し、その部分からアプリケーションは実行または動作する。メモリエリアは、以下、メモリアドレス空間と称し、特定の実行アプリケーションの所定のデータを含んでいる。メモリアドレス空間は、各アプリケーションに対して固有の仮想メモリの一部分である。各アプリケーションは、独自の仮想メモリの領域を持っているが、この領域は、通常は、他のアプリケーションのアドレス空間やまたは、アプリケーションが実行される物理的なコンピュータの容量とは無関係なものとなっている。
通常、メモリは、「ページ」に分割され、各ページは、メモリ管理アプリケーションによって取り扱われる基本ユニットとなっている。メモリ管理は、コンピュータの物理メモリ、または、ハードディスク(の「スワップ」といわれる領域)に、「ページ」を格納する。「スワップ」は、格納メモリとして動作し、通常、すべてのプログラムに対して、十分な物理メモリ空間がない場合に、アプリケーションのデータ部をハードディスク上に一時的に退避する。スワップは、複数のファイルの組、または、特定のディスクパーティション、あるいは、それら両者からなっている。以下の理由から、情報は、ハードディスク上(の「スワップ」内または実ファイル中)に格納される。
− メモリ管理は、現状で必要とされる他のページについては、相対的に関連性の少ない「ページ」を、(応答の速い)物理メモリ上の空き格納空間である「スワップ」に転送する。メモリ管理は、アプリケーションによって変更される可能性のあるページのみを転送し、一方、他のページについては、それらの初期アドレス(これについては、後に説明する)から復帰させることが可能である。
− ページは、プログラムの書き込み可能な領域の一部分であるが、プログラムは、それを変更することはできない。このような場合、ページは、それが次に必要となった際に、ディスクからロードされる。
− ページは、アプリケーション「コード」の部分(すなわち、アプリケーションが実行するコマンドラインであるが、アプリケーションのデータ部分ではない)である。アプリケーションコードは、アプリケーション自身によっては変更することはできないため、もし、メモリ上からページが削除されれば、メモリ管理は、それを、アプリケーションファイルから再び取得することができる。
− ページは、アプリケーションの「読み取り専用」データの一部分である。「読み取り専用」データは、アプリケーション自身によっては変更することはできないため、もし、メモリ上からページが削除されれば、メモリ管理は、それを、アプリケーションファイルから再び取得することができる。
− ページは、Unixの「mmap」が行なわれたファイルのような、オペレーティングシステムのファイルの一部分である。「mmap」関数は、「mmap」に渡された変数で特定されたファイル(または、他のオブジェクト)からのオフセットから開始する「長さ(length)」バイト、たとえば、変更可能なファイル記述子(fd)を、メモリ内の「start」パラメータなどの「mmap」関数に渡されるパラメータのアドレスにマッピングする。
− マッピングの後、プログラムは、プログラムが割当てたバッファ中の情報をすぐには読み取ることを必要とせず、そのメモリ内の任意の部分にあるかのように、ファイルをアクセスすることが可能となる。この場合、ページをハードディスクから読み出すことが可能となるので、ファイルはアプリケーションのメモリの一部分にマッピングされ、スワップファイル中のページを保持する必要はない。
本発明の一実施例によれば、消費者のアカウントに割当てられたメモリを上回ることを避けるために、このアカウントのスワップファイル上で、割当てられたメモリアドレス空間が制限される。一方、アプリケーションにより使用される物理メモリは制限されないため、これにより、オペレーティングシステムが動作し、どのページをスワップさせるべきかを決定する方法と干渉することを防ぐ。LinuxやUnixなどのオペレーティングシステムでは、プログラムが利用するメモリの量は、以下の一つ以上の方法により影響を受ける。
− プロセスが生成された際の初期メモリ割当
− 利用可能な全てのメモリを用いた一つ以上の要求による、メモリの拡張(例えば、Unixの関数「malloc」は、より多くのメモリをプロセスに割当てることをOSに要求する。OSは、プログラムが要求するよりも多くのものを割当て、後に、プログラムがより多くのページを要求するような場合を扱えるようにしている。これは、OSのメモリ管理の一部である。関数「malloc」は、C言語とC++言語の標準関数であり、Windows(登録商標)のようなOSでも利用可能である)
− ファイルを特定のメモリアドレス空間にマッピングする、(例えば、関数「mmap」を用いた)ファイルへのマッピング。
− 共有メモリ領域の生成(例えば、関数「shmget」を用いる。関数「shmget」は、あるプログラムについて、ある量のメモリをOSに要求でき、そのプログラムに対して識別子を付与する。他のプログラムも同様に、この付与された識別子を用いて、このメモリを使うことができる。関数「shmget」は、プロセス間で情報を共有するための構成である。
以下で説明するように、上記の全ての方法と他の可能な方法と、オペレーティングシステムのカーネル中の比較的少ない数の関数にマッピングされる。
例えば、カーネルバージョン2.2のLinuxでは、全ての操作は、カーネル中の関数「do_mmap」にマッピングされる。関数「do_mmap」は、以下のパラメータを得る。
− アクセスモード・パラメータ−読込み/書込み(RW)か、読込のみ(RO)かを指定する。もしROであれば、メモリは、読込のためだけにアクセスすることができ、この場合、情報はメモリの元の格納位置から取り出されるため、スワップ空間は割当てられない。この場合、本発明の方法は、なにもしない。
− マッピング・パラメータ−RWの場合、プライベート使用か共有かを指定する。共有の場合、共有される記憶装置の生成者のみが、当該メモリに割当てられる。プライベートという用語は、特定のプログラムだけがアクセスできるメモリ、例えば、特定のプログラムが実行開始したときに割当てられたメモリ、または「malloc」されたメモリを指すものである。共有という用語は、例えば、共有オブジェクトのローディング中にプロセス間で共有されるものを指すものである。(共有オブジェクトの例としては、ダイナミック・リンク・ライブラリ(DLL)がある。DLLは、小さいプログラムの集まりであり、個々のプログラムは、Windows2000環境のコンピュータで、実行中のより大きなプログラムから必要となった場合に呼び出される。
関数「do_mmap」は、Linuxでの一例であり、このような動作は、他の関数にも同様に適用される。
従って、スワップ空間の割当てを含むような状況のみで、アプリケーションは、RWのプライベートメモリを要求する。
「do_mmap」などの関数が所定のメモリアドレスを返すが、ページが使われるまでは、物理メモリ(およびスワップの)メモリにページが割当てられないことは重要な点である。割当てはページ単位で行われるので、プログラムは、100ページを割当てて、それらのページの中の(例えば、メモリの開始と終了にある)2ページにのみアクセスが可能である。その場合、2ページのみがメモリ中に割当てられ、従って、これらがスワップに移動できることになる。
本発明の一実施例によれば、ページを割当てる際には、全てのページを用いて、メモリ使用量の計算を行うものと仮定している。本発明の他の実施例によれば、ページが初めて使用される毎に、実際のメモリ消費をチェックする。しかし、この方法では、有効なアドレスにアクセスしている間には、プログラムの動作を止めることになり、OSの動きに従わないものとなってしまう。プログラムが正常に動作できるようにするために、本発明の実施例により制御されていることを意識させないように、本発明は、OSの動きに従うものとする。
OSとの干渉
従来例では、オペレーティングシステムの動作を変更するためのいくつかの既知の方法がある。
− オペレーティングシステムのソースコードを変更する方法。ソースコードは常に利用可能であるとは限らないため、この方法には問題がある。もしソースコードが利用可能な場合には、ソースコードを常に保守する必要があるため、ソースコードを変更する解決方法は、配布されうるコードのすべてのバージョンを更新する必要がある。
− コード中の「hook」を使う方法。通常、OSは、利用可能な「hook」を備えている。これらのhookは、ユーザが定義した特定のモジュールをOSが起動する場所であり、そこではOSは特定の処理を実行する。しかし、「hook」は、OSの一部として実装する必要があるため、OSの製作者がその処理を特定した場所でのみ利用可能となる。
本発明の一実施例では、コードの変更を行わない。それに代えて、以下に説明するように、カーネルのコード中で、必要となる手続を決め、これを適切なコードに変更する。
必要な手続きの特定
必要な手続きはカーネルコード中に存在し、カーネル中でその場所を特定は、例えば、適切なシンボルテーブル中に格納された必要な手続きの名前を用いて行う。もちろん、必要な手続きは、他の方法で決めることも可能であり、例えば、関数が「Exportされない」場合には、その関数等の特定のバイトシーケンスを決めるための構成を利用することも可能である。
必要な処理の変更
図2は、本発明の位置実施例による、必要な手続きの変更の概略を示した図である。必要な処理の変更(すなわち、元のコードの変更)は、以下の手順で行われる。
− 以下で述べるように、例えば、Linuxのカーネル2.2の「insmod」プログラムを用いて、全ての関数をロードする。
− 新コード21により用いられるメモリアドレス空間の必要な領域を割当てる。
− 割当てられたこの領域中にコードを生成する。このコードは、コマンド列(すなわち新コード21)であり、以下に述べるロジックを実行する。
− コピーされたコード22の始めのコマンドライン保持し、Originalコード20の次のコマンドの開始にジャンプする。
− Originalコード20の始めのコマンドラインを、新コード21の開始へのジャンプに置き換え、無演算(NOP)を表すバイトを、適切なコマンドの終りまで付加する。例えば、関数が、各々4バイトからなる3つのコマンドから始り、「ジャンプ」が6バイトから構成されている場合、「ジャンプ」によって意図しないコードを実行することがないように、2つのNOPが付加される。
新コード21では、コピーコード22中のコードを呼び出すことにより、オリジナルコード20を呼び出すことができる。オリジナルコード20は、実際の処理を実行する。この処理は、プログラムの情報や、カーネル中のパラメータや、割当てを行うために必要な他の処理を変更することによる、メモリ割当て、CPU割当て、他の適切な論理割当てなど、所定のシステムモジュールのサービスである。本発明の一実施例によれば、オリジナルコード20は、新コード21とは独立して実行される。オリジナルコード20の実行は、新コード21からコピーコード22を呼び出すことによって得られる。コピーコード22は、オリジナルコード20を呼び出し、実際の論理割当て(例えば、メモリ割当ておよび/またはCPU割当て)を行う。コピーコード22は、オリジナルコード20を呼び出すことだけができ、それは、オリジナルコード20のコピーは含まない。これは、比較的大きな容量を持つオリジナルコード20を重複して格納することを防ぐために必要なことである。オリジナルコード20を呼び出した後、コピーコード22は、新コード21に戻る。その時点で、新コード21は、実行された割当て処理の結果とその関連処理とが、良好なものであることを検証する。新コード21が検証を終えた後、割当て処理の結果が、オリジナルコード20中のコードを呼び出したプログラムに戻される。
本発明の一実施例によれば、メモリアドレス空間上で、コンピュータシステムによって消費される資源の制限を実装する方法は、以下に示すものとなる。
− 資源を利用するための呼び出しが、特定の消費者のアカウントによらないものである場合には、オリジナルコード20に呼び出しがなされる。アカウントの識別情報は、ユーザID,グループID、プログラム名など、いくつかのパラメータを用いて得られる。
− 資源を消費するための呼び出しがアカウントによるものである場合には、メモリを割当てることにより、アカウントが、そのクオータ、またはそれ以上のレベルのクオータを上回らないことを保証する。アカウントが、そのクオータを上回る場合には、実行コマンドは、その操作を行なわなくてもよい。
− 実行結果をチェックし、実行結果が良好となる毎に、特定のアカウント(またはそれ以上のレベルのアカウント)に関して必要となる情報を更新する。
本発明の他の実施例によれば、オリジナルコード20は、新コードで置き換えられる。好ましくは、これに限定されることはないが、新コードは、オリジナルコードのいくつかを含んでいる。この実装は、新コードにメモリを割当てるステップと、オリジナルコードの開始を、新コードに対して「jump」処理で置き換えるステップとを含んでいる。新コードは、オリジナルコードを完全に無視するために、「Return」処理で終了することが好ましい。
どの実装方法を用いるかの判断は、実装する者に委ねられており、この判断は、オリジナルおよび新コードの容量、両者の差、個人的な好みなど、様々なパラメータに従って行われる。
本発明の一実施例によれば、メモリ消費を正しく制限するためには、途中でなんらかのコンテキストスイッチを行うことなく、上述したすべての段階を経ることが必要である。コンテキストスイッチという用語は、OSが一つのプロセス実行を停止し、他のプロセスの実行を継続している段階を指すものである。その後、停止状態にあるプロセスに戻り、そのプロセス実行を継続する。その他に、同一のアカウントの2つのプロセスが、両方のアカウントがともに正規である必要性は問わないが、同時に演算を行い、割当てが正規のものであるという結果に達するようにしてもよい。例えば、Linuxでは、カーネル中のコードは、コンテキストスイッチを行うことなく、単一スレッドの環境で実行される。
新プロセスが生成された際には、そのプロセスを生成したプロセスと同一のページを継承し、それ自身の用途のために、ページの変更を開始する。本発明の一実施例によれば、このような場合は、追加のシステムコール(例えば、UNIXでの「fork」、「exec」など)に割り込みをかけ、コマンドに渡される指示値(すなわち、フラグ)に従って、用いられたメモリを増加または減少させることにより対処する。
例えば、Linuxは、読取り専用として検索されたページを変更し、読み取り/書き込み可能としてアクセスできるようにしている。この処理は、適切なシステムコールを用いて実行される。このようにして、アプリケーションは、実際に要求したものより多くのページをスワップ領域で使うことができる。
実際のスワップ割当ては、特定のページが変更された際に、実行される。従って、プログラムは、100ページを変更のために利用することを要求できるが、その中の2ページのみを変更することが可能である。結果として、2ページのみが、スワップアドレス空間に保持され、他のページは、それらの元の場所から検索される。通常、プログラムは、正規のコマンドを実行している間は、メモリアドレス空間がなくなることはないため、プログラムは、要求した全てのページを用いることになると仮定できる。すでに上述したように、スワップ割当ての実行は、メモリの割当てと似たものとなる。
前のレベルのノードは、資源を過剰に割当てることが可能であるが、全ての後のレベルのノードの実際の資源使用は、前のレベルのクオータを上回ることはできない。
本発明の一実施例によれば、資源の利用の比較的迅速な計算が、カーネルのメモリアドレス空間中でのアカウントの階層構造を表すツリー形式を用いることにより行われる。
各アカウントに対して、その現状の割当てとそのクオータとが、カーネルメモリアドレス空間に保存されている。従って、割当て要求を処理する際には、現状の割当量と要求されたメモリとの和と、アカウントの割当量とを比較し、もし、その和が、その資源を上回る場合には、そのアカウントより上のレベルについて、同様の比較を行う。
本発明の一実施例によれば、以下に説明するアカウントの階層構造により、各アカウントを独立に扱うことなく、比較的多数のアカウントの管理が可能となる。
図1は、本発明の一実施例による、複数の消費者を有するコンピュータシステムにおける、資源の階層的な割当ての概略を示したものである。ブロック10は、コンピュータシステムの全資源(すなわち、100%)を表す。ブロック11から14(すなわち、コンピュータシステムのノード)は、コンピュータシステムの各消費者の(パーセント表示での)割当て資源量を表す。メモリ、CPUなど、所定の資源は、階層的なツリー形式に分割され、各レベル(すなわち、レベル0、レベル1およびレベル2)が、その下位レベルのものに対して、100%のクオータを提供するものとなっている。例えば、レベル1のブロック12で表された消費者に割当てられた資源は、コンピュータシステムの全資源の20%とする。しかし、ブロック12に割当てられた資源である20%は、レベル2のブロック16と15に対して割当てられる100%の資源に相当する。本発明の他の実施例によれば、資源を一定値として割当て、パーセント(比率)で割当てないことも可能である。この一実施例から他の実施例への変換は、当業者にとっては、自明なことである。計算の簡単化のため、計算アルゴリズムで用いる値は、絶対値とし、比較演算のコストを削減することが好ましい。
各レベルでは、各ブロック(すなわち、ノード)は、システム資源における一定のクオータを有するものとなっているか、特定のグループの一部を含むものとなっているかのいずれかである。各グループのクオータは、他のグループに対して相対的に定義される。例えば、コンピュータシステムが、3つの消費者グループ(すなわち、ブロック11から13)を有している場合には、グループ12の各メンバーは、グループ11のメンバーの2倍の量の資源を受け、また、グループ13の各メンバーは、2番目のグループの2倍の量の資源を受けるものとなる。
本発明の一実施例によれば、再販業者と非再販業者という、2種類のグループが存在し、各種類は、異なる利用形態を指すものとなっている。再販業者のグループでは、資源の100%をいくつかの再販業者の間で分割することができ、各再販業者は、それ自身に割当てられた資源を他の再販業者(またはユーザ)に分割し共有可能となるが、これらの共有割当てについては、特定のレベルの資源を、その上位レベルで消費される資源に影響を与えずに、余分に再販することが可能となっている。非再販業者のグループは、特定のレベルでのみ用いられる。3つのグループがあり、各グループには、simple,medium,largeの異なる重み付けがなされている場合を考える。ここでは、各リソースにおける特定の量を保証することは好ましくない。むしろ、ここでは、3つのグループ間の関係を定義することが好ましい。この場合、アカウントを各グループに付与し、全アカウントとそれらに従う各種のアカウントとに従って、アカウント毎の資源の計算を行う。例えば、値がそれぞれ1、2、および4である場合には、
Figure 2005534116

となる。
本式により、パラメータXの値が求まり、これから各グループに割当てる資源が得られる。アカウントが追加される毎に、パラメータXを再計算し、それに応じて各種のアカウントを更新する。この方法は、この計算の実行とアカウント毎の更新とをユーザに対して要求することに比べて、容易なものである。
本図は、再販業者の場合について説明したものである。グループの特性は、100%で、いくつかのアカウントにより示されており、各アカウントは、その種類を示するものを有している。
データセンタ16は、30%のシステム資源を一つのクライアントに割当てて、グループ11から13には、各々一つのメンバーが含まれている(すなわち、レベル1には、全部で4アカウントの消費者がいる)と仮定する。グループ11のメンバーがX%の資源を受ける場合には、全資源は、
(数2)
30+X+2X+4X=100%
となる。
従って、グループ11のメンバーは、10%を受け取り、グループ12のメンバーは、20%を受け取り、グループ13のメンバーは、40%を受け取る。
本発明の本実施例によれば、追加のアカウント(すなわち消費者)を追加し、上述したように、グループ間の重み付けなどの予め定められたパラメータに従って、計算された資源の量は、自動的に更新することができる。さらに、これにより、いくつかの階層レベルが可能となる。例えば、グループ12のメンバーが、それの割当てられた資源を、2つの下位アカウント14、15と共有したい場合には、2つの下位アカウント14、15の各メンバーは、全システム資源の10%を受けることができる。各下位アカウント14、15は、これらの上位レベルのグループ12から、割当てられた資源の20%のうち半分(50%)を受けることができる。
さらに、(各レベルの)資源の所有者は、管理できる全てのアカウントに割当てられた共有資源を全て使い切るような場合はないと仮定した場合、過剰販売(oversell)、すなわち、その割当て資源の100%を越える量の販売が可能となる。しかし、コンピュータシステムは、使う資源が該当のレベルで100%を上回るような状況を回避することができる。例えば、2つのアカウントがあり、各々50%の資源割当てとし、一方のアカウントは2つの下位アカウントを有し、各々はその上位アカウントの60%が割当てられているとした場合、下位アカウントの資源割当ては30%を上回ることができる。しかし、全てのアカウントがアクティブである場合には、2つのアカウントは共に50%を上回ることはできない。
もちろん、パーセント表示を、人間のオペレータは、簡単に管理することができる。アルゴリズム中の値は、絶対値として保存される。
例えば、資源の所有者は、過剰販売を許すかどうか、さらに、その過剰量をどれほどにするかを決定することができる。しかし、本例によれば、過剰販売がある場合には、所有者は、保証された資源を保持できるとは限らないため、正規のルールを守ることは所有者の責任となる。
以下では、コンピュータシステムにおける、特定のアカウントのCPU消費を制限するための機構について説明する。CPU消費の制限は、上述したように、カーネルのコード中の必要な手続きを特定し、それを好適なコードに変更することにより行われる。
本発明の好適な実施例では、CPU使用量は、各アカウントにより要求されたタスク間で分割される。タスクの分割は、CPUにより実行する必要のあるプロセスのスケジューリングに基づき行われる。スケジューリングは、OSにより制御される。説明を明確にするため、LinuxOSを例にとり、プロセスのスケジューリングを説明する。しかし、このプロセスのスケジューリングの原理は、他のOS(オペレーティングシステム)に対しても同様なものである。
Linuxでは、実行する必要のある各プロセスは、次の値を持っている。それは、スケジューリングのポリシー、スケジュールグループ中での優先度、そして良好な値である。現状のLinuxでは、以下の3つのスケジューリングの原則がサポートされている。それは、先入れ先出しスケジューリング(SCHED_FIFO)、ラウンドロビンスケジューリング(SCHED_RR)、そしてデフォルトのLinux時分割スケジューリング(SCHED_OTHER)。これらのスケジューリングの意味を、以下説明する。
LinuxOSのスケジューリングについての下記の説明は、以下で説明するCPU消費を制限する構成をよりよく理解する上で、基礎的な知識となる。
スケジューラは、どの実行可能なプロセスが次にCPUで実行するのかを決定するカーネル部分である。Linuxスケジューラは、3つの異なるスケジューリングのポリシーを提供しており、1つは、通常プロセスに関するものであり、残り2つは、リアルタイムアプリケーションに関するものである。静的な優先度の値、sched_priorityが、各プロセスに付与され、システムコールを介してのみこの値が変更される。概念的には、各プロセスに対し、カーネルは、リアルタイムプロセスに対して静的な優先度の値に等しく、時分割プロセス(通常プロセス)に対する実際のCPU使用量と、静的な優先度の値とから求められた、動的な優先度の値を維持する。次に実行するプロセスを決定するために、Linuxスケジューラは、最も大きい動的な優先度の値をもつ空でないリストを探し、このリストの先頭にプロセスを登録する。各プロセスに対し、スケジューリングの原則は、同一の静的な優先度の値をもつプロセスのリスト中のどの場所に当該プロセスを挿入し、そのプロセスをリスト中でどのように移動させるかを決定する。
Linuxでは、SCHED_OTHERは、多くのプロセスで利用されるデフォルトの汎用の時分割スケジューラのポリシーであり、SCHED_FIFOとSCHED_RRとは、実行可能なプロセスを選択する上で正確な制御を必要とする特別なリアルタイムアプリケーションで用いられる。SCHED_OTHERによりスケジューリングされるプロセスには、静的な優先度の値0が付与され、SCHED_FIFOまたはSCHED_RRによりスケジューリングされるプロセスには、1から99までの範囲で静的な優先度の値が付与される。
特権を有するプロセスのみが、0よりも大きな静的な優先度の値を持つことになり、これにより、SCHED_FIFOまたはSCHED_RRの下でスケジューリングされる。システムコールであるsched_get_priority_minおよびsched_get_priority_maxを用いて、システムに合致するPortable OS Interface that based on Unix(POSIX)において有効な優先度の値の範囲を見つけることができる。
全てのスケジューリングは、プリエンプティブなものである。もし、より高い静的な優先度をもつプロセスが、実行可能な状態である場合には、現状のプロセスはプリエンプトされ待機リスト(wait list)内へ戻される。スケジューリングのポリシーは、同一の静的な優先度の値をもつ実行可能なプロセスのリスト内での順位を決定するだけである。
SCHED_FIFOは、0より大きな静的な優先度をもつものに適用される。これは、SCHED_FIFOプロセスが実行可能である時に、常に、現在実行中の通常のSCHED_OTHERプロセスを直ちにプリエンプトすることを意味している。SCHED_FIFOはタイムスライスを伴わない単純なスケージュリングアルゴリズムである。SCHED_FIFOのポリシーの下でスケジューリングされたプロセスについては、以下のルールが適用される。より高い優先度をもつ他のプロセスによってプリエンプトされたSCHED_FIFOプロセスは、その優先度のリストの先頭に置かれ、それより高い優先度をもつ全てのプロセスが再び停止すると、直ちに処理を再開する。SCHED_FIFOプロセスが実行可能となると、そのプロセスは、その優先度のリストの最後に置かれる。sched_setschedulerまたはsched_setparamの呼び出しにより、PIDで識別されるSCHED_FIFOプロセスが実行可能である場合には、そのプロセスはリストの最後に置かれる。sched_yieldを呼び出すプロセスは、リストの最後に置かれる。同一の優先度をもつ実行可能なプロセスの待機リストの中では、SCHED_FIFOのポリシー下でスケジューリングされたプロセスは、他のイベントによって移動されることはない。SCHED_FIFOプロセスは、I/O要求によりその実行が停止するまで、または、より高い優先度を持つプロセスによりプリエンプトされるまで、あるいは、そのプロセスがsched_yieldを呼び出すまで、実行を続ける。
SCHED_RRは、SCHED_FIFOの単純な拡張である。SCHED_FIFOについて上述した事項は、各プロセスが最大タイムカンタムだけ実行することが許されるという点を除いて、SCHED_RRに対しても適用される。もし、SCHED_RRプロセスが、タイムカンタムに等しいかそれより長い時間だけ実行されていた場合には、そのプロセスは、その優先度のリストの最後に置かれる。より高い優先度をもつプロセスによりプリエンプトされ、それに続いて、実行プロセスとして実行を再開するSCHED_RRプロセスは、そのラウンドロビン・タイムカンタムの未経過も部分を満了することになる。タイムカンタムの長さは、sched_rr_get_intervalにより求められる。
SCHED_OTHERは、静的な優先度0でのみ用いられる。SCHED_OTHERは、特別な静的優先度の実時間構成を必要としない全てのプロセスに対応したLinux標準の時分割スケジューラである。実行すべきプロセスは、静的な優先度0のリストの中でのみ決定された動的な優先度に基づき、このリストの中から選ばれる。動的な優先度は、良好(nice)なレベル(良好と設定されたもの、または優先度を設定するためのシステムコールにより設定されたもの)に基づくものであり、プロセスが実行可能となっている各タイムカンタムに対して上がるが、スケジューラによる実行を拒むものではない。これにより、全てのSCHED_OTHERプロセス中の良好な進行が保証される。
通常は、ユーザプロセスは、スケジュールのデフォルトタイプに基づくものである。従って、本発明においては、特定のアカウントのCPU消費の制限は、スケジュールのデフォルトタイプに基づくタスクに対してのみ行われる。
スケジュールのデフォルトタイプに属するタスクについては、Linuxのスケジューラは、以下のように動作する。
− (以下で説明するように)必要が生じた場合、スケジューラは、実行する候補となっている全てのタスクを調べ上げ、各々にカウンタを割当てる。このカウンタは、当該タスクが実行される際のティック(tick)の数を保持するものである。その数の計算は、タスクに与えられるティックは、その良好な値(タスクが、最新のタイムカンタムで実行されたかどうかの影響を含む値)に関連して、処理が行われる。
− 各ティック(通常は、1/100秒)毎に、スケジューラは、どのタスクが現状のものであるかを判定し、そのタスクのカウンタを1だけ減らす。もしカウンタが0に到達した場合には、このタスクは現状のカンタムについてそのクオータを終了し、他のタスクが実行される。どのタスクを選択するかはタスクのカウンタ値に基づいて行われ、最大のカウンタ値をもつタスクが選ばれる。ここで重要なのは、実行状態にあるタスクだけが選択され、これは、他の状態にあるプロセスは、何かを待っていて、たとえ、それを得たとしてもCPUを使うことができないということである。
− もし、正のカウンタ値をもつ実行可能なタスクがない場合には、新しいタイムカンタムが開始され、すべてのタスクについてカウンタ値が再計算される。
− タスクが、これ以上CPUを使うことができないような段階に到達する場合もある。例えば、タスクが、ディスク上のファイルにアクセスしようとする場合である。この場合、タスクはCPUの使用を断念し、スケジューラに対して、実行される次のタスクを選択するように要求する。多くの場合、プログラムは、待ち状態となるような多くの個所を含んでおり、実際には、その状態にある時間が長いものとなる。
本発明の一実施例によれば、カウンタを変更して、アカウントのクオータにより、各タスクを制限するようになっている。カウンタの計算を変更するには、以下のように、OSの動作とやりとりする必要がある。
− クオータに応じたカウンタの正しい値を計算した際に、その値を保持する。
− 次に実行するタスクを決定する毎に、次ぎに実行するタスクの選択が有効であることを確認する。このオプションは基本的なものであり、いくつかの場合で、タスクには、(同一のアカウントのほかのタスクが、そのクオータよりも多くを消費している場合には)より少ないCPU資源が与えられるか、(もしアカウントの他のタスクがクオータを要求しない場合には)より多いCPU資源が与えられる。
本発明の一実施例によれば、カウンタ計算の変更は以下のように行われる。
− 「カウンタ」を計算する関数を停止する。
− ユーザアカウントに保証された値に基づき、各タスクについて所望のカウンタ値を計算する。もし同一のアカウントに複数のタスクが属する場合には、アカウントに応じてこれらのカウンタ値の合計を計算し、それらのタスクがこれまでの使用状況に応じてこれらの内部割当てを行う。各プロセスについては、その動作に関する情報、特に、そのプロセスが主にCPUタスクであるか、IOタスクであるかに関する情報を保持する。主にIOタスクから構成されているアプリケーションは、いずれにせよティック全体にわたり、CPUを利用することはないため、CPUタスクに比べて高い優先度が与えられる。(一方、アプリケーションの処理に使われる時間は、それに確保された時間よりも短いものとなっている)。本発明の他の実施例によれば、CPU資源は、全てのタスク間で均等に分配される。このようなカウンタ値の計算は、LinuxOSがタスクに対してアルゴリズムを適用する際に、本発明に従って計算される値を使用できる。
− 各ティック毎に、アカウントが最後に受けたCPU資源の量を計算し(以下を参照のこと)、そのアカウントより上位のレベルに、その計算した値を加える。もしそのアカウント(または、その上位のレベル)が、その割当よりも多くの値を受け取る場合には、タスクのカウンタをゼロに減らし、次のCPU割当てがあるまで、CPUを使用しないようにする。この操作は、CPUを利用する他のタスクがある場合だけで行われ、それ以外の場合には、CPUを利用できなくするようにして、タスクへのCPU割当てのループ(待ち)のみが得られるようになっている。
本発明の一実施例による、CPU使用量の計算方法について、以下説明する。計算方法を拡張するため、計算関数の簡単さとは別に、以下のガイドラインが与えられる。
1.何らかの一定の時間での状態のみを考慮し、長い間アイドル状態であったアカウントが、多くのCPU時間を得ることがないように(すなわち、アイドル状態の時間を補償するように)する。例えば、アカウントが50%のCPU利用率で、そのアカウントが1時間のアイドル状態を続けていた場合、(もし、他のアカウントもCPU資源を必要としているならば)そのアカウントが全CPU資源を得るのは不公平なものとなる。そのアカウントは、その時間の50%のみを得るべきであり、この50%はその時間に渡って一定となるべきである。
2.最近の1秒間で1ティックのCPU資源を持つアカウントが、最近の5秒間に1ティックのCPU資源を持つアカウントとは異なって扱うようにするため、時間経過の構成が必要となる。
本発明の一実施例によれば、どのタスクを実行するかに関する情報が得られ、次に、コンピュータのティックが起こった時にのみ、その計算が行われる。経過したティックの間には、1つ以上のタスクがCPUを利用したかもしれないが、通常は、そういう場合にはならない。例えば、既に実行を開始したタスクが、ディスクからの情報を要求し、その実行中にディスクを停止させると、タスク間の切換えが行われ、ティックの残りの間にCPUが他のタスクに割当てられる。他の実施例としては、タスク間の切り替える関数を停止させた後で、サブティック(sub−tick)のレベルで計算を行うことも可能である。しかし、このような状況は比較的まれなことであり、本計算では、このような状況は考慮しないことにする。
CPU消費量は、アカウントがティックの間にCPU資源を用いたかどうかに応じて、各ティックごとに0または1の値を持つ一組の算術関数を用いて計算が行われる。全ての計算は、ティック以外の任意の時間に行われる。ティック(tick)という用語は、説明を明確にするためだけに使用している。説明のため、同一レベル(すなわち、階層がない場合)には、N個のアカウントが存在するものと仮定する。複数のレベルに対する計算は、上記と同様に行われる。特定のアカウントのCPU使用量を求める関数を、図3に示すが、ここでは、アカウントは、時間t軸の全体にわたってCPUを使うのではなく、限られた時間の間隔でのみ(すなわち、参照符号31および32で示すように、関数値が1の値をもつ時のみ)、CPU資源を利用する。
本発明の好適な実施例によれば、時間経過のファクタを計算するために用いられる関数は、非線形であり、特定のアカウント「i」がCPU時間の割当てを受けてからの経過時間に応じて、CPU時間の重み付けを行う。従って、この時間経過の関数は、次式で与えられる。
Figure 2005534116
特定のアカウント「i」の利用度の関数は、時間経過のファクタを考慮し、結果として、時間tにおける特定のアカウントのCPU使用量を与えるものとなる。利用度の関数は、次式で与えられる。
Figure 2005534116
以下のパラメータ「Ri」は、特定のアカウント「i」に対して消費された資源を定義するものである。「Ri」は、反復値であり、ティック毎に更新される。このパラメータは、時間経過の影響を受けるため、現在アクティブになっているアカウント「j」については、
Figure 2005534116

で与えられ、特定のアカウント「i」(i1j)については、次式で与えられる。
Figure 2005534116
以上のように、このパラメータは、以下の特徴を持っている。
1.合計は常に1である。
2.時間経過の効果がある。
しかし、上記の計算は、ティックごとに、全てのアカウントについての情報を更新する必要がある。(数百、数千のアカウントがある場合には、この計算量は膨大なものとなる。)従って、本発明の一実施例では、本計算により実行される操作数を減らすため、ティック毎に、(1+Δ)を掛け合わせた新しい変数「C」を、次式のように定義する。
Figure 2005534116

ここで、「C」は、全ての数について、全ての値について共通部分である。従って、Riを計算する代りに、Ri×Cの値を計算する。結果として、「C」とRjを変更することだけが必要となり、すべてのRiを求める必要はない。
この新しい値は、カーネルのメモリ中にで維持される。このように、変更されたアカウント「i」の「R」だけを、次式に従って、更新すればよい。
Figure 2005534116
アカウント「k」(ここで、「k」は「i」であってもよい)の実際の資源消費量は、次式で与えられる。
Figure 2005534116
この計算は、(「C」の各値は、常に増加し、その比は極めて小さい値であるため)オーバーフローとアンダーフローとの影響を考慮したものになっている。
計算を行う際には、常に、アカウントとその上位のレベルの消費率がチェックされる。もし、これらの値のいずれかが、保証された値を上回る場合には、スケジューラによる次ぎの資源割当てが行われるまで、タスクはより多くの資源を得られない。
以上、説明したように、スケジューリングアルゴリズムは、タスクの良好値に基づいて、タスクが得ることができるティックの量を決定する。しかし、良好値は、特定のレベル数(例えば、40レベル)を持つものであるため、最大のCPU使用量と最小のCPU使用量をもつタスク間の比の最大値は、40にしかならない。ここで、3つのアカウントがあるものと考え、一つのアカウントはCPUの90%を使って1つのタスクのみを実行し、他の2つのタスクを残りのCPU(10%、すなわち5%づつ)が行い、5つのタスクを各々実行する場合を想定する。この場合、比は1:90であり、この状況は、Linuxのデフォルトの計算によっては扱うことはできない。
本発明の他の実施例では、良好値以外の高レベル計算を行い、Linuxがスケジューリング行う際には、いくつかのアカウントのみを考慮し、他のアカウントは考えない。例えば、上述した場合では、一つのスケジュールの周期の間は、一つの小さいアカウントに全10%を割当て、次のスケジュールの周期の間に、他のアカウントにそれ(10%)を割当てる。同様の構成をアカウント中のタスクに適用し、いくつかのアカウントのみが各時間に実行するようにする。これは、選択されたタスクが、割当てられた全資源を消費することはないために、タスクに保証された資源量を得られないであろう静的な解決方法となる。
本発明の一実施例によれば、スケジューラを変更し、新しいスケジューリングの周期が完了するたびに、ひとつに満たないタスクに、いくつかのティックを割当てるようにする。タスクの累積重みに応じて、タスクが受けるティックの数が与えられる。この解決方法は、動的なものであり、これらのタスクには、応分の割当量が確保される。
タスクごとに、累加重みとなる付加値を与え、スケジューラは、現在の割当てでの、ひとつに満たないティックに割当てるティックの数を知る。タスク選択を行う毎に、スケジューラは、ひとつに満たないティックのタスクに対して、充分な時間があるかどうかを判定し、もし、時間がある場合には、(その重みに基づき)それらのタスクから一つを選択し、そのタスクを実行する。
以上の例および説明は、もちろん例証を目的として与えられたものであり、いかなる方法によっても、発明を制限しようとするものではない。当業者であれば理解できるように、本発明は、上述した方法以上の手法を用いることにより、多様な方法で実施することが可能である。例えば、消費者が、資源の割当て前に、資源割当てのポリシーを監視することも可能であるが、これは本発明の範囲を逸脱するものではない。
図1は、本発明の一実施例における、複数の消費者をもつコンピュータシステムにおける資源の階層的な割当について、その概略を示した図である。 図2は、本発明の一実施例における、OSの動作を変更する一部として、要求された手続きの修正について、その概略を示した図である。 図3は、特定のアカウントによるCPUの使用について、その概略を示した図である。

Claims (16)

  1. オペレーティングシステム(OS)で管理され、複数の消費者のアカウントを有するコンピュータシステムにおいて、資源を動的に割当てて管理する方法であって、
    a)消費者に関する個々のアカウントについて、スワップファイル中に、仮想メモリアドレス空間の各部分を割当てるステップと、
    b)各アカウント毎に前記メモリアドレス空間を制限するステップと、
    c)各アカウントから要求されたタスク間でCPU使用量を分配するステップと、
    d)オリジナルコード中の一つ以上の特定の手続きを決めることにより、さらに、前記メモリアドレス空間の割当ておよび/または制限、および/または、プロセス数および/または分割されたCPU使用量の制限に応じて、実行する特定の処理を変更することにより、前記OSのオリジナルコードのセグメントを変更するステップと、を含む前記方法。
  2. 請求項1記載の方法において、さらに、前記メモリアドレス空間および/または前記分配されたCPU使用量の割当ておよび/または制限を変化させることに応じて、実行する特定の処理を動的に変更するステップを含む前記方法。
  3. 請求項1記載の方法において、要求された手続きを決めることは、シンボルテーブルに格納された前記要求された手続きの名称を取得することを含む前記方法。
  4. 請求項1記載の方法において、要求された手続きを決めることは、該要求された手続きのバイトシーケンスを識別することにより、実行される前記方法。
  5. 請求項1記載の方法において、特定の手続きの変更は、
    a)割当てられたメモリアドレス空間を取得するステップと、
    b)前記割当てられたメモリアドレス空間で、実行コードを生成するステップと、
    c)オリジナルコードからコードセグメントをコピーするステップと、
    d)前記コピーされたコードの開始のコマンドラインを保存し、前記オリジナルコード中の次のコマンドの開始までスキップするステップと、
    e)前記オリジナルコードの開始のコマンドラインを、前記生成されたアプリケーションの開始までスキップするステップに置き換え、前記生成されたアプリケーションの非使用バイトに無演算バイトを付加するステップと、を含む前記方法。
  6. 請求項4記載の方法において、空白バイトは無演算(NOP)データである前記方法。
  7. 請求項1記載の方法において、前記メモリアドレス空間の制限は、
    a)資源を消費するための呼び出しが特定の消費者のアカウントによるものでない時は常にオリジナルコードを呼び出し、関連パラメータにより前記アカウントを識別するステップと、
    b)アカウントにより資源の消費が要求される毎に、前記アカウントは、前記アカウントのクオータまたはその上位レベルのクオータを越えないように前記割当てられたメモリアドレス空間に従って、検証するステップと、
    c)前記アカウントに関連する処理の結果をチェックし、前記処理が成功する毎に、前記アカウントおよび/または前記アカウントの上位レベルの消費データを更新するステップと、を実行することにより実施される前記方法。
  8. 請求項7記載の方法において、特定するパラメータは、ユーザID、グループIDまたはプログラム名である前記方法。
  9. 請求項1記載の方法において、前記メモリアドレス空間の前記制限は、オリジナルコードを新コードと置き換えることにより実施され、当該実施は、
    a)新コードにメモリを割当てるステップと、
    b)オリジナルコードの開始を、新コードへのジャンプ処理により置き換えるステップと、を含む前記方法。
  10. 請求項9記載の方法において、オリジナルコードを完全に無視するために、新コードは復帰処理で終了する前記方法。
  11. 請求項9記載の方法において、新コードは、オリジナルコードの処理の一部を含む前記方法。
  12. 請求項1記載の方法は、さらに、タスクにより使用されていないCPU資源を、他のタスクに動的に割当てるステップを含む前記方法。
  13. 請求項1記載の方法において、CPU使用量は、全てのタスク間で均等に分配される前記方法。
  14. 請求項1記載の方法において、各タスクが前記タスクに関連したアカウントのクオータにより制限されるように、タスク間でのCPU使用量の分配は実行される候補となるタスクのカウンタの計算を変更することにより得られる前記方法。
  15. 請求項14記載の方法において、カウンタ計算の変更は、
    a)カウンタの計算を実行する関数に処理を中断させるステップと、
    b)ユーザアカウントに保証された値に基づき、各タスクに対する所望のカウンタ値を計算し、同一のアカウントに所属する複数のタスクが存在する場合に常に前記値が計算される際に、クオータに応じてカウンタの正しい値を保持し、それらの現状の利用状況に応じて、それらのタスクの内部割当てが現在行われている間に、アカウントに応じて前記タスクのカウンタ値を合計するステップと、
    c)各プロセスの動作に関する情報を保存するステップと、
    d)各時間刻み毎に、アカウントが最近の時間に受け取ったCPU資源量を計算し、前記計算された資源量を、前記アカウントの上位のレベルに加えるステップと、
    e)前記アカウント、または、前記アカウントの上位のレベルが、その割当量よりも多くの資源量を受け取る毎に、次のCPU割当てが行われるまで、タスクのカウンタをゼロに減らすステップと、
    f)実行すべき次のタスクを決定する毎に、次に実行すべきタスクの選択が有効であることを確認するステップと、を含む前記方法。
  16. 実質的に説明し例証したように、複数の消費者のアカウントを有するコンピュータシステムの資源を動的に割当て管理する方法。
JP2004524038A 2002-07-25 2003-07-25 複数の消費者をもつコンピュータシステムで資源を動的に割当てて管理する方法 Pending JP2005534116A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IL15091102A IL150911A0 (en) 2002-07-25 2002-07-25 A method and apparatus for dynamically allocating and managing resources in a computerized system having multiple consumers
PCT/IL2003/000619 WO2004012080A2 (en) 2002-07-25 2003-07-25 Method for dynamically allocating and managing resources in a computerized system having multiple consumers

Publications (1)

Publication Number Publication Date
JP2005534116A true JP2005534116A (ja) 2005-11-10

Family

ID=29596367

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004524038A Pending JP2005534116A (ja) 2002-07-25 2003-07-25 複数の消費者をもつコンピュータシステムで資源を動的に割当てて管理する方法

Country Status (6)

Country Link
US (1) US20050246705A1 (ja)
EP (1) EP1525529A2 (ja)
JP (1) JP2005534116A (ja)
AU (1) AU2003281731A1 (ja)
IL (1) IL150911A0 (ja)
WO (1) WO2004012080A2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217135A (ja) * 2007-02-28 2008-09-18 Mitsubishi Electric Corp 情報管理装置
KR101508273B1 (ko) * 2013-03-27 2015-04-07 주식회사 케이티 클라우드 api 키를 이용한 자원 할당 방법 및 이를 위한 장치
KR20150121600A (ko) * 2014-04-21 2015-10-29 삼성전자주식회사 하드웨어 기반 태스크 스케쥴링 장치 및 방법
WO2016047814A1 (ko) * 2014-09-22 2016-03-31 주식회사 케이티 클라우드 api 키를 이용한 자원 할당 방법 및 이를 위한 장치

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7627506B2 (en) * 2003-07-10 2009-12-01 International Business Machines Corporation Method of providing metered capacity of temporary computer resources
US8135795B2 (en) 2003-04-03 2012-03-13 International Business Machines Corporation Method to provide on-demand resource access
US7493488B2 (en) 2003-07-24 2009-02-17 International Business Machines Corporation Method to disable on/off capacity in demand
US7877754B2 (en) * 2003-08-21 2011-01-25 International Business Machines Corporation Methods, systems, and media to expand resources available to a logical partition
US8782654B2 (en) 2004-03-13 2014-07-15 Adaptive Computing Enterprises, Inc. Co-allocating a reservation spanning different compute resources types
WO2005089236A2 (en) 2004-03-13 2005-09-29 Cluster Resources, Inc. System and method for providing intelligent pre-staging of data in a compute environment
US20070266388A1 (en) 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US8176490B1 (en) 2004-08-20 2012-05-08 Adaptive Computing Enterprises, Inc. System and method of interfacing a workload manager and scheduler with an identity manager
US8271980B2 (en) 2004-11-08 2012-09-18 Adaptive Computing Enterprises, Inc. System and method of providing system jobs within a compute environment
US8074223B2 (en) * 2005-01-31 2011-12-06 International Business Machines Corporation Permanently activating resources based on previous temporary resource usage
US8863143B2 (en) 2006-03-16 2014-10-14 Adaptive Computing Enterprises, Inc. System and method for managing a hybrid compute environment
US9231886B2 (en) 2005-03-16 2016-01-05 Adaptive Computing Enterprises, Inc. Simple integration of an on-demand compute environment
US9015324B2 (en) 2005-03-16 2015-04-21 Adaptive Computing Enterprises, Inc. System and method of brokering cloud computing resources
WO2006107531A2 (en) 2005-03-16 2006-10-12 Cluster Resources, Inc. Simple integration of an on-demand compute environment
US20060218277A1 (en) * 2005-03-24 2006-09-28 International Business Machines Corporation Activating on-demand computer resources
US8782120B2 (en) 2005-04-07 2014-07-15 Adaptive Computing Enterprises, Inc. Elastic management of compute resources between a web server and an on-demand compute environment
ES2614751T3 (es) 2005-04-07 2017-06-01 Iii Holdings 12, Llc Acceso bajo demanda a recursos informáticos
US9286109B1 (en) * 2005-08-26 2016-03-15 Open Invention Network, Llc Method and system for providing checkpointing to windows application groups
US8380880B2 (en) * 2007-02-02 2013-02-19 The Mathworks, Inc. Scalable architecture
US8041773B2 (en) 2007-09-24 2011-10-18 The Research Foundation Of State University Of New York Automatic clustering for self-organizing grids
US8959328B2 (en) * 2007-11-13 2015-02-17 Intel Corporation Device, system, and method for multi-resource scheduling
US8374576B2 (en) 2008-12-04 2013-02-12 At&T Intellectual Property I, L.P. Methods, systems, and computer program products for generating resource utilization alerts through communication terminals
US8453156B2 (en) * 2009-03-30 2013-05-28 Intel Corporation Method and system to perform load balancing of a task-based multi-threaded application
US8943498B2 (en) * 2009-05-31 2015-01-27 Red Hat Israel, Ltd. Method and apparatus for swapping virtual machine memory
JP5422276B2 (ja) * 2009-07-03 2014-02-19 日立コンシューマエレクトロニクス株式会社 無線映像送信装置
US11720290B2 (en) 2009-10-30 2023-08-08 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US10877695B2 (en) 2009-10-30 2020-12-29 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US8365020B2 (en) 2010-03-18 2013-01-29 Red Hat Israel, Ltd. Mechanism for saving crash dump files of a virtual machine on a designated disk
US8904395B2 (en) 2010-07-26 2014-12-02 International Business Machines Corporation Scheduling events in a virtualized computing environment based on a cost of updating scheduling times or mapping resources to the event
US9244742B2 (en) * 2012-05-31 2016-01-26 Vmware, Inc. Distributed demand-based storage quality of service management using resource pooling
US9087191B2 (en) 2012-08-24 2015-07-21 Vmware, Inc. Method and system for facilitating isolated workspace for applications
US9094413B2 (en) 2012-08-27 2015-07-28 Vmware, Inc. Configuration profile validation on iOS Using SSL and redirect
US9077725B2 (en) 2012-08-27 2015-07-07 Vmware, Inc. Configuration profile validation on iOS based on root certificate validation
CN104750558B (zh) * 2013-12-31 2018-07-03 伊姆西公司 在分层配额系统中管理资源分配的方法和装置
CN105893138A (zh) * 2014-12-19 2016-08-24 伊姆西公司 基于配额的资源管理方法和装置
US10768920B2 (en) * 2016-06-15 2020-09-08 Microsoft Technology Licensing, Llc Update coordination in a multi-tenant cloud computing environment
KR102491068B1 (ko) * 2017-11-17 2023-01-19 에스케이하이닉스 주식회사 메모리 장치에 대한 태스크들을 스케줄링하는 반도체 장치 및 이를 포함하는 시스템
CN113767619A (zh) * 2019-06-18 2021-12-07 索尼半导体解决方案公司 发射装置、接收装置和通信系统
CN115495234B (zh) * 2022-08-23 2023-11-28 华为技术有限公司 一种资源检测方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274815A (en) * 1991-11-01 1993-12-28 Motorola, Inc. Dynamic instruction modifying controller and operation method
CA2103297A1 (en) * 1992-12-07 1994-06-08 Donald J. Kennedy Interception system and method including user interface
WO1999039261A1 (en) * 1997-10-09 1999-08-05 The Learning Company Windows api trapping system
US7373646B1 (en) * 2003-04-04 2008-05-13 Nortel Network Limited Method and apparatus for sharing stack space between multiple processes in a network device

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217135A (ja) * 2007-02-28 2008-09-18 Mitsubishi Electric Corp 情報管理装置
KR101508273B1 (ko) * 2013-03-27 2015-04-07 주식회사 케이티 클라우드 api 키를 이용한 자원 할당 방법 및 이를 위한 장치
KR20150121600A (ko) * 2014-04-21 2015-10-29 삼성전자주식회사 하드웨어 기반 태스크 스케쥴링 장치 및 방법
KR102182295B1 (ko) 2014-04-21 2020-11-24 삼성전자 주식회사 하드웨어 기반 태스크 스케쥴링 장치 및 방법
WO2016047814A1 (ko) * 2014-09-22 2016-03-31 주식회사 케이티 클라우드 api 키를 이용한 자원 할당 방법 및 이를 위한 장치
US10164902B2 (en) 2014-09-22 2018-12-25 Kt Corporation Resource allocation method using cloud API key and apparatus therefor

Also Published As

Publication number Publication date
EP1525529A2 (en) 2005-04-27
IL150911A0 (en) 2003-02-12
WO2004012080A3 (en) 2004-10-07
AU2003281731A8 (en) 2004-02-16
US20050246705A1 (en) 2005-11-03
AU2003281731A1 (en) 2004-02-16
WO2004012080A2 (en) 2004-02-05

Similar Documents

Publication Publication Date Title
JP2005534116A (ja) 複数の消費者をもつコンピュータシステムで資源を動的に割当てて管理する方法
US11681562B2 (en) Resource manager for managing the sharing of resources among multiple workloads in a distributed computing environment
US11023330B2 (en) Efficient scheduling of backups for cloud computing systems
US9465663B2 (en) Allocating resources in a compute farm to increase resource utilization by using a priority-based allocation layer to allocate job slots to projects
KR101994506B1 (ko) Paas 자원들, 작업들 및 스케줄링의 분리 기법
RU2481618C2 (ru) Иерархическая инфраструктура планирования резервирования ресурсов
KR101976234B1 (ko) Paas 계층적 스케줄링 및 자동 스케일링 기법
US7665090B1 (en) System, method, and computer program product for group scheduling of computer resources
JP5939740B2 (ja) 動的にリソースを割り当てる方法、システム及びプログラム
RU2569805C2 (ru) Виртуальная архитектура неоднородной памяти для виртуальных машин
US9021490B2 (en) Optimizing allocation of computer resources by tracking job status and resource availability profiles
US8650296B1 (en) Workload reallocation involving inter-server transfer of software license rights and intra-server transfer of hardware resources
US11467874B2 (en) System and method for resource management
KR20140111671A (ko) 가상 머신 풀 내의 리소스의 할당 기법
Pasdar et al. Hybrid scheduling for scientific workflows on hybrid clouds
US8954969B2 (en) File system object node management
Walraven et al. Adaptive performance isolation middleware for multi-tenant saas
US11057263B2 (en) Methods and subsystems that efficiently distribute VM images in distributed computing systems
Amer et al. Improving scientific workflow performance using policy based data placement
Komarasamy et al. ScHeduling of jobs and Adaptive Resource Provisioning (SHARP) approach in cloud computing
US20090320036A1 (en) File System Object Node Management
Bittencourt et al. Resource management and scheduling
Kulkarni et al. Fuzzy based task prioritization and VM migration of deadline constrained tasks in cloud systems
Walters et al. Enabling interactive jobs in virtualized data centers
Kostenko et al. Approaches to improving the efficiency of data centers

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060724

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081031

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090508