JP6955163B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP6955163B2
JP6955163B2 JP2017248925A JP2017248925A JP6955163B2 JP 6955163 B2 JP6955163 B2 JP 6955163B2 JP 2017248925 A JP2017248925 A JP 2017248925A JP 2017248925 A JP2017248925 A JP 2017248925A JP 6955163 B2 JP6955163 B2 JP 6955163B2
Authority
JP
Japan
Prior art keywords
polling
executed
input
polling process
processor
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
JP2017248925A
Other languages
English (en)
Other versions
JP2019114173A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017248925A priority Critical patent/JP6955163B2/ja
Priority to US16/206,181 priority patent/US10545890B2/en
Publication of JP2019114173A publication Critical patent/JP2019114173A/ja
Application granted granted Critical
Publication of JP6955163B2 publication Critical patent/JP6955163B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/22Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling
    • G06F13/225Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling with priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
    • 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/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4818Priority circuits therefor
    • 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/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4825Interrupt from clock, e.g. time of day
    • 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
    • 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/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Bus Control (AREA)

Description

本発明は,情報処理装置、情報処理方法及びプログラムに関する。
コンピュータやサーバなどの情報処理装置は、周辺デバイスや他のノード(コンピュータやサーバ)からデータを受信するI/O処理を実行する。I/O処理において、周辺デバイスや他のノードからのデータの受信イベントを検出する方法として、所定時間毎に受信キューをポーリングする処理と、データの受信イベント時にCPU割込みを発生させる処理とがある。
I/O処理については、以下の特許文献に記載がある。但し、特許文献5は公知例ではない。
特表2014−531081号公報 国際公開第2009/060530号 特開2009−238001号公報 国際公開第2008/126138号 特願2017−136514(2017年7月12日出願)
ポーリングによる受信イベントの発生の検出処理は、OS(Operating System)のカーネルで実行され、CPU割り込みのようなCPU内のレジスタ等のコンテキストの切り替え(コンテキストスイッチ)処理が発生せず、受信から高速にI/O処理を行うことができる。但し、CPUがポーリング処理を繰り返し実行するためCPUの負担が大きく、他の処理の効率低下を招く。
一方、CPU割り込みによる受信イベントの発生の検出処理は、ポーリング処理のようにCPUが繰り返し実行する必要がなく、CPUの負担が小さいので、他の処理の効率が向上する。但し、受信イベントが発生するとCPU割り込みが発生し、割込みハンドラによりCPUのコンテキストスイッチ処理が行われるので、受信後高速にI/O処理を行うことができない。
そこで,実施の形態の第1の側面の目的は,高速なI/O処理とCPUの高い処理効率を有する情報処理装置、情報処理方法及びプログラムを提供することにある。
本実施の形態の第1の側面は,メモリと、前記メモリにアクセス可能な複数のプロセッサコアとを有し、前記複数のプロセッサコアそれぞれは、
前記プロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、情報処理装置である。
第1の側面によれば,高速なI/O処理とCPUの高い処理効率を有する情報処理装置を提供できる。
本実施の形態における情報処理装置の概略構成を示す図である。 コンピュータ1のプロセッサCPU_0、CPU_1の内部構成を示す図である。 本実施の形態例におけるプロセッサが実行するOS内のカーネルのプログラム例を示す図である。 第1の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。 プロセッサのコアが2個の場合の通常のプロセスとポーリングプロセスの関係を示す図である。 プロセス・スケジューラの処理のフローチャートを示す図である。 プロセス・スケジューラとディスパッチャの制御例を示す図である。 プロセス・スケジューラとディスパッチャの制御例を示す図である。 デバイス・ドライバ内のI/Oドライバの処理のフローチャートを示す図である。 ポーリングプロセスの処理のフローチャートを示す図である。 ポーリングプロセスによるI/O処理を行う例を示す図である。 ポーリングプロセスによるI/O処理を行う場合の、I/O要求からI/O処理までのシーケンスフローチャートを示す図である。 CPU割り込みによるI/O処理を行う例を示す図である。 CPU割り込みによるI/O処理を行う場合の、I/O要求からI/O処理までのシーケンスフローチャートを示す図である。 第2の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。 第3の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。 第4の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。 第5の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。
図1は、本実施の形態における情報処理装置の概略構成を示す図である。情報処理装置(コンピュータ、サーバまたはノード)1は、演算処理装置であるCPU(Central Processing Unit)チップ10と、DRAM等のメインメモリ12と、周辺デバイスインターフェース14と、それらを接続するバス16とを有する。CPUチップ10は、以下プロセッサと称する。また、コンピュータ1は、ノードNODE_0でもある。
コンピュータ1は、更に、ハードディスクHDDやSSD(Solid State Device)などの大容量のストレージデバイス20、20_1、20_2を有し、ストレージデバイスは周辺デバイスインターフェース14に接続される。ストレージデバイス20_1、20_2には、それぞれOSとアプリケーションプログラム等が記憶され、コンピュータ1が起動する時、これらのOSとアプリケーションプログラムはメインメモリに展開され、プロセッサ10により実行される。
周辺デバイスインターフェース14には、更に、ネットワークデバイスである高速インターコネクタ22が接続され、ネットワークインタフェースカード(NIC)などの別の周辺デバイス32や、他のノード30が、高速インターコネクタ22を介してコンピュータ1に接続される。
スーパーコンピュータなどのHPC(High Performance Computer)では、複数のノードNODE_0、30が、InfiniBand等のネットワークデバイスである高速インターコネクタを介して互いに接続され、ノード間でデータを高速に転送することが行われる。また、HPCは、ハードディスクに代替されているSSD(Solid State Device)を、NVM Express(Non-Volatile Memory Express、NVMe)などの高速インターフェースを介して周辺デバイスインターフェース14に接続し、SSDに対するレイテンシを短縮する。
上記のように、HPCは、高速インターコネクタや高速インターフェースを介して周辺デバイスや他のノードと高速のI/O処理を行う。
I/O処理において、プロセッサ10が発行したI/O要求に対するデータやパケットの受信を検出する方法として、第1に、プロセッサが実行するOS内のカーネルが、受信キューへのデータやパケットの受信を定期的にチェックするポーリングプロセスと、第2に、周辺デバイスやプロセッサ内のメモリ制御回路が受信キューへの受信完了時に発行するCPU割り込みによる処理とがある。
ポーリングプロセスによる受信イベントの検出処理は、OSのカーネルで実行され、CPU割り込みで行われるCPU内のレジスタ等のコンテキストスイッチの処理がなく、高速にI/O処理を行うことができる。但し、CPUがポーリングプロセスを実行するためCPUの負担増となり、他の処理の実行効率の低下を招く。
一方、CPU割り込みによる受信イベントの検出処理は、ポーリングプロセスのようにCPUが繰り返し実行する必要がなくCPUの負担が小さい。但し、受信イベントが発生するとCPU割り込みが発生し、割込みハンドラによりCPUのコンテキストスイッチが行われ、I/O処理の高速化が実現できない。
したがって、HPCは、高速のI/O処理を実現するためには、カーネルのポーリングプロセスにより受信イベントを検出することが望ましい。但し、CPUの負担増となり他のプロセスの実行効率の低下を招く。
図2は、コンピュータ1のプロセッサCPU_0、CPU_1の内部構成を示す図である。プロセッサCPU_0は、複数のコアCORE_0, CORE_1を有し、コアは、命令をフェッチし、デコードし、データをI/O要求でロードし、データに対して演算処理を実行する。図2のコアの数は一例である。また、プロセッサCPU_0は、キャッシュ制御回路とキャッシュメモリを有するキャッシュCACHEと、メインメモリ12へのアクセスを制御するメモリコントローラMCと、プロセッサ外部の周辺デバイスや他のノードとのI/O要求のインターフェースであるI/O制御回路11とを有する。
図2の例では、周辺デバイスインターフェース14には、高速インターフェースを有するSSDである高速ストレージ24が接続され、さらに、図1と同様に高速インターコネクタ22が接続される。高速インターコネクタ22には、周辺デバイス32や他のノード30が接続される。
図2において、コアCORE_0, CORE_1がI/O要求を発行すると、キャッシュCACHEでキャッシュミスになると、キャッシュ制御回路がI/O要求先にI/O要求を発行する。I/O要求先がメインメモリの場合は、メモリコントローラMCを介してメインメモリM_MEMにI/O要求のコマンドを発行する。一方、I/O要求先が高速ストレージ24や周辺デバイス32や他のノード30の場合は、メモリコントローラMCを介してI/O要求先にI/O要求が発行される。
I/O要求先がメインメモリの場合、メインメモリからリードされたデータはキャッシュCACHE内のキャッシュ制御回路に応答され、キャッシュメモリに登録されると共に、I/O要求元のコアにデータ応答される。また、I/O要求先が周辺デバイスや他のノードの場合、I/O要求先からリードされたデータは、I/O制御回路11とメモリコントローラMCを介して、メインメモリ内の受信キューに記憶される。
図3は、本実施の形態例におけるプロセッサが実行するOS内のカーネルのプログラム例を示す図である。カーネルは、前述のストレージ20_1内に記憶され、コンピュータの起動時にメインメモリに展開されプロセッサのコアにより実行される。
カーネルは、例えば、プロセス・スケジューラ41と、プロセスのディスパッチャ42と、アイドルプロセス43と、割込みルーティン44と、ポーリングプロセス45とを有する。本実施の形態では、CPUの各コアが実行する処理単位を「プロセス」と称する。「プロセス」は「タスク」とも称される。
プロセス・スケジューラ41は、プロセッサにより実行され、アプリケーションプログラムから生成される様々なプロセスの実行順を、例えばその優先度(実行優先度)に基づいてスケジューリングし、実行キュー(RUNキュー)RUN_QUE_0, RUN_QU_1のスロットにプロセスへのリンク(リンク先情報)を登録する。RUNキューの各スロットは実行可能なプロセスの実行優先度に対応付けられる。プロセス・スケジューラは、例えば新たなプロセスの実行優先度に対応するスロットがない場合、新たなスロットに新たなプロセスを対応付け、他のスロットとの順番をリシャッフルする。また、RUNキューは、例えばコア毎に設けられるが、複数のコアを有するプロセッサ毎に設けられても良い。RUNキューは、メインメモリM_MEM内に格納されてもよい。
ディスパッチャ42は、プロセッサにより実行され、RUNキューに登録されたプロセスを所定の条件が満たされたときに、プロセッサのコアにディスパッチし実行させる。
アイドルプロセス43は、プロセッサのコアが実行すべきプロセスが存在しない場合に、そのプロセッサのコアにより実行される。アイドルプロセスは、例えば省電力モードでの動作などを実行する。
割込みルーティン44は、プロセッサにより実行され、プロセッサに割込みが発生すると、割込みの原因を判定し、割込み原因に対応する処理を実行する。プロセッサ割込みが発生すると、プロセッサのコア内のコンテキストの切り替えが行われ、そのコアにより割込みルーティンが実行される。
ポーリングプロセス45は、プロセッサにより実行され、I/O要求先からのデータやパケットが格納される受信キューを定期的にチェックし、データやパケットの受信イベントを検出し、例えば、対応するI/O処理の関数をコールする、または自らI/O処理を実行する。そのためポーリングプロセス45は、ポーリング先のアドレスを有するポーリングリストPOL_LST_0〜POL_LST_2を参照して、ポーリング先の受信イベントの発生を判定する。ポーリングリストは、例えば、初期設定でメインメモリM_MEM内に格納されてもよい。
コンピュータの周辺デバイスインターフェース14に周辺デバイスが接続される場合、その周辺デバイスを制御するプログラムであるデバイス・ドライバDDR_0〜DDR_2が、カーネル内に追加される。デバイス・ドライバは、自分宛てのI/O要求に応答して、周辺デバイスを制御する。周辺デバイスから受信するデータやパケットは、I/O要求に対応する受信キューRCV_QUE_0〜RCV_QUE_2に格納する。受信キューRCV_QUE_0〜RCV_QUE_2は、メインメモリM_MEM内に格納されてもよい。
メインメモリM_MEM内には、上記以外に例えば、プロセスPR#のタスク構造体などを記憶する。
前述のポーリングプロセス45が、デバイス・ドライバが管理する受信キューRCV_QUE_0〜RCV_QUE_2をポーリング先とする場合、ポーリングプロセスのポーリングリストPOL_LST_0〜POL_LST_2は、受信キューそれぞれのアドレスを有する。
[特願2017−136514]
前述の特願2017−136514には、ポーリング専用のタスクを優先度が最低のアイドルルーティン(またはアイドルプロセス)に含め、優先度の高いタスクが少なくプロセッサがアイドルルーティンを実行する場合、ポーリング専用タスクを実行し、高速I/O処理をおこなうことが開示されている。アイドルルーティンは、カーネル内に含められ、通常、RUNキューには割り当てられない。そして、実行すべきタスクがなくなると、スケジューラがアイドルルーティンを実行対象に選択し、実行すべきタスクがないプロセッサはアイドルルーティンを実行する。
しかし、アイドルルーティンより優先度の高い他のタスクが複数存在し、複数のプロセッサが全てこれらの他のタスクを実行中になると、アイドルルーティンが実行されなくなる。その場合、ポーリングプロセスが実行されず、I/O処理の性能悪化を招く。
[第1の実施の形態]
図4は、第1の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。本実施の形態では、プロセス・スケジューラが、通常のプロセスに加えてI/O処理のポーリングプロセスの実行順をスケジューリングする。すなわち、プロセス・スケジューラは、プロセスの実行優先度に基づいてRUNキューに登録する。そして、プロセッサの各コアが、スケジューリングされた通常プロセスまたはポーリングプロセスを実行する。
図4には、RUNキューRUN_QUEの各スロットSL1-SL4にリンクされた通常のプロセスPR1,PR2,PR3とポーリングプロセスP_PRとが示される。縦軸は、プロセスの実行優先度を示し、上にいくほど実行優先度が高い。RUNキューの実行優先度が最も高いスロットSL1には3つのプロセスPR1が順番にリンクで結合される。図中、〇はプロセスのタスク構造体を、矢印はリンクを意味する。同様に、次に実行優先度が高いスロットSL2には2つのプロセスPR2が、次のスロットSL3には4つのプロセスPR3がそれぞれ順番にリンクで結合される。そして、第1の実施の形態では、ポーリングプロセスP_PRに通常プロセスよりも低い実行優先度PRY_Pが設定されている。そのため、最も低い実行優先度のスロットSL4にポーリングプロセスP_PRがリンクされる。但し、後述するとおり、ポーリングプロセスはより高い実行優先度に設定されてもよい。
そして、ディスパッチャは、RUNキューに登録されたプロセスのうち、最高の実行優先度のプロセスを例えばリンクの順に、プロセッサCPUのコアに実行させる。
したがって、図4の(A)のように、RUNキュー内にポーリングプロセスP_PRの実行優先度PRY_Pより高い実行優先度のプロセスPR1、PR2、PR3が登録中の場合、プロセッサのコアはポーリングプロセスP_PRを実行しない。つまり、図4(A)ではコアは高負荷状態であるので、コアはポーリングプロセス以外のプロセスPR1〜PR3を実行する。この場合、デバイス・ドライバ内のI/Oドライバは、I/O要求をCPU割り込みでI/O要求先に発行する。そのため、プロセッサのコアは、I/O要求に対するデータの受信をCPU割り込みで知らされ、CPU割り込みでI/O処理を実行する。
一方、図4の(B)のように、ポーリングプロセスP_PRの実行優先度PRY_Pより高い実行優先度のプロセスが存在しない場合、RUNキューのスロットSL1にポーリングプロセスP_PRが登録される。そのため、プロセッサのコアは、スロットSL1のポーリングプロセスを実行する。つまり、図4(B)ではコアは低負荷状態であり、ポーリングプロセス以外の通常プロセスを実行する必要がないので、実行優先度PRY_Pのポーリングプロセスを実行する。この場合、デバイス・ドライバ内のI/Oドライバは、I/O要求をポーリングプロセスでI/O要求先に発行する。そのため、プロセッサのコアは、ポーリングプロセスを実行して、I/O要求に対するデータの受信を検出する。この場合、ポーリングプロセスがデータ受信を検出すると、CPU割り込みは発生せず、ポーリングプロセスが、例えばI/O処理を実行する関数をコールするか、または自らI/O処理を実行する。CPU割り込みが発生しないため高速I/O処理が可能になる。
図5は、プロセッサのコアが2個の場合の通常のプロセスとポーリングプロセスの関係を示す図である。2つのコアCORE_0, CORE_1それぞれがスケジューラSCH_0, SCH_1を実行し、2つのコアそれぞれのRUNキューRUN_QUE_0, RUN_QUE_1に登録するプロセスPR#(#=1-3, 11-14)、ポーリングプロセスP_PRをスケジューリングする。図3で示したとおり、RUNキューRUN_QUE_0, RUN_QUE_1、及びプロセスPR#とポーリングプロセスP_PRは、メモリ領域に格納されている。また、プロセス、ポーリングプロセスの場合、プロセスIDやプロセスが使用するメモリなどを有するタスク構造体(task structure)がメモリ領域に格納される。
コアCORE_0のRUNキューRUN_QUE_0は、図4の(A)の状態と同じである。すなわち、スケジューラSCH_0は、RUNキューRUN_QUE_0の最高優先度のスロットSL1に3つのプロセスPR1をリンクにより登録し、同様に、スロットSL2に2つのプロセスPR2を、スロットSL3に4つのプロセスPR3を、そして最低優先度のスロットSL4にポーリングプロセスP_PRをそれぞれリンクにより登録する。ポーリングプロセスが他のプロセスより低い優先度のスロットに登録されるのは、ポーリングプロセスの優先度が最低に設定されているからである。
同様に、コアCORE_1のスケジューラSCH_1は、RUNキューRUN_QUE_1のスロットSL1〜SL4にプロセスPR11〜PR14がリンクによりそれぞれ登録している。
スケジューラは、実行すべきプロセスを、その実行優先度に基づいてRUNキューの実行優先度に対応するスロットに登録する。どのコアのRUNキューに登録するかの制御は、例えば、RUNキュー間の負荷のバランスを取るなどのルールに基づいて、他のプロセスにより行われる。
そして、図示しないディスパッチャが、コアにより実行中のプロセスが終了または所定時間継続したなど、新たなプロセスを実行する条件が整った場合、RUNキュー内の最も高い実行優先度のプロセスを順番にコアにディスパッチする。これに応答して、コアがディスパッチされたプロセスを実行する。
図5の例では、上記のスケジューラのプロセススケジューリングとディスパッチャによるディスパッチ対象プロセスの選択から分かるとおり、2つのRUNキューのいずれかの最上位のスロットにポーリングプロセスが登録されると、いずれかのコアがポーリングプロセスを実行する。
図6は、プロセス・スケジューラの処理のフローチャートを示す図である。プロセス・スケジューラは、各コアにより実行され、例えばアプリケーションプログラムにより新しいプロセスが生成されると(S1 YES)、そのプロセスの実行優先度に基づいて、対応するRUNキューのプロセスの実行優先度に対応するスロットに、そのプロセスを登録する(プロセスへのリンクを生成する)(S2)。RUNキューの複数のスロットは実行優先度順に並べられる。新しいプロセスの実行優先度に対応するスロットがRUNキュー内にない場合、プロセス・スケジューラは、新たにスロットを既存のスロットの間に割り当てて、新たなスロットに新しいプロセスを登録する。その結果、既存のスロットにリンクされていた登録済みプロセスがリスケジュールされる。
上記のようにプロセス・スケジューラが実行対象のプロセスをその実行優先度に基づいてRUNキュー内のスロットに登録するので、ディスパッチャは、単に、RUNキュー内の最も高い優先度のスロットのプロセスを順番に選択してコアにディスパッチするだけでよい。この結果、プロセッサのコアは、実行対象のプロセスをその実行優先度の高い順に実行することになる。
図7、図8は、プロセス・スケジューラとディスパッチャの制御例を示す図である。ここでは、プロセスを実行するコアが例えば8個である。そして、図中、各コアのRUNキューは省略され、8個のコアそれぞれのRUNキューに登録される全プロセスが、優先度の軸に沿って並べて示される。前述と同様に、〇はプロセスのタスク構造体、矢印はリンクを意味する。また、垂直方向に時間軸を示し、各時間T1-T3でのプロセスの状態が優先度軸に対応して示される。
図7の時間T1では、ポーリングプロセスP_PRと、ポーリングプロセスの実行優先度PRY_Pより高い優先度を有するプロセスPR1とPR2及び低い優先度を有するプロセスPR3が、RUNキューに登録されている。最高優先度のプロセスPR1は5個、PR2は3個、PR3は4個で、ポーリングプロセスP_PRは1個である。
この場合、プロセス・スケジューラが、最高優先度の5個のプロセスPR1を、例えば5つのコアCORE1,CORE2,CORE5-CORE7それぞれのRUNキューに登録し、ディスパッチャが、5個のプロセスPR1をそれぞれのコアにディスパッチし実行させる。また、次の優先度の3個のプロセスPR2は、3つのコアCORE3,CORE4,CORE8それぞれのRUNキューに登録され、実行される。そのため、実行優先度PRY_PのポーリングプロセスP_PRは、いずれのコアも実行しない。
図7の時間T2では、コアCORE8によるプロセスPR2の実行が完了する。その結果、コアCORE8のRUNキューにはポーリングプロセスP_PRが最高優先度として登録され、コアCORE8は、プロセスPR2からポーリングプロセスP_PRにプロセススイッチする。そして、時間T2後は、コアCORE8がポーリングプロセスP_PRの実行を継続する。
図8の時間T2は、図7の時間T2と同じである。その後、図8の時間T3では、ポーリングプロセスP_PRの実行優先度PRY_Pより高い優先度のプロセスPR2が追加される。その結果、プロセス・スケジューラは、コアCORE8のRUNキュー内のプロセスをリスケジュールし、ポーリングプロセスP_PRより高い優先度のスロットに新たに発生したプロセスPR2を登録する。その結果、ディスパッチャは、コアCORE8によるポーリングプロセスP_PRの実行を中断し、追加されたプロセスPR2をコアCORE8にディスパッチし実行させる。時間T3後は、ポーリングプロセスの実行は中断状態のままとなる。
このように、ポーリングプロセスP_PRの実行優先度PRY_Pより高い実行優先度のプロセスの数がコアの数以上になると、ポーリングプロセスP_PRは実行されない。この状態は、コア群が通常のプロセスPR1-PR2による高負荷状態である。一方、ポーリングプロセスP_PRの実行優先度PRY_Pより高い実行優先度のプロセスの数がコアの数未満になると、ポーリングプロセスP_PRが実行される。この状態は、コア群がポーリングプロセスを実行できる低負荷状態である。
したがって、ポーリングプロセスの実行優先度PRY_Pを所定の優先度に設定すると、その実行優先度PRY_Pに応じて、コアがポーリングプロセスを実行する頻度または確率を変更できる。
[ポーリングプロセスとCPU割り込みをハイブリッド化したI/O処理]
次に、本実施の形態におけるポーリングプロセスとCPU割り込みをハイブリッド化したI/O処理について説明する。以下、デバイス・ドライバのI/Oドライバの処理、ポーリングプロセスの処理を説明した後、ポーリングプロセスによりI/O処理と、CPU割り込みによるI/O処理を説明する。
本実施の形態では、プロセス・スケジューラのスケジューリングにより、コアがその負荷状態に応じてポーリングプロセスを実行する。そして、コアがポーリングプロセスを実行中か否かに対応して、I/O処理におけるデータの受信完了チェックをポーリングプロセスで行うかCPU割り込みで行うかの切替制御が行われる。
つまり、ポーリングプロセスより実行優先度が高いプロセスが多く存在する高負荷の状況下では、高実行優先度のプロセスの実行がポーリングプロセスより優先され、I/O処理はCPU割り込みで行われる。この場合、I/O処理は低速になる。一方、ポーリングプロセスより実行優先度が高いプロセスが少なく存在するまたは存在しない低負荷の状況下では、ポーリングプロセスが実行され、I/O処理はポーリングプロセスで行われる。この場合、I/O処理は高速になる。
図9は、デバイス・ドライバ内のI/Oドライバの処理のフローチャートを示す図である。図3に示したとおり、デバイス・ドライバは、周辺デバイスに対応してカーネル内にインストールされる。そして、コアが周辺デバイス等へのI/O要求を発行すると、I/O要求先のデバイス・ドライバはコアにより実行される。
図9に示すとおり、デバイス・ドライバのI/Oドライバは、コアにより実行され、I/O要求が発行されると(S10のYES)、コアからのI/O要求を受信する(S11)。そして、I/Oドライバは、各コアがポーリングプロセスを実行中か否かを示すポーリング・フラグをチェックする(S12)。例えば、ポーリングプロセスは、コアによる実行開始時にポーリング・フラグを「1」に設定する処理を有する。
I/Oドライバは、ポーリング・フラグが「1」の場合(S13のYES)、つまり、コアがポーリングプロセスを実行中の場合、I/O要求の受信に応答して、ポーリングプロセスによるI/O要求を要求先に発行する(S14)。一方、I/Oドライバは、ポーリング・フラグが「0」の場合(S13のNO)、つまり、コアがポーリングプロセスを実行中でない場合、I/O要求の受信に応答して、CPU割り込みによるI/O要求を要求先に発行する(S15)。ポーリングプロセスによるI/O要求では、I/O要求に対するデータやパケットの受信確認はポーリングプロセスにより行われる。一方、CPU割り込みによるI/O要求では、受信確認はCPU割り込みにより行われる。詳細な処理については後述する。
図10は、ポーリングプロセスの処理のフローチャートを示す図である。ポーリングプロセスは、プロセッサのコアにより実行され、ポーリング先の受信キューにデータが受信されたかをチェックし(S21)、データの受信があれば(S22のYES)、受信キューに対応するI/O処理を実行するI/O関数をコールする(S23)。ポーリングプロセスは、上記の処理S21〜S23を、例えば所定クロック数経過する度に(S24のYES)、繰り返す。
ポーリングプロセスは、複数の周辺デバイスの受信キューについてデータ受信チェックを行うよう設定されてもよく、または、単一の周辺デバイスの受信キューについてデータ受信チェックを行うよう設定されてもよい。また、ポーリングプロセスは、データ受信を検出した場合(S22のYES)、I/O要求に対応するI/O処理を実行するI/O関数をコールするが(S23)、ポーリングプロセスが自ら、I/O処理を実行してもよい。
[ポーリングプロセスによるI/O処理]
図11は、ポーリングプロセスによるI/O処理を行う例を示す図である。図12は、ポーリングプロセスによるI/O処理を行う場合の、I/O要求からI/O処理までのシーケンスフローチャートを示す図である。図11では、プロセッサのコアが3個の例であり、各コアCORE_0〜CORE_2に対して、RUNキューRUN_QUE_0〜RUN_QUE_2が、メモリ領域M_MEM内に設けられる。また、各コアの各RUNキューに対応して、対応するコアがポーリングプロセス実行中を示すポーリング・フラグPF_0〜PF_2が、メモリ領域内に設けられる。ポーリング・フラグPFは、例えば、コアがポーリングプロセスを実行開始するとき「1」に設定され、ポーリングプロセスが中断するとき「0」に変更される。
更に、メモリ領域内には、ポーリングプロセスによるI/O要求に対する受信キューRCV_QUE_pと、CPU割り込みによるI/O要求に対する受信キューRCV_QUE_intと、受信キュー毎に設けられた受信キューフラグRQF_p、RQF_intとが記憶される。受信キューRCV_QUE_pは、例えば4つの周辺デバイスに対応してそれぞれ設けられている。受信キューRCV_QUE_intは1つ設けられているが、周辺デバイスに対応して複数個でもよい。受信キューフラグRQF_p、RQF_intは、例えば、受信キューにデータが受信すると「1」に設定され、受信データが処理されると「0」に戻される。
図11、図12を参照して、ポーリングプロセスによるI/O処理を行う場合の処理例を説明する。前提として、図11に示すとおり、コアCORE_0がポーリングプロセスを実行中であり、コアCORE_2がI/O要求先の周辺デバイスのデバイス・ドライバのI/Oドライバを実行中である。
コアCORE_2が、I/Oドライバを実行して、いずれかのコアからのI/O要求を受信し(S11)、プーリングフラグPF_0〜PF_2をチェックしいずれかのコアがポーリングプロセスを実行中か否かを判定する(S12)。この判定でポーリングプロセスが実行中と判定され(S13のYES)、I/Oドライバが、ポーリングプロセスによるI/O要求を、要求先に発行する(S14)。このとき、コアCORE_0がポーリングプロセスを実行中である(S20_1)。
I/Oドライバは、ポーリングプロセスによるI/O要求に、I/O要求のIDに加えて、ポーリングプロセス対象のI/O要求であることを示すフラグ、返信データを受信する受信キューIDなどが含めてもよい。または、発行するI/O要求の情報を記憶するI/O要求バッファ内に、I/O要求のIDと上記のフラグと受信キューIDを記憶してもよい。何らかの方法で、ポーリングプロセスによるI/O要求であり、データを受信する受信キューがどれかを記録する。
発行されたI/O要求は、例えばキャッシュメモリでキャッシュミスとなり、メモリコントローラMC、I/O制御回路11、周辺デバイスインターフェース14を経由して、要求先の周辺デバイス(または他のノード)24,32,31に送信される。このI/O要求に応答して、要求先の周辺デバイスまたは他のノードは、データを返信する(S30)。
返信されたデータは、逆に周辺デバイスインターフェース14、I/O制御回路11を経由して、メモリコントローラMCに入力する。そこで、メモリコントローラMCは、メモリ内のポーリングプロセスによるI/O要求の受信キューに受信データをライトする(S31,S32)。この受信データのライトは、例えばメモリコントローラMCがダイレクトメモリアクセス処理によりメインメモリ内の受信キューに受信データをライトしてもよい。
一方、コアCORE_0はポーリングプロセスを実行中であるので(S20_1)、定期的に受信キューの受信キューフラグRQFをチェックする。そのため、メインメモリの受信キューへの受信データのライトが完了してその受信キューフラグRQFが「1」になると(S33)、コアCORE_0のポーリングプロセスが受信キューフラグRQFの「1」を検出し(S21,S22)、I/O要求に対応するI/O関数をコールする(S23)。このI/O関数の実行に応答して、I/O要求元のコアCORE_0が受信キュー内の受信データに対して所定の処理を実行する(S34)。
上記のI/O要求の処理例では、ポーリングプロセスの実行優先度より高い実行優先度のプロセスの数が少ない軽負荷状態にあり、いずれかのコアがポーリングプロセスを実行している。したがって、ポーリングプロセスを実行するコアがI/O要求のデータ受信完了を検出すると、CPU割り込みによるコアのプロセス切り替えに要する遅延なしで、所定のI/O処理を開始することができ、高速I/O処理が行われる。
[CPU割り込みによるI/O処理]
図13は、CPU割り込みによるI/O処理を行う例を示す図である。図14は、CPU割り込みによるI/O処理を行う場合の、I/O要求からI/O処理までのシーケンスフローチャートを示す図である。図13は図11と同様の構成である。図14は図12と同じ構成の処理を示す。
図13、図14を参照して、CPU割り込みによるI/O処理を行う場合の処理例を説明する。前提として、図13に示すとおり、いずれのコアCORE_0〜CORE_2もポーリングプロセスを実行しておらず、コアCORE_2がI/O要求先の周辺デバイスのデバイス・ドライバのI/Oドライバを実行中である。
コアCORE_2が、I/Oドライバを実行して、いずれかのコアからのI/O要求を受信し(S11)、ポーリング・フラグPF_0〜PF_2をチェックしいずれかのコアがポーリングプロセスを実行中か否かを判定する(S12)。この判定でポーリングプロセスが実行中でないと判定され(S13のNO)、I/Oドライバが、CPU割り込みによるI/O要求を、要求先に発行する(S15)。
I/Oドライバは、CPU割り込みによるI/O要求に、I/O要求のIDに加えて、CPU割り込み対象のI/O要求であることを示すフラグ、返信データを受信する受信キューIDなどが含めても良い。または、発行するI/O要求の情報を記憶するI/O要求バッファ内に、I/O要求のIDと上記のフラグと受信キューIDを記憶してもよい。何らかの方法で、CPU割り込みによるI/O要求であり、データを受信する受信キューがどれかを記録する。
発行されたI/O要求は、例えばキャッシュメモリでキャッシュミスとなり、メモリコントローラMC、I/O制御回路11、周辺デバイスインターフェース14を経由して、要求先の周辺デバイス(または他のノード)24,32,31に送信される。このI/O要求に応答して、要求先の周辺デバイスまたは他のノードは、データを返信する(S30)。
返信されたデータは、逆に周辺デバイスインターフェース14、I/O制御回路11を経由して、メモリコントローラMCに入力する。そこで、メモリコントローラMCは、メモリ内のCPU割り込みに対応する受信キューに受信データをライトする(S31,S32)。この受信データのライトは、図12と同様にメモリコントローラMCによるダイレクトメモリアクセスで行われても良い。
一方、メインメモリ内の受信キューへの受信データのライトが完了すると、メモリコントローラMCがCPU割り込みを発行する(S40)。このCPU割り込みは、I/O要求元のコアCORE_2に発行される。コアCORE_2は、CPU割り込みの原因がI/O要求に対するデータ受信完了であることを検出し、CPU割り込みの処理を実行する(S41)。そして、I/O要求元のコアCORE_2は、受信キュー内の受信データに対する処理を実行する(S42)。
上記のI/O要求の処理例では、ポーリングプロセスの実行優先度より高い実行優先度のプロセスの数が多い重負荷状態にあり、いずれかのコアもポーリングプロセスを実行していない。したがって、コアはポーリングプロセスの実行による負荷を回避し、高い実行優先度のプロセスの処理に専念できる。一方、I/O要求のデータ受信が完了するとCPU割り込みが発行されるので、I/O要求元のコアは、I/O要求に対するI/O処理を実行することができる。但し、この場合、コアCORE_2ではCPU割込み処理へのプロセススイッチを伴うので低速I/O処理になる。
[第2の実施の形態]
第1の実施の形態では、ポーリングプロセスの実行優先度を他のプロセスより低い最低優先度に設定した。しかし、ポーリングプロセスの実行優先度を、他の一部のプロセスより高く設定してもよい。または、他の全てのプロセスの最も高い優先度に設定してもよいし、他の全てのプロセスの実行優先度より高い優先度に設定してもよい。
図15は、第2の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。図15では、図4と同様に、1個のコアに対応するRUNキューRUN_QUEにプロセスPR1,PR2とポーリングプロセスP_PRとプロセスPR3が、それぞれの優先度のスロットSL1〜SL3に登録されている。そして、第2の実施の形態では、図15(A)に示されるとおり、ポーリングプロセスP_PRの実行優先度PRY_Pを、プロセスPR2より低くプロセスPR3より高く設定する。
そのため、図15(A)の状況下では、1個のコアは最も実行優先度の高いプロセスPR1を実行し、ポーリングプロセスP_PRは実行しない。しかし、図15(B)の状況下では、ポーリングプロセスP_PRの実行優先度PRY_Pより高い実行優先度のプロセスはRUNキューに登録されていない。したがって、実行優先度PRY_Pより低い実行優先度のプロセスPR3が登録されていても、1個のコアは最も高い実行優先度のポーリングプロセスP_PRを実行する。これにより、図4のポーリングプロセスの実行優先度を最低に設定した場合よりも、コアがポーリングプロセスを実行する頻度または確率が高くなる。
そして、第2の実施の形態でも、I/Oドライバは、ポーリングプロセスが実行中であれば、ポーリングプロセスによるI/O要求を要求先に発行し、ポーリングプロセスが実行中でないなら、CPU割り込みによるI/O要求を要求先に発行する。
第2の実施の形態によれば、I/O処理をどの程度高速にするかの要求に応じて、ポーリングプロセスの実行優先度PRY_Pを設定することで、I/O処理の速度を所望の速度に制御できる。
[第3の実施の形態]
図16は、第3の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。図16では、複数のコアの複数または共通のRUNキューに登録されるプロセスが優先度の軸に沿って示される。特に、ポーリングプロセスは、図2に示した高速インターコネクタ用のポーリングプロセスP_PR1と高速インターフェースSSD用のポーリングプロセスP_PR2とを有する。そして、両ポーリングプロセスはプロセスPR3より高い実行優先度であり、高速インターコネクタ用のポーリングプロセスP_PR1は、高速インターフェースSSD用のポーリングプロセスP_PR2よりも高い実行優先度PRY1_Pに設定される。
図16(A)では、高速インターコネクタ用のポーリングプロセスP_PR1と高速インターフェースSSD用のポーリングプロセスP_PR2が隣接する実行優先度PRY1_P, PRY2_Pに設定される。一方、図16(B)では、高速インターコネクタ用のポーリングプロセスP_PR1は、プロセスPR2より高い実行優先度PRY1_Pに、高速インターフェースSSD用のポーリングプロセスP_PR2は、プロセスPR2より低い実行優先度PRY2_Pにそれぞれ設定される。
したがって、図16(A)(B)において、プロセス・スケジューラとディスパッチャの制御により、例えば2つのコアのRUNキューにプロセスPR1,PR2のいずれも登録されない場合、2つのコアは、両ポーリングプロセスP_PR1,P_PR2を実行する。この場合、高速インターコネクタへのI/O要求と高速インターフェースSSDへのI/O要求は、いずれもポーリングプロセスによるI/O要求となる。
また、図16(A)において、プロセスPR1またはプロセスPR2のうち1つのプロセスがRUNキューに登録される場合、2つのコアは、その1つのプロセスPR1またはPR2と、より高い実行優先度PRY1_Pの高速インターコネクタ用のポーリングプロセスP_PR1とを実行する。この場合、高速インターフェースSSD用のポーリングプロセスP_PR2は実行されないので、高速インターフェースSSDへのI/O要求は、CPU割り込みによるI/O要求となる。
同様に、図16(B)において、1つのプロセスPR1がRUNキューに登録される場合、2つのコアは、プロセスPR1と高速インターコネクタ用のポーリングプロセスP_PR1を実行し、高速インターフェースSSD用のポーリングプロセスP_PR2は実行されない。また、プロセスPR1がRUNキューに登録されず、少なくとも1つのプロセスPR2が登録される場合も、同様にポーリングプロセスが実行及び不実行となる。
このように複数の周辺デバイスそれぞれへのI/O要求に対応する複数のポーリングプロセスを異なる実行優先度に設定することで、I/Oドライバは、それぞれのI/O要求に対して、異なる頻度または確率でポーリングプロセスによるI/O要求を発行する。それにより、複数の周辺デバイスそれぞれのI/O処理速度を、所望の速度に調整できる。
[第4の実施の形態]
図17は、第4の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。図17では、複数のコアの複数または共通のRUNキューに登録されるプロセスが優先軸に沿って示される。この例では、ポーリングプロセスP_PRの複数のタスク構造体が同じ実行優先度PRY_Pに設定される。この場合、複数のコアのいずれかがポーリングプロセスP_PRを実行する確率が高まる。また、複数のコアがポーリングプロセスP_PRを実行する場合、プロセス・スケジューラが1つのコアが実行中のポーリングプロセスを中断して別のプロセスにスイッチしても、他のコアがポーリングプロセスの実行を継続することが起こりうる。
図17において、実行優先度PRY_Pの複数のポーリングプロセスが、複数の周辺デバイス宛てのI/O要求に対するポーリングプロセスP_PR1,P_PR2,P_PR3を含むようにしても良い。この場合、プロセスPR1,PR2が存在しない場合、複数のコアが3個以上であれば、3種類のポーリングプロセスP_PR1, P_PR2, P_PR3を実行し、プロセスPR1,PR2の数に応じて3種類のポーリングプロセスの一部が実行される。
[第5の実施の形態]
図18は、第5の実施の形態における通常のプロセスとポーリングプロセスの関係を示す図である。図18では、複数のコアの複数または共通のRUNキューに登録されるプロセスが示される。
図18(A)の例では、第1のポーリングプロセスP_PR1の複数のタスク構造体に実行優先度PRY1_Pが設定され、第2のポーリングプロセスP_PR2の複数のタスク構造体に異なる実行優先度PRY2_Pが設定される。また、図18(B)の例も(A)と同様であるが、実行優先度PRY1_PはプロセスPR2の実行優先度より高く、実行優先度PRY2_PはプロセスPR2の実行優先度より低い。
つまり、第5の実施の形態は、図16(A)(B)の第3の実施の形態に、図17の第4の実施の形態(同じ実行優先度が複数のポーリングプロセスまたは複数のタスク構造体に設定されること)を適用した例である。
以上の通り、第1乃至第5の実施の形態によれば、プロセッサのコアがポーリングプロセスを実行できる場合、ポーリングプロセスによるI/O処理が行われ、高速I/O処理を行うことができる。一方、プロセッサのコアがポーリングプロセスを実行できない場合、CPU割り込みによるI/O処理が行われ、低速ではあるがI/O要求に対するI/O処理を実行することができる。
そして、プロセッサのコアがポーリングプロセスを実行できるか否かは、ポーリングプロセスに設定した実行優先度に依存するので、適切な実行優先度に設定することで、プロセッサのコアの負荷のレベルに対応した最適なI/O処理の実行が可能になる。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
メモリと、
前記メモリにアクセス可能な複数のプロセッサコアとを有し、
前記複数のプロセッサコアそれぞれは、
前記プロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、情報処理装置。
(付記2)
前記複数のプロセッサコアそれぞれは、
入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスによる入出力要求を入出力要求先に発行し、
前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記プロセッサ割込みによる入出力要求を入出力要求先に発行する、付記1に記載の情報処理装置。
(付記3)
前記ポーリングプロセスは、複数の前記実行優先度のうち、いずれかの実行優先度に設定され、
前記複数のプロセッサコアそれぞれは、
前記複数のプロセッサコア全てが前記ポーリングプロセスの実行優先度より高い実行優先度のプロセスを実行中の場合、前記ポーリングプロセスを実行せず、前記複数のプロセッサコアの少なくとも一つが前記ポーリングプロセスの実行優先度より高い実行優先度のプロセスを実行中でない場合、前記ポーリングプロセスを実行する、付記1に記載の情報処理装置。
(付記4)
前記ポーリングプロセスは、前記複数の実行優先度のうち最低の実行優先度に設定され、
前記複数のプロセッサコアそれぞれは、
前記複数のプロセッサコア全てが前記ポーリングプロセス以外のプロセスを実行中の場合、前記ポーリングプロセスを実行せず、前記複数のプロセッサコアの少なくとも一つが前記ポーリングプロセス以外のプロセスを実行中でない場合、前記ポーリングプロセスを実行する、付記1に記載の情報処理装置。
(付記5)
前記複数のプロセッサコアそれぞれは、
入出力要求の発生に応答して、前記複数のプロセッサコアのいずれかが前記ポーリングプロセスを実行中か否か判定し、
前記ポーリングプロセスが実行中の場合、前記ポーリングプロセスによる入出力要求を要求先に発行し、
前記ポーリングプロセスが実行中でない場合、前記プロセッサ割込みによる入出力要求を要求先に発行する、付記1に記載の情報処理装置。
(付記6)
前記複数のプロセッサコアそれぞれは、
前記ポーリングプロセスによる入出力要求を発行した場合、前記ポーリングプロセスによるポーリング先の第1の受信キューでの前記受信データの受信判定を待って、前記入出力処理を実行し、
前記プロセッサ割込みによる入出力要求を発行した場合、前記プロセッサ割込みによる入出力要求に対応する第2の受信キューでの前記受信データの受信時に発行される前記プロセッサ割込みに応答して、割込み処理後に前記入出力処理を実行する、付記5に記載の情報処理装置。
(付記7)
前記複数のプロセッサコアそれぞれは、
前記入出力要求の複数の入出力要求先にそれぞれ対応した複数のポーリングプロセスを、互いに異なる実行優先度で、実行する、付記2に記載の情報処理装置。
(付記8)
前記複数のプロセッサコアそれぞれは、
前記実行対象のプロセスを、前記プロセスの実行優先度に基づいてランキュー内に登録し、
前記ランキュー内に登録されたプロセスを前記実行優先度に基づいて実行する、付記1に記載の情報処理装置。
(付記9)
前記複数のプロセッサコアそれぞれは、
前記入出力要求の複数の要求先にそれぞれ対応した複数のポーリングプロセスを、互いに異なる実行優先度で、前記ランキュー内に登録する、付記8に記載の情報処理装置。
(付記10)
メモリと、
前記メモリにアクセス可能な複数のプロセッサコアとを有し、
前記複数のプロセッサコアそれぞれが、
前記プロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、情報処理方法。
(付記11)
複数のプロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、処理を複数のプロセッサコアのいずれかに実行させるプログラム。
CPU:プロセッサ
CORE:プロセッサのコア
MC:メモリコントローラ
12、M_MEM:メインメモリ
11:I/O制御回路
14:周辺デバイスインターフェース
22:高速インターコネクタ
24:高速インターフェースストレージ
1、30:ノード、情報処理装置
32:周辺デバイス
45、P_PR:ポーリングプロセス
PR#:プロセス
RUN_QUE:RUNキュー、実行キュー
PRY_P:ポーリングプロセスの実行優先度
41、SCH_#:プロセス・スケジューラ
44:割込みルーティン
DDR_#:デバイス・ドライバ、I/Oドライバ

