IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-演算処理装置及び演算処理方法 図1
  • 特開-演算処理装置及び演算処理方法 図2
  • 特開-演算処理装置及び演算処理方法 図3
  • 特開-演算処理装置及び演算処理方法 図4
  • 特開-演算処理装置及び演算処理方法 図5
  • 特開-演算処理装置及び演算処理方法 図6
  • 特開-演算処理装置及び演算処理方法 図7
  • 特開-演算処理装置及び演算処理方法 図8
  • 特開-演算処理装置及び演算処理方法 図9
  • 特開-演算処理装置及び演算処理方法 図10
  • 特開-演算処理装置及び演算処理方法 図11
  • 特開-演算処理装置及び演算処理方法 図12
  • 特開-演算処理装置及び演算処理方法 図13
  • 特開-演算処理装置及び演算処理方法 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024016681
(43)【公開日】2024-02-07
(54)【発明の名称】演算処理装置及び演算処理方法
(51)【国際特許分類】
   G06F 9/52 20060101AFI20240131BHJP
【FI】
G06F9/52 150Z
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2022118978
(22)【出願日】2022-07-26
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】前田 宗則
(57)【要約】
【課題】RCUを用いたCPU間の同期時間を短縮する。
【解決手段】Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、クリティカルセクションを実行中と判定した場合に、スケジューラ123から実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う。
【選択図】図5
【特許請求の範囲】
【請求項1】
Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、
前記クリティカルセクションを実行中と判定した場合に、スケジューラから実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う、
プロセッサを備える、演算処理装置。
【請求項2】
前記プロセッサは、前記クリティカルセクションを実行中と判定し、且つ、前記クリティカルセクションの開始が待機期間よりも前であると判定した場合に、前記メモリ解放処理又は前記メモリ再割り当て処理を行う、
請求項1に記載の演算処理装置。
【請求項3】
前記プロセッサは、前記メモリ解放処理又は前記メモリ再割り当て処理が安全でない場合には、トランザクション競合を発生させて、前記メモリ再割り当て処理をリトライさせる、
請求項1又は2に記載の演算処理装置。
【請求項4】
Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、
前記クリティカルセクションを実行中と判定した場合に、スケジューラから実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う、
処理をコンピュータが実行する、演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置及び演算処理方法に関する。
【背景技術】
【0002】
スレッド間で同期を低オーバーヘッドで行うことができる技術として、Linux(登録商標) OS(Operating System)等で採用されているRCU(Read-Copy-Update)がある。
【0003】
RCUの典型的な応用例としてメモリ解放と再利用がある。あるスレッドがメモリ解放する際、直ちに解放するのではなく、全コアがその領域をアクセスしていないことを確認する処理のキューに入れておき、確認できたら解放することで、安全な再利用を実現できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2003-323415号公報
【特許文献2】特開2011-44161号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、全コアがその領域をアクセスしていないことを確認するため、待機期間(Grace Period;GP)が終了するまで、メモリ解放処理を解放待ちキューに入れて待たなければならない。GP終了時より前に安全な解放が可能な場合には、無駄な待ち時間があるということである。これにより、メモリ枯渇などの要因になるおそれがある。
【0006】
1つの側面では、RCUを用いたCPU(Central Processing Unit)間の同期時間を短縮することを目的とする。
【課題を解決するための手段】
【0007】
1つの側面では、演算処理装置は、Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、前記クリティカルセクションを実行中と判定した場合に、スケジューラから実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う。
【発明の効果】
【0008】
1つの側面では、RCUを用いたCPU間の同期時間を短縮することができる。
【図面の簡単な説明】
【0009】
図1】RCUにおいて用いられるwriter側の疑似コードを例示する図である。
図2】RCUにおけるGP前倒し対策を説明する図である。
図3】実施形態としての演算処理装置のハードウェア構成例を模式的に示すブロック図である。
図4図1に示したプロセッサ及びメモリの構成例を模式的に示すブロック図である。
図5図1に示した演算処理装置の機能構成例を模式的に示すブロック図である。
図6図5に示したピンダウンHTM機構の構成例を模式的に示すブロック図である。
図7】実施形態としてのReaderトランザクションにおける割込みハンドラ処理を説明するフローチャートである。
図8】実施形態としてのReaderトランザクションにおけるクリティカルセクションの終了処理を説明するフローチャートである。
図9図5に示した投機的メモリ管理機構において実行される擬似コードの第1の例を示す図である。
図10図5に示した投機的メモリ管理機構において実行される擬似コードの第2の例を示す図である。
図11図5に示した投機的メモリ管理機構における処理を説明する図である。
図12図5に示した投機的メモリ管理機構における処理を説明する図である。
図13図5に示した投機的メモリ管理機構における処理を説明する図である。
図14】変形例におけるメモリの分割処理を説明する図である。
【発明を実施するための形態】
【0010】
〔A〕関連例
RCUは、共有データの読み出しと更新(及び再利用)をロックを使わずに並行実行できる方式である。
【0011】
RCUでは、更新(Update)における古いデータの除去(Removal)と再利用(Reclamation)とを時間的に分離し、そのために待機期間(GP;「猶予期間」と称されてもよい。)が設定される。また、RCUでは、N回目のGP開始前に存在した全てのreader(リーダーサイド・クリティカルセクション実行者)が終了したことが検出されて、N回目のGP終了を検出する手続きが行われる。
【0012】
共有メモリへのアクセス方法であるハードウェアトランザクショナルメモリ(HTM)は、トランザクションという同期単位を持ち、トランザクション開始命令と終了命令とを持つ。
【0013】
トランザクション内で発行されたメモリwriteは、CPUコアローカルに保持されており、トランザクションcommitに成功したなら、atomic(=不可分)にメインメモリに反映される。
【0014】
トランザクション同士が競合した場合には、トランザクション失敗となり、CPUコアローカルに保持されたメモリへの書き込みは全て破棄される(別言すれば、メインメモリには反映されない)。
【0015】
トランザクションの競合は、同じアドレスに対してwriteが別々のトランザクションで発生した場合、及び、同じアドレスに対してreadとwriteが別々のトランザクションで発生した場合に発生する。
【0016】
HTMにおいて用いられるアドレスは、実装上キャッシュブロック単位で管理される。したがって、厳密に同じアドレスでなくても競合は検出される。
【0017】
HTMは、読み出しキャッシュブロック集合を保持するread setと書き込みキャッシュブロック集合を保持するwrite setとを持つ。
【0018】
図1は、RCUにおいて用いられるwriter側の疑似コードを例示する図である。
【0019】
RCUでは、各コアのreaderは、静止状態(別言すれば、共有されているメモリにアクセスしていない状態)からクリティカルセクションを実行し、終われば静止状態に戻るという処理が繰り返される。writerは、全コアが静止状態を1回以上経験するまで符号A1に示すsynchronize_rcuで待つ。
【0020】
図2は、RCUにおけるGP前倒し対策を説明する図である。
【0021】
各コアのRCUのreaderの論理的なクリティカルセクションは、rd_read_lock(符号B1)とrd_read_unlock(符号B2)とで挟まれた部分である。
【0022】
rd_read_unlockでは、静止状態への遷移を明示的にwriter側やRCUスケジューラに通知しない。静止状態の検出は、プリエンプションを含めて、符号B3に示すコンテキストスイッチ(CS)の発生をRCUスケジューラが確認することで行われる。
【0023】
符号B4に示すGP前倒し対策#1では、実施形態で後述する処理が実行される。一方、符号B5に示すGP前倒し対策#2は、論理的に静止状態だが、CSが発生しないので静止状態として扱われない部分である。
【0024】
GP前倒し対策#1では、論理的クリティカルセクション(rd_read_lockからrd_read_unlockまで)においてそもそも時間がかかっている。この区間で共有変数を含むメモリ領域を開放して、再利用処理が進行し、且つ/又は、別の処理で再割り当てされたとき、実際にwriteで破壊されるまでは問題にならない。
【0025】
〔B〕実施形態
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。以下、各図において同一の符号は同様の機能を有するため、その説明を省略する場合がある。
【0026】
図3は、実施形態としての演算処理装置1のハードウェア構成例を模式的に示すブロック図である。
【0027】
コンピュータ装置10は、演算処理装置1,ドライブ装置15及び表示装置16を備える。
【0028】
演算処理装置1は、プロセッサ11,メモリ12,ストレージデバイス13及びネットワークデバイス14を備える。プロセッサ11,メモリ12,ストレージデバイス13,ネットワークデバイス14,ドライブ装置15及び表示装置16は、バスで互いに通信可能に接続されてよい。
【0029】
プロセッサ11は、例示的に、種々の制御や演算を行なう処理装置であり、メモリ12に格納されたOSやプログラムを実行することにより、種々の機能を実現する。
【0030】
なお、種々の機能を実現するためのプログラムは、例えばフレキシブルディスク、CD(CD-ROM、CD-R、CD-RW等)、DVD(DVD-ROM、DVD-RAM、DVD-R、DVD+R、DVD-RW、DVD+RW、HD DVD等)、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ(本実施形態ではプロセッサ11)は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【0031】
種々の機能を実現する際には、内部記憶装置(本実施形態ではメモリ12)に格納されたプログラムがコンピュータ(本実施形態ではプロセッサ11)によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【0032】
プロセッサ11は、演算処理装置1全体の動作を制御する。プロセッサ11は、マルチプロセッサであってもよい。プロセッサ11は、例えばCentral Processing Unit(CPU)やMicro Processing Unit(MPU),Digital Signal Processor(DSP),Application Specific Integrated Circuit(ASIC),Programmable Logic Device(PLD),Field Programmable Gate Array(FPGA)のいずれか一つであってもよい。また、プロセッサ11は、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
【0033】
メモリ12は、例示的に、Read Only Memory(ROM)及びRandom Access Memory(RAM)を含む記憶装置である。RAMは、例えばDynamic RAM(DRAM)であってよい。メモリ12のROMには、Basic Input/Output System(BIOS)等のプログラムが書き込まれてよい。メモリ12のソフトウェアプログラムは、プロセッサ11に適宜に読み込まれて実行されてよい。また、メモリ12のRAMは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
【0034】
ストレージデバイス13は、データを読み書き可能に記憶する装置であり、例えば、Serial Attached SCSI-Hard Disk Drive(SAS-HDD)133やSolid State Drive(SSD)132,Storage Class Memory(SCM)(不図示)が用いられてよい。
【0035】
ネットワークデバイス14は、演算処理装置1をインターネットやLocal Area Network(LAN),インターコネクト等のネットワークと接続し、このネットワークを介して図示しない外部装置と通信を行なうためのインタフェース装置である。ネットワークデバイス14としては、例えば、有線LANや無線LAN,Wireless Wide Area Network(WWAN)のネットワークの規格に対応する各種インタフェースカードを用いることができる。
【0036】
ドライブ装置15は、記録媒体151が装着可能に構成される。ドライブ装置15は、記録媒体151が装着された状態において、記録媒体151に記録されている情報を読み取り可能に構成される。本例では、記録媒体151は可搬性を有する。例えば、記録媒体151は、フレキシブルディスク、光ディスク、磁気ディスク、光磁気ディスク、又は、半導体メモリ等である。
【0037】
表示装置16は、液晶ディスプレイやOrganic Light-Emitting Diode(OLED)ディスプレイ,Cathode Ray Tube(CRT),電子ペーパーディスプレイ等であり、オペレータ等に対する各種情報を表示する。表示装置16は不図示の入力装置と組み合わされたものでもよく、例えば、タッチパネルでもよい。
【0038】
図4は、図1に示したプロセッサ11及びメモリ12の構成例を模式的に示すブロック図である。
【0039】
プロセッサ11は、複数組(図4に示す例では2組)のプロセッサコア21,キャッシュ管理機構101及びL1キャッシュ102を備える。プロセッサコア21は、ピンダウンHTM機構111を備えてよい。
【0040】
プロセッサコア21,キャッシュ管理機構101及びL1キャッシュ102の組は、キャッシュ一貫性ネットワーク100を介して、メモリ12及びキャッシュ一貫性制御機構110と接続される。キャッシュ一貫性制御機構110は、キャッシュ一貫性ネットワーク100を介して、各L1キャッシュ102間の一貫性を制御する。
【0041】
ピンダウンHTM機構111,キャッシュ管理機構101及びL1キャッシュ102については、図6等を用いて後述する。
【0042】
図5は、図1に示した演算処理装置1の機能構成例を模式的に示すブロック図である。
【0043】
演算処理装置1は、ハードウェアとして、例えば、ピンダウンHTM機構111を含むプロセッサコア21及びタイマー(又はPerformance Monitoring(PMOM;性能モニタ機構))112を備える。
【0044】
また、演算処理装置1は、ソフトウェアとして、例えば、投機的メモリ管理機構121,割込みハンドラ122及びRCUスケジューラ123を備える。また、演算処理装置1は、ソフトウェアとして、例えば、ユーザプログラム131(ユーザプログラム#1~#3)を実行する。
【0045】
タイマー(又はPMON)112は、Reader-sideのユーザプログラム#1に対して、締切時間又は命令数の設定を行う。
【0046】
また、タイマー(又はPMON)112は、ユーザプログラム#1に対して、割込みを入れる。
【0047】
割込みハンドラ122は、ピンダウンHTM機構111に対して、ユーザプログラム#1についてトランザクショナル読み込み及びピン設定を行う。
【0048】
割込みハンドラ122は、RCUを用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定する。
【0049】
RCUスケジューラ123は、ユーザプログラム#1からCS検出を行うと共に、Writer-sideのユーザプログラム#2に対してGP終了通知を行う。
【0050】
投機的メモリ管理機構121は、ユーザプログラム#2から投機的メモリの返却を受け付ける。
【0051】
また、投機的メモリ管理機構121は、ピンダウンHTM機構111に対してトランザクショナル書き込みを行うと共に、ピンダウンHTM機構111からトランザクション失敗通知を受け取る。
【0052】
更に、投機的メモリ管理機構121は、ユーザプログラム#3からメモリ割り当て要求を受けると共に、ユーザプログラム#3に対してメモリ割り当てを行う。
【0053】
投機的メモリ管理機構121は、クリティカルセクションを実行中と判定した場合に、RCUスケジューラ123から実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う。
【0054】
投機的メモリ管理機構121は、クリティカルセクションを実行中と判定し、且つ、クリティカルセクションの開始が待機期間(GP)よりも前であると判定した場合に、メモリ解放処理又はメモリ再割り当て処理を行ってよい。
【0055】
また、投機的メモリ管理機構121は、メモリ解放処理又はメモリ再割り当て処理が安全でない場合には、トランザクション競合を発生させて、メモリ再割り当て処理をリトライさせてよい。
【0056】
図6は、図5に示したピンダウンHTM機構111の構成例を模式的に示すブロック図である。
【0057】
HTMは、競合を検出した際にメモリ書き換えを外部に漏らさず、複数アドレスのメモリ参照でき、競合発生時にキャッシュブロックのrequesterが競合で勝つ(requester-win)ポリシーが実装されている。これらの理由により、本実施形態では、プロセッサコア21においてHTMが使用されている。
【0058】
Read-SetとWrite-Setの増大からエントリPurgeが発生してもトランザクション失敗としないようにする必要がある。また、特定のアドレスを高優先度とすることで、purgeから保護し、そのアドレスに対する競合を必ず検出できるようにする必要がある。これらの理由により、本実施形態では、HTMの拡張が行われる。
【0059】
Read SetとWrite Setはハードウェア上に実装されており、リソースサイズは固定的であるのが通例である。
【0060】
そこで、キャッシュブロックに優先度を設定し、キャッシュブロックがあふれた場合は最低優先度のものをパージするよう、ピンダウンHTM機構111は、図6に示すような優先度キュー211~213を別に持ってよい。図6に示す例では、プロセッサコア21からのrequest, Optional request, response data毎に優先度キュー211~213がそれぞれ割り当てられている。
【0061】
ピンダウンHTM機構111は、RCUのメモリ解放再割り当てについて、Readerとメモリ再割り当て機構(Updater)とのトランザクション競合を確実に検出し、競合発生時には常にUpdater側のみトランザクション失敗とする。
【0062】
また、ピンダウンHTM機構111は、Readerのクリティカルセクション途中からトランザクションを実行する手段を有してよく、Updaterの処理をトランザクションとし、トランザクション失敗で再割り当てをサスペンド又はリトライする手段を有してよい。
【0063】
ピンダウンHTM機構111は、Write setからエントリをpurgeするとき、キャッシュブロックのトランザクションTagをoffにし、通常のキャッシュブロックと同じ扱いとする。トランザクションでアクセスされているならばそのトランザクションを失敗させ、Write Back / Write Through / Write Combine等の動作を行う。
【0064】
図6において、キャッシュ管理機構101は、Read set Priority Queue及びWrite set Priority Queueを管理する。キャッシュ管理機構101は、キャッシュ一貫性ネットワーク100を参照して、トランザクショナルキャッシュ102aのレコードをselectし、selectしたレコードをレギュラーL1キャッシュ102bにおいてpurgeする。
【0065】
Readerトランザクションにおいて、クリティカルセクションは、rd_read_lock/rd_read_unlockで囲まれる。クリティカルセクションでは、全ての割込みを禁止せず、以下のトリップカウンタによる割込みは許可するようにしておく。これはrd_read_lock()の実装に依存する。
【0066】
クリティカルセクションの先頭でタイマー割込み又は実行命令数のトリップカウンタにより割込みが設定され(例えば、1秒や10^9カウント)、enableにされる。Intel(登録商標)製のプロセッサには、Performance Monitor Countersという性能モニタ用コントローラがあり、これを用いてCPUコアに割込みを入れることができる。
【0067】
クリティカルセクションの終わりで、上記割込みがdisableされる。こうすることで、クリティカルセクションが短い場合にはロジックと性能に影響がなくなる。
【0068】
実施形態としてのReaderトランザクションにおける割込みハンドラ処理を、図7に示すフローチャート(ステップS1~S8)に従って説明する。
【0069】
割込みハンドラ122は、割込み先CPUがクリティカルセクション内を実行しているか否かを判定する(ステップS1)。
【0070】
割込み先CPUがクリティカルセクション内を実行していない場合には(ステップS1のNOルート参照)、割込みから復帰して(ステップS2)、Readerトランザクションにおける割込みハンドラ処理は終了する。
【0071】
割込み先CPUがクリティカルセクション内を実行している場合には(ステップS1のYESルート参照)、割込みハンドラ122は、クリティカルセクションの開始がGPよりも前か否かを判定する(ステップS3)。
【0072】
クリティカルセクションの開始がGPよりも前でない場合には(ステップS3のNOルート参照)、割込みから復帰して(ステップS4)、Readerトランザクションにおける割込みハンドラ処理は終了する。
【0073】
クリティカルセクションの開始がGPよりも前である場合には(ステップS3のYESルート参照)、割込みハンドラ122は、CSカウンタのインクリメントを行う(ステップS5)。
【0074】
割込みハンドラ122は、トランザクションが開始されると、TX_begin(図2に示したGP前倒し対策#1)のコードを実行する(ステップS6)。なお、トランザクション失敗の想定は不要のため、フォールバックアドレス指定は不要である。
【0075】
割込みハンドラ122は、TX_read_address(data_addr)について引数のアドレス先を読み出し、キャッシュに載せ、当該のキャッシュブロックの優先度を高に上書きする(ステップS7)。なお、data_addrは、RCUで保護されている、現在アクセス中のデータ先頭のアドレスである。
【0076】
そして、割込みから復帰して(ステップS8)、Readerトランザクションにおける割込みハンドラ処理は終了する。
【0077】
次に、実施形態としてのReaderトランザクションにおけるクリティカルセクションの終了処理を図8に示すフローチャート(ステップS11~S13)に従って説明する。
【0078】
割込みハンドラ122は、Readerトランザクションの実行中であるか否かを判定する(ステップS11)。
【0079】
Readerトランザクションの実行中でない場合には(ステップS11のNOルート参照)、処理はステップS13へ進む。
【0080】
一方、Readerトランザクションの実行中である場合には(ステップS11のYESルート参照)、割込みハンドラ122は、トランザクションを終了し、TX_endのコードを実行する(ステップS12)。
【0081】
割込みハンドラ122は、トランザクション用割込みdisableと設定削除を行う(ステップS13)。そして、Readerトランザクションにおけるクリティカルセクションの終了処理は終了する。
【0082】
ここで、図1に示したwriter側の疑似コードを再び参照して、Updaterトランザクションの処理を説明する。
【0083】
Writerサイドの処理と同様に、Synchronize_rcu()はGPendを契機にサスペンド状態から復帰する。なお、GPendはCPUコアの一部がReaderトランザクションを開始したことで早まっている。
【0084】
kfreeは引数に解放されるべきアドレスpを受け取り、再割り当て用の管理構造に登録され、kmalloc注関数で割り当てられる。pが指すメモリブロックへの書き込みはReaderトランザクションの終了まで遅延される。なお、Linux(登録商標)にkfree/kmallocと同名の関数が存在するが、これらの実際の実装に依存するものではない。
【0085】
図9は、図5に示した投機的メモリ管理機構121において実行される擬似コードの第1の例を示す図である。
【0086】
メモリ解放、再割り当て、再使用の一連の処理でトランザクションとして実行されるべきところは、kfree / kmallocの実装に依存する。以下は一つの実施例として、kfree(符号C1)ではCPUコアローカルに用意されたリングバッファの末尾にポインタpを格納し、kmalloc(符号C2)はリングバッファの先頭からポインタを取り出す実装がされているケースを開示する。
【0087】
図10は、図5に示した投機的メモリ管理機構121において実行される擬似コードの第2の例を示す図である。
【0088】
図10において破線枠で囲われた部分が本実施形態における工夫点となる。
【0089】
図9に示したkmallocでは、リングバッファの先頭からポインタを取り出して呼び出し元に返す。一方、図10に示す例では、Updaterトランザクションが開始され、pの指すアドレスに書き込みが行われる。
【0090】
Readerトランザクションは、Updaterに先だってアドレスpのキャッシュブロックがread setに高優先で入れられており、Readerトランザクションの終了前にPurgeされていることはない。
【0091】
アドレスpへの書き込み(ダミー)は、キャッシュブロックをInvalidateし、Readerトランザクションが存在するときは、Updaterトランザクションを失敗TXABORTにする。
【0092】
この結果、一旦取り出されたpは、kfree(図10の太線枠)の呼び出しによって再度リングバッファの末尾に移動する。
【0093】
再帰的なkmallocの呼び出しにより、安全なポインタのみがkmallocの呼び出し元に返される。なお、安全なポインタとは、トランザクションが成功したポインタである。
【0094】
図11図13は、図5に示した投機的メモリ管理機構121における処理を説明する図である。
【0095】
図11図13において、投機的メモリ管理機構121は、リングバッファ3に対して、それぞれ1つの読み出し位置及び書き込み位置を参照している。リングバッファ3の各領域には、メモリ31(例えば、メモリa,b)が割り当てられているか、いずれのメモリ31も割り当てられていない。
【0096】
図11に示す例では、投機的メモリ管理機構121の読み出し位置はメモリaが割り当てられた領域を参照しており、書き込み位置はいずれのメモリ31も割り当てられていない領域を参照している。
【0097】
図12において、符号D1に示すように、メモリ割り当て要求時に、Readerがメモリaに対するクリティカルセクションの実行を終了していた場合には、メモリaがリングバッファ3から図5に示したユーザプログラム#3に渡されて投機実行が行われる。そして、投機的メモリ管理機構121の読み出し位置は、メモリbが割り当てられている領域に移動する。
【0098】
図13において、投機的メモリ管理機構121は、メモリ割り当て要求時にReaderがメモリaに対するクリティカルセクションの実行中だった場合に、リングバッファ3の書き込み位置にメモリaを割り当てる。
【0099】
すなわち、メモリaへのdummy書き込みは投機失敗を引き起こし、これを検出してリングバッファ3の末尾にメモリaが戻される。その後、メモリbに対して再帰的に割り当てて投機実行される。
【0100】
また、投機的メモリ管理機構121の書き込み位置は、リングバッファ3においていずれのメモリ31も割り当てられていない領域に移動する。
【0101】
図14は、変形例におけるメモリの分割処理を説明する図である。
【0102】
本変形例では、メモリを分割して再利用する方式(segregated memory management)が利用される。
【0103】
符号E1に示すように、1Kバイトメモリが512バイトx1、256バイトx1、128バイトx2に分割して管理される。
【0104】
このような場合に、符号E2に示すように、TX_read_address()が分割したアドレスに対して呼び出される。そして、kfreeにおいて、TX_read_address()が分割したリストにそれぞれつながれる。
【0105】
〔C〕効果
上述した実施形態における演算処理装置及び演算処理方法によれば、例えば以下の作用効果を奏することができる。
【0106】
割込みハンドラ122は、RCUを用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定する。投機的メモリ管理機構121は、クリティカルセクションを実行中と判定した場合に、RCUスケジューラ123から実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う。
【0107】
これにより、RCUを用いたCPU間の同期時間を短縮することができる。具体的には、readerクリティカルセクションの実行時間に上限を設定し、その時間が経過した時点でクリティカルセクションが終わっていなければ投機的に終わったことにすることで、GP区間の上限を設定することができ、メモリ枯渇を改善することができる。
【0108】
投機的メモリ管理機構121は、クリティカルセクションを実行中と判定し、且つ、クリティカルセクションの開始が待機期間(GP)よりも前であると判定した場合に、メモリ解放処理又はメモリ再割り当て処理を行う。
【0109】
これにより、メモリ解放処理又はメモリ再割り当て処理を投機実行で適切に行うことができる。
【0110】
投機的メモリ管理機構121は、メモリ解放処理又はメモリ再割り当て処理が安全でない場合には、トランザクション競合を発生させて、メモリ再割り当て処理をリトライさせる。
【0111】
これにより、解放されたメモリが再利用される時点で投機的なクリティカルセクションの実行が終わっていることを確認することで、メモリの解放・再利用の処理とreaderのクリティカルセクション実行が並行実行され、全体の実行時間が短縮し、安全なメモリ割り当てを保証することができる。
【0112】
〔D〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【0113】
〔E〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【0114】
(付記1)
Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、
前記クリティカルセクションを実行中と判定した場合に、スケジューラから実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う、
プロセッサを備える、演算処理装置。
【0115】
(付記2)
前記プロセッサは、前記クリティカルセクションを実行中と判定し、且つ、前記クリティカルセクションの開始が待機期間よりも前であると判定した場合に、前記メモリ解放処理又は前記メモリ再割り当て処理を行う、
付記1に記載の演算処理装置。
【0116】
(付記3)
前記プロセッサは、前記メモリ解放処理又は前記メモリ再割り当て処理が安全でない場合には、トランザクション競合を発生させて、前記メモリ再割り当て処理をリトライさせる、
付記1又は2に記載の演算処理装置。
【0117】
(付記4)
Read-Copy-Update(RCU)を用いたスレッド間同期において、クリティカルセクションを実行しているか否かを判定し、
前記クリティカルセクションを実行中と判定した場合に、スケジューラから実行されるメモリ解放処理又はメモリ再割り当て処理を投機実行で行う、
処理をコンピュータが実行する、演算処理方法。
【0118】
(付記5)
前記クリティカルセクションを実行中と判定し、且つ、前記クリティカルセクションの開始が待機期間よりも前であると判定した場合に、前記メモリ解放処理又は前記メモリ再割り当て処理を行う、
処理を前記コンピュータが実行する、付記4に記載の演算処理方法。
【0119】
(付記6)
前記メモリ解放処理又は前記メモリ再割り当て処理が安全でない場合には、トランザクション競合を発生させて、前記メモリ再割り当て処理をリトライさせる、
処理を前記コンピュータが実行する、付記4又は5に記載の演算処理方法。
【符号の説明】
【0120】
1 :演算処理装置
3 :リングバッファ
10 :コンピュータ装置
11 :プロセッサ
12,31 :メモリ
13 :ストレージデバイス
14 :ネットワークデバイス
15 :ドライブ装置
16 :表示装置
21 :プロセッサコア
100 :キャッシュ一貫性ネットワーク
101 :キャッシュ管理機構
102 :L1キャッシュ
102a :トランザクショナルキャッシュ
102b :レギュラーL1キャッシュ
110 :キャッシュ一貫性制御機構
111 :ピンダウンHTM機構
112 :タイマー又はPMON
121 :投機的メモリ管理機構
122 :割込みハンドラ
123 :RCUスケジューラ
131 :ユーザプログラム
132 :SSD
133 :SAS-HDD
151 :記録媒体
211~213:優先度キュー
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14