JP4963018B2 - スケジューリング方法およびスケジューリング装置 - Google Patents

スケジューリング方法およびスケジューリング装置 Download PDF

Info

Publication number
JP4963018B2
JP4963018B2 JP2005235582A JP2005235582A JP4963018B2 JP 4963018 B2 JP4963018 B2 JP 4963018B2 JP 2005235582 A JP2005235582 A JP 2005235582A JP 2005235582 A JP2005235582 A JP 2005235582A JP 4963018 B2 JP4963018 B2 JP 4963018B2
Authority
JP
Japan
Prior art keywords
execution unit
identifier
executed
information
thread
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.)
Active
Application number
JP2005235582A
Other languages
English (en)
Other versions
JP2007052511A (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.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Interactive Entertainment Inc
Sony Computer Entertainment Inc
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 Sony Interactive Entertainment Inc, Sony Computer Entertainment Inc filed Critical Sony Interactive Entertainment Inc
Priority to JP2005235582A priority Critical patent/JP4963018B2/ja
Priority to CN2006800179477A priority patent/CN101180609B/zh
Priority to PCT/JP2006/310907 priority patent/WO2007020739A1/ja
Priority to EP06756827A priority patent/EP1923784A4/en
Priority to US11/996,361 priority patent/US8375390B2/en
Publication of JP2007052511A publication Critical patent/JP2007052511A/ja
Application granted granted Critical
Publication of JP4963018B2 publication Critical patent/JP4963018B2/ja
Active 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • 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/461Saving or restoring of program or task context
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Description

本発明は、マルチプロセッサシステムにおける並列処理の実行単位のスケジューリング方法および装置に関する。
最近のマルチタスクをサポートするオペレーティングシステムは、複数のプロセスを同時に実行することができるマルチタスク環境を実現するとともに、これらのプロセスがプロセス内部で複数のスレッドを生成して並行処理を行うことができるマルチスレッド技術を搭載している。プロセスは実行時に固有のリソースやアドレス空間が割り当てられ、他のプロセスの領域にアクセスすることができない。これに対してスレッドは、プロセス内部で生成される実行単位であり、各スレッドはプロセス内の領域に互いに自由にアクセスすることができる。スレッドは、オペレーティングシステムがCPU(Central Processing Unit)の実行時間を割り当てる基本的な実行単位となる。本明細書において、スレッドの割り当てをスケジューリングという。
1つのシステム内に複数のプロセッサを搭載したマルチプロセッサシステムでは、並列に、あるいは協調して処理を実行して処理全体の高速化を図ることができる。通常、マルチプロセッサシステムにおいて、共有メモリにタスクキューと呼ばれる待ち行列に実行可能なスレッドが保持される。これらのスレッドはいずれかのプロセッサに割り当てられて、実行される。スレッドを割り当てる方法によって、プロセスの実行速度やメモリ消費量などの性能が変わってくるため、マルチプロセッサシステムでは、シングルプロセッサシステムにおけるスケジューリングと異なった工夫が必要となる。
マルチプロセッサシステムにおけるスケジューリングについて、たとえば、スレッドを管理する役割を担う管理ユニットが各プロセッサと通信し、それぞれのプロセッサに割り当てるスレッドをスケジューリングする方法が考えられる。
管理ユニットによってスケジューリングを行うこの方法では、管理ユニットとプロセッサ間の通信において、メッセージ遅延が起きることが多く、スレッドの実行を遅延させてしまうという問題がある。この問題を解決するために、各プロセッサによって自己支配的にスケジューリングする方法が考えられる。この方法では各プロセッサ上でおのおのスケジューラを実行し、共有メモリにあるタスクキューにアクセスして、実行するスレッドを選択する。
この方法では、各プロセッサがスケジューラを実行している間、すなわちスケジューリング中において、共有メモリ上のタスクキューが他のプロセッサによって修正されることを防ぐために、スケジューラがタスクキューをロックする。この間、割り込みを禁止するか否かはシステムの設計者にとってジレンマである。
スケジューリング中に割り込みを禁止しない場合には、スケジューラがタスクキューをロックしている最中に、割り込みを受け付けてしまう。この場合、割り込み処理が終了し、ロックが開放されるまで、スケジューリングが実行されない結果になってしまい、システムの効率低下につながる。
一方、スケジューリング中に割り込みを禁止すると、システムの割り込み応答性能が低下してしまう問題がある。
これらの問題はこれまで述べたマルチプロセッサ上で動作するカーネルスケジューラだけの問題でなく、マルチプロセッサ・マルチスレッド環境でのユーザレベルスケジューラ(すなわち、各プロセッサで動作するスレッド上でスケジューラを実行することで、ユーザレベルにおいてマルチスレッドを実現する方式)の場合も同様である。
特に、ユーザレベルスケジューラを実行しているカーネルスレッドは各プロセッサ上のカーネルレベルスケジューラによってスケジューリングされ、他のカーネルスレッドによってプリエンプト(横取り)される可能性があるため、タスクキューのロックはより深刻な問題を引き起しかねない。この場合、横取りされた際にそのカーネルスレッドで動作するユーザレベルスケジューラがロックを取得していた場合には、他のプロセッサのスレッド上で動作するユーザレベルスケジューラがロックが解除されるまでスケジューリングすることができなくなる。
本発明は上記事情に鑑みてなされたものであり、その目的は、マルチプロセッサシステムにおける並列処理の実行単位をプロセッサに割り当てる順序を制御して処理効率を向上させることができるスケジューリング技術を提供することにある。
本発明にかかる態様は、マルチプロセッサシステムにおいて、プロセッサの実行対象となる実行単位をスケジューリングする方法に関する。このスケジューリング方法は、マルチプロセッサシステムに含まれる複数のプロセッサの実行対象となる各実行単位に識別子を付与し、各実行単位のそれぞれが実行可能な状態にあるか否かを実行単位の識別子に対応づけて示す実行可否情報と、各実行単位のうちの、直近に実行された実行単位の識別子を示す直近実行情報とを含む実行単位情報を保持する。そして、実行単位情報に基づいて、直近に実行された実行単位の識別子以外の識別子を優先的に選出する制約の下でいずれかの実行可能な実行単位の識別子を、プロセッサによって実行される実行単位の識別子として選出するとともに、実行単位情報を更新する。
この態様では、実行可否情報と直近実行情報を含む実行単位情報が保持されるとともに、次に実行する実行単位の選出に伴って更新される。実行単位の選出は、実行単位情報を参照してなされる。そのため、実行単位の選出にあたって、実行単位情報を参照すればよく、実行単位の実体を記憶したたとえばタスクキューをロックする必要がない。そのため、スケジューリング中に割り込み処理を受け付けるか否かのジレンマが解消される。
また、直近実行情報が保持され、実行単位の識別子を選出する際に、直近実行情報により示される識別子以外の識別子を優先的に選出するとともに、この選出に伴って直近実行情報を更新するようにしているので、直近に実行された実行単位がまた実行可能になっても、他の実行可能な実行単位が優先的に実行されるので、実行単位のスケジューリングにおいて重要な公平性を保つことができる。
本発明のこの態様は、管理ユニットによってスケジューリングするシステムに適用してもよく、各プロセッサ自身によってスケジューリングを行うシステムに適用してもよい。
また、本発明のこの態様は、各プロセッサ上で直接動作するスケジューラだけではなく、各プロセッサ上のスケジューラが提供するスレッド上で動作するユーザレベルスケジューリングを用いるシステムに適用してもよい。
ここで、実行可否情報は、各実行単位について識別子として1ビットを割り当てたビット列として保持され、ビットの選出および実行単位情報の更新を不可分操作、すなわちアトミック操作によって行うようにしてもよい。
「不可分操作」は、これ以上分割できない最小単位の操作を意味し、マルチプロセッサシステムにおいて、他のプロセッサが行う操作との相互作用なしに実行されることが保証される操作である。
ビットの選出に当たっては、直近に実行された実行単位に対応するビットが末尾になるようにビット列をローテートし、ローテートされたビット列の先頭から順に実行可能な実行単位のビットを検索することによって行うようにしてもよい。
なお、以上の構成要素の任意の組合せ、本発明をシステム、プログラム、プログラムを記憶した記憶媒体として表現したものも、本発明の態様としては有効である。
本発明は、マルチプロセッサシステムにおける並列処理の実行単位をスケジューリングすることにおいて有利である。
マルチプロセッサシステムにおいて、各プロセッサの実行単位たとえばスレッドのスケジューリング中に、スレッドを記憶したタスクーキューがほかのプロセッサにより修正されることを防ぐために、タスクキューをロックする必要があった。
このロックによって、スケジューリング中に、割り込みを禁止するとシステムの割り込み応答性能が低下し、割り込みを禁止しないと、割り込み処理が終わり、ロックが解除されるまでスケジューリングができないというジレンマがあった。
上述した問題を解決するために、本発明者は、下記の技術を提案する。
各スレッドに識別子を付与し、これらのスレッドのそれぞれが実行可能な状態にあるか否かをスレッドの識別子に対応づけて示す実行可否情報と、各スレッドのうちの、直近に実行されたスレッドの識別子を示す直近実行情報とを含むスレッド情報を保持する。そして、スレッド情報に基づいて、直近に実行されたスレッドの識別子以外の識別子を優先的に選出するという制約の下で、いずれかの実行可能なスレッドの識別子を、プロセッサに割り当てるスレッドの識別子として選出する。
ここで、スレッドの実体(以下スレッド実体という)を、プロセッサが選出された識別子に基づいて取得することができるいかなる方法で保持してもよい。たとえばスレッド実体を識別子と対応づけて保存するようにしてもよいし、各スレッド実体をメモリのそれぞれの所定の領域に保存するとともに、スレッド実体が保存された領域の開始アドレスとその識別子とを対応づけてメモリに保存するようにしてもよい。
この技術は、スレッド実体と、いずれのスレッドを実行するかの選出を行うために必要なスレッド情報とに分けてメモリに保存する。そのために、スケジューリングする際に当たって、スレッド実体を記憶した領域をロックする必要がなく、スケジューリング中に割り込みを禁止するか否かのジレンマを解消することができる。
この技術は、ユーザレベルスケジューラを実行するシステムにおいても、上記ジレンマを解消することができるとともに、ユーザレベルスケジューラゆえの問題も解決することができる。
たとえば、マルチプロセッサシステム、特にOS(オペレーティングシステム)機能を実行できるプロセッサが限られるような非対称のマルチプロセッサシステムにおいては、各プロセッサで動作するOSが提供するカーネルスレッド上にユーザレベルスレッドを作成して、自己支配的にスケジューリングする方法、すなわちユーザレベルスケジューラを用いる方法は、マルチプロセッサシステムの処理効率を向上させる有効な方法であると考えられる。この方法では、ユーザレベルスケジューラを用いることに起因するスケジューリングの破綻という問題がある。
たとえば、ユーザレベルスケジューラを実行しているスレッドは、各プロセッサの上のカーネルスケジューラによってスケジューリングされ、ほかのカーネルスレッドによってプリエンプトされる可能性がある。そのため、プリエンプトされた際にそのスレッドで動作するユーザレベルスケジューラがロックを取得していた場合には、ほかのプロセッサのスレッド上で動作するユーザレベルスケジューラがロックが解除されるまで、スケジューリングができなくなり、プロセッサの処理効率を下げてしまう。さらに、ロックが解除されるまでの時間は、状況に依存してしまい、見積もることが困難になるため、システムの不安定を引き起こす原因にもなりえる。
ここで、マルチプロセッサシステムにおいて各プロセッサが自律的に動作するカーネルスケジューラを実行する従来のシステムについて考える。タスクキューにスレッド1、スレッド2、スレッド3が入っており、複数のプロセッサのうちのプロセッサAは、タスクキューにあるスレッドを実行することができる状態になった場合を想定する。
プロセッサAは、実行するスレッドを選出するために、タスクキューを一旦自分のローカルメモリにコピーし、タスクキューからたとばスレッド1を選出した後に、タスクキューからスレッド1を削除する更新処理を行って、更新されたタスクキューをメインメモリに書き戻す。タスクキューのコピーが開始するときから、タスクキューの書戻しが終了するまでの間、共有メモリ上のタスクキューが他のプロセッサによって修正されることを防ぐために、タスクキューをロックする。タスクキューがロックされている間、他のプロセッサは、タスクキューに入ったスレッドを実行できる状態になったとしても、タスクキューを利用することができないため、ロックの期間が長いほどシステムの処理効率が低下する。
また、プロセッサAで動作するスケジューラは前述したように割り込みによってプリエンプトされる可能性がある。プロセッサAはタスクキューがロックされた状態でプリエンプトされると、ほかのプロセッサは、プロセッサAが割り込み処理から復帰し、ロックが解除されるまでスケジューリングを行うことができず、スレッド2、3を実行することが不可能となる。これでは、システムは処理効率が低下するとともに、不安定にもなりかねない。
なお、上記説明は、プロセッサA、・・・を、プロセッサA、・・・上で動作するユーザレベルスケジューラを実行するスレッド(たとえばスレッドa、・・・)に置き換えれば、ユーザレベルスケジューラを実行するシステムにも適用することができる。具体的には、ユーザレベルスケジューラを実行するシステムにおいて、たとえばプロセッサA上で動作するユーザレベルスケジューラを実行するスレッドaも、割り込みによってプリエンプトされる可能性がある。スレッドaは、タスクキューがロックされた状態でプリエンプトされると、ほかのスレッドは、スレッドaが割り込み処理から復帰し、ロックが解除されるまでスケジューリングを行うことができない。すなわち、ユーザレベルスケジューラを用いるシステムにおいても同じように、タスクキューのロック起因して、システムは処理効率が低下し、不安定になりかねない問題がある。
また、マルチプロセッサシステムにおいて、各々のプロセッサがそれぞれの処理ユニットに含まれる形で存在する。これらの処理ユニットはPPU(Power Processing Unit)とSPU(Synergistic Processing Unit)とに分けることができる。SPUのすべてが同一のアーキテクチャを用いて実現されてもよく、それぞれ異なる構成を有してもよい。PPUは、SPUに対してローカルに、たとえばSPUと同一のチップ、同一のパッケージ、同一の回路基板、同一の製品に位置してもよいし、SPUに対してリモートに、たとえばバスやインターネットなどの通信ネットワークを介して接続可能な異なる製品に位置してもよい。同様に、SPUは、互いにローカルにまたはリモートに位置してもよい。
スケジューリング禁止区間の存在と禁止時間の見積もりの困難さはマルチプロセッサシステムの処理効率を下げる要因になる。ユーザレベルスケジューラを実行するスレッドのすべてがSPUのスレッド(以下SPUスレッドという)であれば、この問題を解決する方法としては、スレッドをグループ化してグループ単位でスケジューリングする方法が考えられる。ここで、図9に示すマルチプロセッサシステムを例にして説明する。
図9に示すマルチプロセッサシステムは、複数の処理ユニット110とメインメモリ130と有し、それらはメインバス120に接続されている。各処理ユニット110は、プロセッサ112、ローカルメモリ114、メモリ制御部116を有する。プロセッサ112は、ローカルメモリ114に対してデータを読み書きすることができる。メモリ制御部116は、他の処理ユニット110のプロセッサ112からローカルメモリ114のデータを参照するときのインターフェースを与えるとともに、メモリの同期、排他制御の機能を提供する。
ここで、メインメモリ130に設けられたタスクキューにSPUスレッドのみが記憶されている場面について考える。この場合、タスクキュー内のスレッドが図10に示すようにグルーピングされる。 図10(a)は、3つのスレッドth1a、th1b、th1cを含む第1スレッドグループを示す。図10(b)は、1つのスレッドth2aを含む第2スレッドグループを示す。このようなスレッドが1つだけの場合もスレッドグループとして扱う。同様に、図10(c)は、2つのスレッドth3a、th3bを含む第3スレッドグループを示す。図10(d)は、1つのスレッドth4aを含む第4スレッドグループを示す。
これらのスレッドのスケジューリングは、同一スレッドグループに属するすべてのスレッドを同時にいずれかのプロセッサ112に割り当てることを条件として行われる。第1スレッドグループがプロセッサ112に割り当てられるときは、第1スレッドグループに属する3つのスレッドth1a、th1b、th1cが同時にいずれかのプロセッサ112に割り当てることができる場合に限られる。3つのスレッドth1a、th1b、th1cの1つまたは2つがプロセッサ112に割り当てられ、残りがメインメモリ130に退避しているという状況は作らない。
図11は、スレッドグループ単位でスレッドがプロセッサ112に割り当てられる様子を説明する図である。同図は、プロセッサ総数4のマルチプロセッサシステムにおいて、図10に示した4つのスレッドグループに属するスレッドのプロセッサ112への割り当て状態を示している。ある時刻において、第1スレッドグループに属する3つのスレッドth1a、th1b、th1cは、それぞれ第1プロセッサ、第2プロセッサ、第3プロセッサに割り当てられ、第2スレッドグループに属する1つのスレッドth2aは、第4プロセッサに割り当てられている。それ以外の第3スレッドグループに属する2つのスレッドth3a、th3b、および第4スレッドグループに属する1つのスレッドth4aはメインメモリ112に退避されている。
このようなシステムによれば、1つのスレッドグループ内に所属する複数のスレッドを必ず同時にいずれかのプロセッサに割り当てるようにする。スレッドグループ内において、ロックを取ったスレッドだけがプリエンプトされることがないため、スケジューリングの禁止区間を限定することができる。
しかし、PPUのスレッド(以下PPUスレッドという)とSPUスレッドが非同期にスケジューリングされる環境では、PPUスレッドとSPUスレッドで同じタスクキューを共有した場合には下記の問題が生じうる。あるPPUスレッドがタスクキューのロックを取ったまま他のPPUスレッドにプリエンプトされると、SPUスレッドはこのPPUスレッドが再実行されるまで待たざるを得ないため、スケジューリングの禁止区間を限定することができなくなってしまう。
本発明者が提案したスケジューリング技術は、スレッド情報とスレッド実体を分けて保存し、プロセッサは、いずれのスレッドを実行するかの選出を行う際、スレッド情報のみをロードすればよい。選出を終え、スレッド情報の更新(具体的には、直近に実行されたスレッドの識別子を、選出されたスレッドの識別子に変更する処理と、選出されたスレッドの識別子を該識別子の対応するスレッドが実行不可であることを示すように修正する処理)を終了すれば、更新されたスレッド情報をメインメモリにストアする。その後、プロセッサは、選出した識別子に対応するスレッド実体をコピーするが、コピーする間、他のプロセッサは、スレッド情報を利用することができる。こうすることによって、スレッド情報は1つのプロセッサに占有される時間が短いため、スレッド情報をロックしたとしても、システム全体の処理効率の低下を軽減させることができる。
さらに、本発明者は、実行可否情報を、各スレッドについて識別として1ビットを割り当てたビット列として保持することを提案する。こうすることによって、スレッドの選出、スレッド情報の更新などを、アトミック操作やアトミック命令を用いて行うことができ、ロック操作を伴わないすなわちロックレスのタスクキューを実現することができる。ロック操作がなければ、上述した、タスクキューのロックに起因するおのおのの問題も解消される。
図1は、本発明の実施形態となるマルチプロセッサシステム100の構成を示す。マルチプロセッサシステム100は、複数の処理ユニット10とメインメモリ30と有し、それらはメインバス20に接続されている。各処理ユニット10は、プロセッサ12、ローカルメモリ14、メモリ制御部16を有する。プロセッサ12は、ローカルメモリ14に対してデータを読み書きすることができる。メモリ制御部16は、他の処理ユニット10のプロセッサ12からローカルメモリ14のデータを参照するときのインターフェースを与えるとともに、メモリの同期、排他制御の機能を提供する。
処理ユニット10のうちのいずれか1つを、スレッドのスケジューリングに関して他の処理ユニットに対するサービスユニットの役割を担う。サービスユニットの役割としては、たとえばメインメモリ30の割当てや、メインメモリ30内のスレッドに関する最初の記憶に関わることなどである。メインメモリ30の割当ては、たとえばスレッド情報に割り当てられる領域、領域の容量や、スレッドの実体に割り当てられるべきメモリ容量を決定することなどとすることができる。
なお、このサービスユニットは、いずれの処理ユニット10によって担当されてもよい。
ある時刻において、各プロセッサ12には1つのスレッドが動作し、マルチプロセッサシステム100全体で並列に複数のスレッドが実行される。各プロセッサ12において動作しているスレッドは、処理ユニット10内のローカルメモリ14やメモリ制御部16内のレジスタなどのすべての資源を占有して使用することができる。
この状態において、処理待ちしているスレッドは、そのコンテキストがメインメモリ30に保持される。スレッドのコンテキストは、そのスレッドが実行された処理ユニット10内で占有するすべての資源の状態であり、スレッドがプロセッサ12において動作しているときに各種レジスタに保持されている値の集合、ローカルメモリ14に保持されたデータ、メモリ制御部16の各種レジスタの内部状態などである。スレッドがプロセッサ12上で動作してないときは、そのスレッドのコンテキストをメインメモリ30にコピーしておき、再度プロセッサ12によって処理可能となったときに、そのコンテキストをメインメモリ30から読み込んで、処理を継続することができる。スレッドのコンテキストは、スレッド実体に該当する。
図2は、メインメモリ30により記憶された、スレッドに関する情報を示す。これらの情報は、スレッド情報40、スレッドアドレス情報50と、スレッド実体60であり、マルチプロセッサシステム100におけるタスクキューの役割を担う。なお、これらの情報が記憶される領域は、サービスユニットによって割り当てられ、ほかの処理ユニット10に通知される。
スレッド情報40は、実行可否情報と直近実行情報とを含む。実行可否情報は、各スレッドに対してそれぞれ付与された識別子を、それぞれのスレッドが実行可能な状態にあるか否かを示す情報に対応づけたものである。図3は、スレッド情報40の詳細を示す。
ビット列(isSchedulable)は、実行可否情報であり、それに含まれる1ビットが1つのスレッドに対応し、ビット番号はスレッドの番号に対応する。なお、マルチプロセッサシステム100は、ビット番号そのものをスレッドの番号として用いて処理の簡潔化を図る。
ビット列isSchedulableの各ビットの値はそのビットに対応するスレッドが実行可能状態にあるか否かを示している。ここで、ビットの値の「1」は実行可能であることを示し、「0」は実行不可であることを示すようにされている。ビット列isSchedulableに含まれるビットの数は、実行可否情報の保持用に割り当てられた領域の容量に相当し、ここでは128ビットとする。
lastScheduledは、ビット列isSchedulableに含まれる各ビットのうち、直近に実行されたビットの番号を示す整数値を取る変数である。
isSchedulableとlastScheduledによって、図4の例のように、実行可能なスレッドの番号、直近に実行されたスレッドの番号が示される。図4の例では、ビット列isSchedulableのうち、値が「1」であるビット(図中矢印B、C、Dが示すビット)が3つあり、この3つのビット番号に対応するスレッドは実行可能スレッドである。値が「0」であるほかのビットについて、それらに対応するスレッドは、実行不可である。また、lastScheduledの値に等しいビット番号(図中矢印Aが示すビットの番号)に対応するスレッドは、直近に実行されたスレッドであり、その状態は実行不可である。
スレッドアドレス情報50は、各スレッドの番号ここではビット列isSchedulableに含まれるビットの番号と、その番号に対応するスレッドの実体が保存された領域の開始アドレスとを対応づけたものである。どの番号のスレッド実体を、どのアドレスの領域に保存するかについては、サービスユニットによって決められる。
処理待ちのスレッドがない状態において、スレッド情報40のビット列isSchedulableの各ビットの値が「0」である。
処理ユニット10の処理が進み、スレッドが生成される。生成されたスレッドは、またいずれかの処理ユニット10によって実行される。処理待ちのスレッドが生じた際に、タスクキューが利用される。ここで、例として図4に示すタスクキューの状態を起点にして、処理ユニット10が次に実行するスレッドを選出する処理、およびこの選出に伴うスレッド情報の更新処理を図5のフローチャートを用いて説明する。
図4に示す状態では、マルチプロセッサシステム100の各処理ユニット10は、それぞれ処理中のスレッドがあり、処理待ちしている実行可能なスレッドは3つあり、この3つのスレッドのそれぞれの実体は、メインメモリ30に記憶されている。
この状態において、ある処理ユニット10において、処理中のスレッドの処理が終了すると、この処理ユニット10のプロセッサ12は、次に実行するスレッドを選出するために、スレッド情報40に含まれるビット列isSchedulableとlastScheduledを、ローカルメモリ14にロードする(S10)。マルチプロセッサシステム100において、処理ユニット10は、スレッド情報40に関わる処理をアトミックコマンドを用いて行い、ここでは、スレッド情報40をロードするためのコマンドとして、たとえば「lwarx」または「getllar」を用いる。なお、図6のA欄に示すビット列isSchedulableは、図4に示すビット列isSchedulableである。
プロセッサ12は、ロードしたビット列isSchedulable(図6のA欄に示すビット列)を、lastScheduledの値に等しい番号のビット(図6の矢印A1が示すビット)が末尾になるように、矢印Lが示す方向、すなわち左方向にローテートする(S14)。これによって、図6のA欄のビット列isSchedulableは、同図のB欄のビット列isSchedulableになる。図示のように、(lastScheduled+1)の番号のビット(矢印B1が示すビット)が、ビット列isSchedulableの先頭に位置し、lastScheduledの番号のビット(矢印B3が示すビット)がビット列isSchedulableの末尾になる。
プロセッサ12は、続いてローテートされたビット列isSchedulableに対して先頭から順に、値が「1」であるビットの検索を行い、最も先に検出したビット(矢印B2が示すビット)の番号を、次に実行するスレッドの番号として得る(S18)。ビットの検索に用いるコマンドとして、たとえばビット列isSchedulableの先頭から連続した、「0」の値を有するビットの数を数える「Count Leading Zero」を用いることができる。「Count Leading Zero」により得られた値(図6に示すB欄のビット列isSchedulableの例では4)に(lastScheduled+1)を加算して得た値は、次に実行するスレッドの番号として選出される。
そして、プロセッサ12は、選出した番号のビットの値を「0」にセットするとともに、lastScheduledをこの番号にセットして、スレッド情報40の更新を行う(S20)。更新されたスレッド情報40は、メインメモリ30にストアされる(S24)。ここで、ビットの値の更新は、図6のC欄に示す128ビットのビット列を用いて行う。C欄のビット列は、128ビットを有し、ステップS10において選択されたした番号と同じ番号のビット(矢印C1が示すビット)のみが「1」の値を有する。プロセッサ12は、図6のB欄のビット列isSchedulableと、C欄のビット列とを、「AtomicAndc」コマンドで演算することによってB欄のビット列isSchedulableを更新する。また、更新されたビット列isSchedulableのストアに用いるコマンドは、たとえば「stwcx」または「putllc」とすることができる。
図6のD欄は、更新されたスレッド情報40を示す。ここで、次に実行するスレッドとして選出されたビット(矢印D1が示すビット)は、直近に実行されたスレッドを示すビットとなり、その値が「1」から「0」になっている。
その後、プロセッサ12は、スレッドアドレス情報50を参照して、選出した番号のスレッドに対応するスレッド実体60の開始アドレスを取得するとともに、この開始アドレスにより示される領域からスレッド実体60をローカルメモリ14にロードして処理する。
次に図7のフローチャートを用いて、タスクキューに実行可能となったスレッドを追加する処理について説明する。
処理ユニット10のプロセッサ12は、新たに実行可能となったスレッドをタスクキューに追加するために、スレッド情報40に含まれるビット列isSchedulableをローカルメモリ14にロードする(S50)。このビット列isSchedulableはたとえば図8のA欄に示すビット列isSchedulableである。プロセッサ12は、A欄のビット列isSchedulableの各ビットのうちの、値が「0」であるいずれかのビット(たとえば矢印A1が示すビット)の番号を、追加するスレッドのビット番号として選出する。そして、プロセッサ12は、A欄のビット列isSchedulableと、B欄に示すビット列とを「AtomicOr」コマンドで演算してC欄に示すビット列isSchedulableを得る(S54)。図8のB欄に示すビット列は、128ビットを有し、プロセッサ12により選出された番号と同じ番号のビット(矢印B1が示すビット)のみが「1」の値を有する。
続いて、プロセッサ12は、ステップS54により得られたビット列isSchedulable(図8のC欄のビット列)をメインメモリ30にストアして、スレッドを追加するためのスレッド情報40の更新を終了する(S58)。
プロセッサ12は、この後、追加するスレッドの実体を、ステップS54において選出したビット番号に対して割り当てられた領域にコピーして、スレッドを追加する処理を終了する。
このように、図1に示すマルチプロセッサシステム100によれば、各プロセッサ12自身によって、タスクキューからスレッドを選出する処理、タスクキューを更新する処理を行っているので、システム全体の処理効率を向上させることができる。
また、タスクキューを構成する際に、スレッド情報とスレッド実体とに分けて保存し、スレッドの選出、更新は、スレッド情報のみを用いて行うことができるようにしたので、より効率の良いマルチプロセッサシステムを実現している。
さらに、スレッド情報としてビット列isSchedulableと、lastScheduledとの2つの変数を用いることによって、スレッドの選出と更新を、アトミックコマンドで行うことを可能とした。これによって、ロックレスのタスクキューを実現している。
ロックレスのタスクキューの実現により、スケジューリング中に割り込みを受け付けるか否かのジレンマを解消することができる。
ここで、図1に示すマルチプロセッサシステム100は、カーネルスケジューラのみをを用いるマルチプロセッサシステムであるが、マルチプロセッサシステム100に用いられたスケジューリング方法は、各プロセッサ上で動作するスレッド上で実現されたユーザレベルスケジューラを用いたシステムにも適用することができる。その場合、スケジューリング中に割り込みを受け付けるか否かのジレンマを解消することができるとともに、前述した、ユーザレベルスケジューラを用いることに起因する問題も解消することができる。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
また、図1に示す実施形態は、各プロセッサが自律的にスケジューリングを行うシステムであるが、本発明のスケジューリング方法は、このようなシステムに限らず、たとえばひとつの管理ユニットによってスケジューリングするシステムにも適用することができる。
また、本発明を適用したデバイスも、本発明の範囲にある。これらのデバイスには、パーソナルコンピュータやサーバなどに限らず、携帯電話、ゲーム機、モバイルコンピュータ、個人携帯情報機器(PDA)、デジタルテレビなどが含まれる。
本発明にかかる実施形態のマルチプロセッサシステムを示す図である。 図1に示すマルチプロセッサシステムのタスクキューを示す図である。 図2に示すタスクキューに含まれるスレッド情報の構成を示す図である。 図3に示すスレッド情報の詳細を説明するための図である。 プロセッサによりスレッドを選出する処理を示すフローチャートである。 図5に示す処理に伴うスレッド情報の変化を示す図である。 プロセッサによりスレッドを追加する処理を示すフローチャートである。 図7に示す処理に伴うスレッド情報の変化を示す図である。 ユーザレベルスケジューラを用いるマルチプロセッサシステムの例を示す図である。 図9に示すマルチプロセッサシステムにおけるスレッドのグルーピングを示す図である。 図9に示すマルチプロセッサシステムにおけるスレッドのスケジューリングを示す図である。
符号の説明
10 処理ユニット、 12 プロセッサ、 14 ローカルメモリ、 16 メモリ制御部、 20 メインバス、 30 メインメモリ、 40 スレッド情報、 50 スレッドアドレス情報、 60 スレッド実体、 100 マルチプロセッサシステム、 110 処理ユニット、 112 プロセッサ、 114 メモリ制御部、 120 メインバス、 130 メインメモリ。

Claims (10)

  1. マルチプロセッサシステムに含まれる複数のプロセッサのいずれにおいても実行可能な実行対象となる各実行単位に、当該実行単位とは分離して保存される識別子を付与し、
    各実行単位のそれぞれが実行可能な状態にあるか、あるいはあるプロセッサで実行中であって別のプロセッサからは実行不可能な状態であるかを前記実行単位の識別子に対応づけて示す実行可否情報と、各実行単位のうちの、直近に実行された実行単位の識別子を示す直近実行情報とを含む実行単位情報を保持し、
    実行単位情報に基づいて、直近に実行された実行単位の識別子以外の識別子を優先的に選出する制約の下でいずれかの実行可能な実行単位の識別子を、プロセッサによって実行される実行単位の識別子として選出するとともに、実行単位情報を更新することを特徴とするスケジューリング方法。
  2. 前記実行単位情報が、各プロセッサがアクセス可能なメモリに保持され、
    前記選出および更新は、選出された識別子に対応する実行単位を実行するプロセッサ自身によって行われることを特徴とする請求項1記載のスケジューリング方法。
  3. 実行可否情報は、各実行単位について識別子として1ビットを割り当てたビット列として保持され、
    前記選出および更新は、不可分操作によって行われることを特徴とする請求項1または2記載のスケジューリング方法。
  4. 直近に実行された実行単位に対応するビットが末尾になるようにビット列をローテートし、
    ローテートされたビット列の先頭から順に実行可能な実行単位のビットを検索することによって前記選出を行うことを特徴とする請求項3記載のスケジューリング方法。
  5. マルチプロセッサシステムに含まれる複数のプロセッサのいずれにおいても実行可能な実行対象となる各実行単位のそれぞれが実行可能な状態にあるか、あるいはあるプロセッサで実行中であって別のプロセッサからは実行不可能な状態であるかを、それぞれの実行単位に対して付与された識別子に対応づけて示す実行可否情報と、各実行単位のうちの、直近に実行された実行単位の識別子を示す直近実行情報とを含む実行単位情報を、前記各実行単位とは分離して保持する実行単位情報保持部と、
    実行単位情報に基づいて、直近に実行された実行単位の識別子以外の識別子を優先的に選出する制約の下でいずれかの実行可能な実行単位の識別子を、プロセッサによって実行される実行単位の識別子として選出する実行単位選出部と、
    前記選出に伴い、実行単位情報を更新する実行単位情報更新部とを備えることを特徴とするスケジューリング装置。
  6. 実行単位情報保持部は、各プロセッサがアクセス可能なメモリに実行単位情報を保持し、
    実行単位選出部および実行単位情報更新部は、選出された識別子に対応する実行単位を実行するプロセッサ自身により構成されることを特徴とする請求項5記載のスケジューリング装置。
  7. 実行単位情報保持部は、実行可否情報を、各実行単位について識別子として1ビットを割り当てたビット列として保持し、
    実行単位選出部および実行単位情報更新部は、不可分操作によって前記選出および更新を行うことを特徴とする請求項5または6記載のスケジューリング装置。
  8. 実行単位選出部は、直近に実行された実行単位に対応するビットが末尾になるようにビット列をローテートし、
    ローテートされたビット列の先頭から順に実行可能な実行単位のビットを検索することによって前記選出を行うことを特徴とする請求項7記載のスケジューリング装置。
  9. マルチプロセッサシステムに含まれる複数のプロセッサのいずれにおいても実行可能な実行対象となる各実行単位のそれぞれが実行可能な状態にあるか、あるいはあるプロセッサで実行中であって別のプロセッサからは実行不可能な状態であるかを、それぞれの実行単位に対して付与された識別子に対応づけて示す実行可否情報と、各実行単位のうちの、直近に実行された実行単位の識別子を示す直近実行情報とを含む実行単位情報を、前記各実行単位とは分離して保持する機能と、
    実行単位情報に基づいて、直近に実行された実行単位の識別子以外の識別子を優先的に選出する制約の下でいずれかの実行可能な実行単位の識別子を、プロセッサによって実行される実行単位の識別子として選出するとともに、実行単位情報を更新する機能とをコンピュータに実行せしめることを特徴とするプログラム。
  10. プログラムを記憶した記憶媒体であって、
    前記プログラムは、
    マルチプロセッサシステムに含まれる複数のプロセッサのいずれにおいても実行可能な実行対象となる各実行単位のそれぞれが実行可能な状態にあるか、あるいはあるプロセッサで実行中であって別のプロセッサからは実行不可能な状態であるかを、それぞれの実行単位に対して付与された識別子に対応づけて示す実行可否情報と、各実行単位のうちの、直近に実行された実行単位の識別子を示す直近実行情報とを含む実行単位情報を、前記各実行単位とは分離して保持する機能と、
    実行単位情報に基づいて、直近に実行された実行単位の識別子以外の識別子を優先的に選出する制約の下でいずれかの実行可能な実行単位の識別子を、プロセッサによって実行される実行単位の識別子として選出するとともに、実行単位情報を更新する機能とをコンピュータに実行せしめること特徴とする記憶媒体。
JP2005235582A 2005-08-15 2005-08-15 スケジューリング方法およびスケジューリング装置 Active JP4963018B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2005235582A JP4963018B2 (ja) 2005-08-15 2005-08-15 スケジューリング方法およびスケジューリング装置
CN2006800179477A CN101180609B (zh) 2005-08-15 2006-05-31 调度方法以及调度装置
PCT/JP2006/310907 WO2007020739A1 (ja) 2005-08-15 2006-05-31 スケジューリング方法およびスケジューリング装置
EP06756827A EP1923784A4 (en) 2005-08-15 2006-05-31 SCHEDULING PROCEDURE AND SCHEDULING EQUIPMENT
US11/996,361 US8375390B2 (en) 2005-08-15 2006-05-31 Scheduling method and scheduling apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005235582A JP4963018B2 (ja) 2005-08-15 2005-08-15 スケジューリング方法およびスケジューリング装置

Publications (2)

Publication Number Publication Date
JP2007052511A JP2007052511A (ja) 2007-03-01
JP4963018B2 true JP4963018B2 (ja) 2012-06-27

Family

ID=37757408

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005235582A Active JP4963018B2 (ja) 2005-08-15 2005-08-15 スケジューリング方法およびスケジューリング装置

Country Status (5)

Country Link
US (1) US8375390B2 (ja)
EP (1) EP1923784A4 (ja)
JP (1) JP4963018B2 (ja)
CN (1) CN101180609B (ja)
WO (1) WO2007020739A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7647483B2 (en) 2007-02-20 2010-01-12 Sony Computer Entertainment Inc. Multi-threaded parallel processor methods and apparatus
US8589943B2 (en) 2007-08-15 2013-11-19 Sony Computer Entertainment Inc. Multi-threaded processing with reduced context switching
JP5324934B2 (ja) * 2009-01-16 2013-10-23 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法
US8352946B2 (en) * 2009-08-11 2013-01-08 International Business Machines Corporation Managing migration ready queue associated with each processor based on the migration ready status of the tasks
CN101996082B (zh) * 2009-08-28 2014-06-11 国际商业机器公司 协处理器系统和在本地存储器上加载应用程序的方法
US8056080B2 (en) * 2009-08-31 2011-11-08 International Business Machines Corporation Multi-core/thread work-group computation scheduler
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US9594660B2 (en) 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9218185B2 (en) 2014-03-27 2015-12-22 International Business Machines Corporation Multithreading capability information retrieval
US9804846B2 (en) 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US10101963B2 (en) * 2016-08-16 2018-10-16 Hewlett Packard Enterprise Development Lp Sending and receiving data between processing units

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2253428A5 (ja) * 1973-11-30 1975-06-27 Honeywell Bull Soc Ind
US4796178A (en) * 1985-10-15 1989-01-03 Unisys Corporation Special purpose processor for off-loading many operating system functions in a large data processing system
JP2505526B2 (ja) * 1988-04-11 1996-06-12 沖電気工業株式会社 タスクのビットマップ管理方法
JP2804478B2 (ja) * 1988-05-26 1998-09-24 株式会社日立製作所 タスク制御方式及びオンライン・トランザクション・システム
JPH02242434A (ja) * 1989-03-16 1990-09-26 Hitachi Ltd タスクのスケジューリング方法
JPH0424828A (ja) * 1990-05-21 1992-01-28 Fuji Xerox Co Ltd マルチタスク管理方式
JPH07146799A (ja) 1993-11-22 1995-06-06 Hitachi Ltd マルチタスク・システムにおけるタスク切り換え方法
US20030191794A1 (en) * 2000-02-17 2003-10-09 Brenner Larry Bert Apparatus and method for dispatching fixed priority threads using a global run queue in a multiple run queue system
CN1152306C (zh) * 2001-01-23 2004-06-02 英业达股份有限公司 防止多处理器计算机中各处理器间进程发生冲突的方法
US8566828B2 (en) 2003-12-19 2013-10-22 Stmicroelectronics, Inc. Accelerator for multi-processing system and method
US7802255B2 (en) * 2003-12-19 2010-09-21 Stmicroelectronics, Inc. Thread execution scheduler for multi-processing system and method

Also Published As

Publication number Publication date
US20090031315A1 (en) 2009-01-29
EP1923784A1 (en) 2008-05-21
CN101180609A (zh) 2008-05-14
JP2007052511A (ja) 2007-03-01
US8375390B2 (en) 2013-02-12
EP1923784A4 (en) 2010-02-17
WO2007020739A1 (ja) 2007-02-22
CN101180609B (zh) 2011-06-08

Similar Documents

Publication Publication Date Title
JP4963018B2 (ja) スケジューリング方法およびスケジューリング装置
JP4526412B2 (ja) マルチプロセッサシステムにおけるタスク管理方法および装置
US9588810B2 (en) Parallelism-aware memory request scheduling in shared memory controllers
CN104572568B (zh) 读锁操作方法、写锁操作方法及系统
US20070294702A1 (en) Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US9378069B2 (en) Lock spin wait operation for multi-threaded applications in a multi-core computing environment
WO2011103825A2 (zh) 多处理器系统负载均衡的方法和装置
KR20060132852A (ko) 멀티 프로세서 시스템에서 프로세서 태스크 이동 방법 및장치
CN103729480A (zh) 一种多核实时操作系统多个就绪任务快速查找及调度方法
US20120030430A1 (en) Cache control apparatus, and cache control method
US20130152100A1 (en) Method to guarantee real time processing of soft real-time operating system
US10223269B2 (en) Method and apparatus for preventing bank conflict in memory
JPH11282815A (ja) マルチスレッド計算機システム及びマルチスレッド実行制御方法
JP4926364B2 (ja) ダイナミックマルチストリーミングプロセッサでメモリ操作の原子性を実現するための方法と装置
JP7042105B2 (ja) プログラム実行制御方法および車両制御装置
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
WO2000033175A2 (en) Method for increasing efficiency of multiprocessing systems
KR20230121884A (ko) 어드레스 매핑 인식 태스킹 메커니즘
JP7217341B2 (ja) プロセッサおよびレジスタの継承方法
JPH08292932A (ja) マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法
KR102563648B1 (ko) 멀티 프로세서 시스템 및 그 구동 방법
JP6445876B2 (ja) リソース割当装置、リソース割当システム、および、リソース割当方法
JP6251417B2 (ja) ストレージシステム、及び、記憶制御方法
US11860785B2 (en) Method and system for efficient communication and command system for deferred operation
JP2023179057A (ja) 演算処理装置および演算処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080722

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20101125

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20110127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110712

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110823

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: 20120321

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: 20120321

R150 Certificate of patent or registration of utility model

Ref document number: 4963018

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150406

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250