Claims (9)

  1. メモリと、
    前記メモリにアクセス可能な複数のプロセッサコアとを有し、
    前記複数のプロセッサコアそれぞれは、
    前記プロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
    入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
    前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、情報処理装置。
  2. 前記複数のプロセッサコアそれぞれは、
    入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスによる入出力要求を入出力要求先に発行し、
    前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記プロセッサ割込みによる入出力要求を入出力要求先に発行する、請求項1に記載の情報処理装置。
  3. 前記ポーリングプロセスは、複数の前記実行優先度のうち、いずれかの実行優先度に設定され、
    前記複数のプロセッサコアそれぞれは、
    前記複数のプロセッサコア全てが前記ポーリングプロセスの実行優先度より高い実行優先度のプロセスを実行中の場合、前記ポーリングプロセスを実行せず、前記複数のプロセッサコアの少なくとも一つが前記ポーリングプロセスの実行優先度より高い実行優先度のプロセスを実行中でない場合、前記ポーリングプロセスを実行する、請求項1に記載の情報処理装置。
  4. 前記ポーリングプロセスは、前記複数の実行優先度のうち最低の実行優先度に設定され、
    前記複数のプロセッサコアそれぞれは、
    前記複数のプロセッサコア全てが前記ポーリングプロセス以外のプロセスを実行中の場合、前記ポーリングプロセスを実行せず、前記複数のプロセッサコアの少なくとも一つが前記ポーリングプロセス以外のプロセスを実行中でない場合、前記ポーリングプロセスを実行する、請求項1に記載の情報処理装置。
  5. 前記複数のプロセッサコアそれぞれは、
    入出力要求の発生に応答して、前記複数のプロセッサコアのいずれかが前記ポーリングプロセスを実行中か否か判定し、
    前記ポーリングプロセスが実行中の場合、前記ポーリングプロセスによる入出力要求を要求先に発行し、
    前記ポーリングプロセスが実行中でない場合、前記プロセッサ割込みによる入出力要求を要求先に発行する、請求項1に記載の情報処理装置。
  6. 前記複数のプロセッサコアそれぞれは、
    前記ポーリングプロセスによる入出力要求を発行した場合、前記ポーリングプロセスによるポーリング先の第1の受信キューでの前記受信データの受信判定を待って、前記入出力処理を実行し、
    前記プロセッサ割込みによる入出力要求を発行した場合、前記プロセッサ割込みによる入出力要求に対応する第2の受信キューでの前記受信データの受信時に発行される前記プロセッサ割込みに応答して、割込み処理後に前記入出力処理を実行する、請求項5に記載の情報処理装置。
  7. 前記複数のプロセッサコアそれぞれは、
    前記入出力要求の複数の入出力要求先にそれぞれ対応した複数のポーリングプロセスを、互いに異なる実行優先度で、実行する、請求項2に記載の情報処理装置。
  8. メモリと、
    前記メモリにアクセス可能な複数のプロセッサコアとを有し、
    前記複数のプロセッサコアそれぞれが、
    前記プロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
    入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
    前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、情報処理方法。
  9. 複数のプロセッサコアによる実行対象のプロセスを、前記プロセスの実行優先度に基づいて実行し、
    入出力処理の受信データを受信したか否かをポーリングにより繰り返し判定するポーリングプロセスが、前記複数のプロセッサコアのいずれかにより実行されている場合、前記ポーリングプロセスにより前記受信データを受信したことが判定されることに応答して、前記入出力処理を実行し、
    前記ポーリングプロセスが前記複数のプロセッサコアにより実行されていない場合、前記受信データを受信したときに発行されるプロセッサ割込みに応答して、前記入出力処理を実行する、処理を複数のプロセッサコアのいずれかに実行させるプログラム。
JP2017248925A 2017-12-26 2017-12-26 情報処理装置、情報処理方法及びプログラム Active JP6955163B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017248925A JP6955163B2 (ja) 2017-12-26 2017-12-26 情報処理装置、情報処理方法及びプログラム
US16/206,181 US10545890B2 (en) 2017-12-26 2018-11-30 Information processing device, information processing method, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017248925A JP6955163B2 (ja) 2017-12-26 2017-12-26 情報処理装置、情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2019114173A JP2019114173A (ja) 2019-07-11
JP6955163B2 true JP6955163B2 (ja) 2021-10-27

Family

ID=66950306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017248925A Active JP6955163B2 (ja) 2017-12-26 2017-12-26 情報処理装置、情報処理方法及びプログラム

Country Status (2)

Country Link
US (1) US10545890B2 (ja)
JP (1) JP6955163B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220349547A1 (en) 2019-06-20 2022-11-03 Koito Manufacturing Co., Ltd. Vehicular lamp and vehicular lamp control method
WO2022245333A1 (en) * 2021-05-17 2022-11-24 Hewlett-Packard Development Company, L.P. Bus interfaces control
WO2023170842A1 (ja) * 2022-03-09 2023-09-14 日本電信電話株式会社 アクセラレータオフロード装置、アクセラレータオフロードシステムおよびアクセラレータオフロード方法
WO2023223555A1 (ja) * 2022-05-20 2023-11-23 日本電信電話株式会社 アクセラレータオフロード装置およびアクセラレータオフロード方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4228496A (en) * 1976-09-07 1980-10-14 Tandem Computers Incorporated Multiprocessor system
US5471618A (en) * 1992-11-30 1995-11-28 3Com Corporation System for classifying input/output events for processes servicing the events
US6105102A (en) * 1998-10-16 2000-08-15 Advanced Micro Devices, Inc. Mechanism for minimizing overhead usage of a host system by polling for subsequent interrupts after service of a prior interrupt
US6889279B2 (en) * 2000-12-11 2005-05-03 Cadence Design Systems, Inc. Pre-stored vector interrupt handling system and method
US8032658B2 (en) * 2004-07-06 2011-10-04 Oracle America, Inc. Computer architecture and process for implementing a virtual vertical perimeter framework for an overloaded CPU having multiple network interfaces
JP4387970B2 (ja) * 2005-03-31 2009-12-24 富士通株式会社 データ入出力プログラム,装置,および方法
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
WO2008126138A1 (ja) 2007-03-26 2008-10-23 Fujitsu Limited 入出力完了検出システム
JP4747307B2 (ja) * 2007-11-09 2011-08-17 富士通株式会社 ネットワーク処理制御装置,プログラムおよび方法
JP2009238001A (ja) 2008-03-27 2009-10-15 Texas Instr Japan Ltd コンピュータシステム
US20130024875A1 (en) * 2011-07-22 2013-01-24 Yilin Wang Event System And Methods For Using Same
CN102779075B (zh) 2012-06-28 2014-12-24 华为技术有限公司 一种在多处理器核系统中进行调度的方法、装置及系统
KR101915198B1 (ko) * 2012-08-10 2018-11-05 한화테크윈 주식회사 프로세서간 메시지처리장치 및 방법
JP6070150B2 (ja) * 2012-12-14 2017-02-01 富士通株式会社 情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラム
JP6881116B2 (ja) 2017-07-12 2021-06-02 富士通株式会社 情報処理装置、情報処理方法およびプログラム

Also Published As

Publication number Publication date
JP2019114173A (ja) 2019-07-11
US10545890B2 (en) 2020-01-28
US20190196993A1 (en) 2019-06-27

Similar Documents

Publication Publication Date Title
JP6955163B2 (ja) 情報処理装置、情報処理方法及びプログラム
US7685347B2 (en) Interrupt controller for invoking service routines with associated priorities
WO2018006864A1 (zh) 创建虚拟机的方法、装置及系统、控制设备和存储介质
US10230608B2 (en) RPS support for NFV by system call bypass
US7493436B2 (en) Interrupt handling using simultaneous multi-threading
US8190864B1 (en) APIC implementation for a highly-threaded x86 processor
US7873964B2 (en) Kernel functions for inter-processor communications in high performance multi-processor systems
US7979861B2 (en) Multi-processor system and program for causing computer to execute controlling method of multi-processor system
KR100977662B1 (ko) 2-레벨 인터럽트 서비스 루틴을 제공하기 위한 방법 및 프로세서
EP2698711A1 (en) Method for dispatching central processing unit of hotspot domain virtual machine and virtual machine system
US7627705B2 (en) Method and apparatus for handling interrupts in embedded systems
TW200525430A (en) Methods and apparatus to dispatch interrupts in multiprocessor systems
CN104102548A (zh) 任务资源调度处理方法和系统
JP2013527948A (ja) コンピュータ・システム内でタスクをディスパッチするための方法、システム及びコンピュータ・プログラム
US9817696B2 (en) Low latency scheduling on simultaneous multi-threading cores
WO2009150815A1 (ja) マルチプロセッサシステム
US11061841B2 (en) System and method for implementing a multi-threaded device driver in a computer system
US11074101B2 (en) Automated switching between interrupt context I/O processing and thread context I/O processing
US9367349B2 (en) Multi-core system and scheduling method
US8141077B2 (en) System, method and medium for providing asynchronous input and output with less system calls to and from an operating system
JP6123487B2 (ja) 制御装置、制御方法及び制御プログラム
US11461134B2 (en) Apparatus and method for deferral scheduling of tasks for operating system on multi-core processor
JP2009193260A (ja) ストレージシステム、ストレージ装置、優先度制御装置および優先度制御方法
KR20160144688A (ko) 큐를 이용한 smp 가상 머신 이벤트 라우터 및 방법
CN116431280A (zh) 一种中断信号处理方法以及中断信号处理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200911

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210818

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210913

R150 Certificate of patent or registration of utility model

Ref document number: 6955163

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150