(57)【要約】【課題】データパターンに応じてプリフェッチ制御を適性化する。【解決手段】モデル選択部２４は、推論部Ｐ１〜Ｐ３・・をデバイスドライバ２３の外部から選択し、データ解析の種類などに応じて各推論部Ｐ１〜Ｐ３・・を入れ替え、ニューラルネットワークである各推論部Ｐ１〜Ｐ３・・は、デバイスドライバ２３で採取されたＩ／Ｏトレースデータに基づいてＳＳＤ２０１のアドレス領域を予測し、その予測結果に基づいてデバイスドライバ２３に外部からプリフェッチを指示し、プリフェッチ実行部Ｄ４は、クエリとデータベースに関連付けられたニューラルネットワークによる予測に基づいて、ＳＣＭ２０２に割り当てられるストレージキャッシュに対するプリフェッチを行う。【選択図】図１
2020135499.tif 000002
【特許請求の範囲】
【請求項１】
第１記憶部と、
前記第１記憶部より容量が大きく、アクセス速度が遅い第２記憶部と、
前記第１記憶部より容量が大きく、前記第２記憶部よりアクセス速度が遅い第３記憶部と、
前記第３記憶部に記憶されたデータを前記第２記憶部にプリフェッチし、前記第２記憶部にプリフェッチしたデータを前記第１記憶部にコピーするデバイスドライバと、
前記デバイスドライバの外部に設けられた推論部とを備え、
前記デバイスドライバは、
前記プリフェッチの指示を前記推論部から受け取る第１インターフェースと、
前記第１インターフェースで受け取られた前記プリフェッチの指示に基づいて、前記プリフェッチを実行するプリフェッチ実行部とを備え、
前記推論部は、前記第３記憶部からのプリフェッチに用いられるアドレスを予測し、前記予測結果に基づいて前記デバイスドライバに前記プリフェッチを指示するデータ処理装置。
【請求項２】
前記第１記憶部はＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、前記第２記憶部はストレージクラスメモリ、前記第３記憶部はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である請求項１に記載のデータ処理装置。
【請求項３】
前記推論部は、Ｉ／Ｏトレースデータに基づいて、前記プリフェッチに用いられるアドレスを学習したニューラルネットワークである請求項１に記載のデータ処理装置。
【請求項４】
前記デバイスドライバは、
前記第２記憶部にプリフェッチされたデータのヒット判定を実行し、前記データがヒットしないときに前記第３記憶部に記憶されたデータを前記第１記憶部にライトするヒット判定部と、
前記第２記憶部にプリフェッチされたデータがヒットしたときに前記第２記憶部にプリフェッチされたデータを前記第１記憶部にコピーするコピー部とを備える請求項１に記載のデータ処理装置。
【請求項５】
前記デバイスドライバの外部に設けられ、前記第２記憶部にプリフェッチバッファを割り当てる割当て部をさらに備え、
前記デバイスドライバは、前記第２記憶部に割り当てられたプリフェッチバッファをページ固定するページ固定部をさらに備える請求項１に記載のデータ処理装置。
【請求項６】
前記デバイスドライバは、
前記プリフェッチの対象とする前記第３記憶部のブロックアドレス領域の面数、位置およびサイズを設定し、
前記プリフェッチバッファの面数、位置およびサイズを指定する請求項５に記載のデータ処理装置。
【請求項７】
前記デバイスドライバは、シーケンシャルリード性能に基づいて決定したデータサイズで前記プリフェッチバッファを分割し、前記プリフェッチバッファに対する前記第３記憶部からのリードコマンドをプリフェッチ専用に予め作成する請求項５に記載のデータ処理装置。
【請求項８】
前記デバイスドライバは、
前記第２記憶部の記憶領域を一定のデータサイズで分割した分割領域を単位としてプリフェッチバッファを構成し、
前記プリフェッチバッファを構成する前記分割領域の個数を可変とすることで、前記プリフェッチバッファの面数およびサイズを可変とする請求項５に記載のデータ処理装置。
【請求項９】
前記デバイスドライバは、Ｉ／Ｏトレースデータを取得する第２インターフェースをさらに備え、
前記Ｉ／Ｏトレースデータを取得する関数は、前記Ｉ／Ｏトレースデータの属性のうちから前記予測に使用する属性と、前記Ｉ／Ｏトレースデータの長さを選択する引数を含む請求項１に記載のデータ処理装置。
【請求項１０】
前記デバイスドライバは、前記プリフェッチに関する性能情報を取得する第３インターフェースをさらに備え、
前記推論部は、前記第３インターフェースから前記性能情報を取得し、前記プリフェッチに用いるＩ／Ｏ帯域の使用率に基づいて、前記プリフェッチのタイミングを決定する請求項１に記載のデータ処理装置。
【請求項１１】
前記プリフェッチに用いるＩ／Ｏ帯域の使用率を予測する予測モデルをさらに備え、
前記推論部は、前記予測モデルで予測された前記Ｉ／Ｏ帯域の使用率に基づいて、前記プリフェッチのタイミングを決定する請求項１に記載のデータ処理装置。
【請求項１２】
前記デバイスドライバは、
前記プリフェッチ専用のコマンドキューと完了通知キューを作成し、
前記デバイスドライバが前記コマンドキューにサブミットした数だけ、前記完了通知キューに正常完了通知が設定されると、前記第３記憶部からのリード処理を完了する請求項１に記載のデータ処理装置。
【請求項１３】
第１記憶部と、
前記第１記憶部より容量が大きく、アクセス速度が遅い第２記憶部と、
前記第１記憶部より容量が大きく、前記第２記憶部よりアクセス速度が遅い第３記憶部と、
前記第３記憶部に記憶されたデータを前記第２記憶部にプリフェッチするデバイスドライバとを備え、
前記デバイスドライバは、ヒット判定に基づいて、前記第２記憶部にプリフェッチされたデータを前記第１記憶部にコピーするか、前記第３記憶部に記憶されたデータを前記第１記憶部にライトするかを選択するストレージ装置。
【請求項１４】
前記デバイスドライバは、
前記プリフェッチの指示を外部から受け取るインターフェースと、
前記インターフェースで受け取られた前記プリフェッチの指示に基づいて、前記プリフェッチを実行するプリフェッチ実行部とを備える請求項１３に記載のストレージ装置。
【請求項１５】
ストレージデバイスに記憶されたデータをストレージクラスメモリにプリフェッチするプリフェッチ方法であって、
前記プリフェッチを実行するデバイスドライバが実装されたオペレーティングシステムの外部に前記プリフェッチを指示する推論部が設けられ、
前記推論部は、前記ストレージデバイスからのプリフェッチに用いられるアドレスを予測し、前記予測結果に基づいて前記デバイスドライバに前記プリフェッチを指示するプリフェッチ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージクラスメモリ（ＳＣＭ：Ｓｔｏｒａｇｅ  Ｃｌａｓｓ  Ｍｅｍｏｒｙ）をキャッシュとして用いることが可能なデータ処理装置、ストレージ装置およびプリフェッチ方法に関する。
【背景技術】
【０００２】
フラッシュストレージのアクセスタイムは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の格納データにアクセスする場合と比較して約１０００倍のギャップがある。このため、インメモリデータベースを用いるビッグデータ解析において、主記憶容量の合計が解析対象のデータサイズ以上になるだけのサーバ台数が必要となり、コストアップを招く。そこで、記憶階層ギャップを埋めるストレージクラスメモリとして市場に登場しつつあるＩｎｔｅｌ社の３Ｄ  ＸＰｏｉｎｔメモリに代表される次世代不揮発性メモリを適用することにより、主記憶容量を拡張してサーバ台数を削減することが期待されている。
【０００３】
３Ｄ  ＸＰｏｉｎｔメモリは、ＤＲＡＭの場合と同じ形状のＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）に搭載し、キャッシュライン単位でのアクセスが可能で、ＤＲＡＭを３Ｄ  ＸＰｏｉｎｔメモリのキャッシュとして使用することができる。つまり、記憶容量と階層が一段増加した従来型のメモリアクセス制御をハードウェアが行うシステムとして、従来以上のサイズのデータを主記憶上で処理するプログラムを実行することができる。
【０００４】
一方、３Ｄ  ＸＰｏｉｎｔメモリから溢れたデータをフラッシュストレージの格納データとスワップする機構は、ページフォールト割り込みを契機にオペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がフラッシュストレージにリード／ライトを行うのが基本であり、３Ｄ  ＸＰｏｉｎｔメモリの有無によらないオーバーヘッドを要する。そこで、インメモリデータベースがアクセス頻度の高いデータを主記憶に保持する機構を実装し、データ配置を最適化するためのリード／ライトを行うことになるが、記憶階層が増加することによるデータ配置機構には大幅な改変が必要となる。また、データベースに依存せずに、プラットフォームレベルでフラッシュストレージから３Ｄ  ＸＰｏｉｎｔメモリへのプリフェッチ機構がある方が、データ形式に対応して複数のデータベースが別のプリフェッチ機構を実装することなく実現できて効率が良い。
【０００５】
Ｄｅｌｌ／ＥＭＣ社のフラッシュストレージであるＰｏｗｅｒＭａｘにおいて、ストレージＯＳが過去のリード／ライトパターンを機械学習し、アクセス頻度が高いと予測されるデータをストレージクラスメモリに格納すると発表されている。
【０００６】
また、Ｉｎｔｅｌ社のＳＳＤカードタイプの３Ｄ  ＸＰｏｉｎｔ製品であるＯｐｔａｎｅでは、機械学習等のアルゴリズムによりＯｐｔａｎｅから主記憶にデータをプリフェッチすることで性能を向上させるハイパーバイザを含むＩｎｔｅｌ  Ｍｅｍｏｒｙ  Ｄｒｉｖｅ  Ｔｅｃｈｎｏｌｏｇｙが利用できる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第８６０７００５号明細書
【特許文献２】米国特許第７８０５５８０号明細書
【特許文献３】米国特許第８１１２７５５号明細書
【特許文献４】米国特許出願公開第２０１６／０３８１１７６号明細書
【特許文献５】米国特許第８１４０７４６号明細書
【特許文献６】米国特許第９２９８６３３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術は、実行される応用プログラムによるプリフェッチの制御方法およびアルゴリズムの適否があり、柔軟な制御方法の変更が必要になると予想される。また、製品にビルトインされるストレージＯＳや、ＣＰＵハードウェアを仮想化するハイパーバイザに対して、新規の予測モデルおよびアルゴリズムを簡単には追加できない。
【０００９】
本発明は、上記事情に鑑みなされたものであり、その目的は、データパターンに応じてプリフェッチ制御を適性化することが可能なデータ処理装置、ストレージ装置およびプリフェッチ方法を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、第１の観点に係るデータ処理装置は、第１記憶部と、前記第１記憶部より容量が大きく、アクセス速度が遅い第２記憶部と、前記第１記憶部より容量が大きく、前記第２記憶部よりアクセス速度が遅い第３記憶部と、前記第３記憶部に記憶されたデータを前記第２記憶部にプリフェッチし、前記第２記憶部にプリフェッチしたデータを前記第１記憶部にコピーするデバイスドライバと、前記デバイスドライバの外部に設けられた推論部とを備え、前記デバイスドライバは、前記プリフェッチの指示を前記推論部から受け取る第１インターフェースと、前記第１インターフェースで受け取られた前記プリフェッチの指示に基づいて、前記プリフェッチを実行するプリフェッチ実行部とを備え、前記推論部は、前記第３記憶部からのプリフェッチに用いられるアドレスを予測し、前記予測結果に基づいて前記デバイスドライバに前記プリフェッチを指示する。
【発明の効果】
【００１１】
本発明によれば、データパターンに応じてプリフェッチ制御を適性化することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
【図２】図２は、図１のデータ処理装置のハードウェア構成例を示すブロック図である。
【図３】図３は、図１のデバイスドライバと外部プログラムとの連携処理の流れを示す図である。
【図４】図４は、図１のプリフェッチ対象のＳＳＤの記憶領域とＳＣＭの記憶領域との関係を示す図である。
【図５】図５は、図１のデバイスドライバによる初期化処理を示すフローチャートである。
【図６】図６は、図１のデバイスドライバによるページ固定処理を示すフローチャートである。
【図７】図７は、図１のデバイスドライバによるプリフェッチ実行処理を示すフローチャートである。
【図８】図８は、第２実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
【図９】図９は、第３実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
【図１０】図１０は、第４実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また、実施形態の中で説明されている諸要素およびその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１４】
図１は、第１実施形態に係るデータ処理装置の構成を示すブロック図である。以下の説明では、“○○部は”と動作主体を記した場合、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２７がＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２５からプログラムである○○部を読み出し、ＤＲＡＭ２０３にロードした上で○○部の機能を実現することを意味するものとする。
【００１５】
図１において、データ解析サーバ１０は、大規模データを解析する。データ解析サーバ１０は、解析部１１を備える。解析部１１はクエリを解析し、データ処理装置２０に出力する。
【００１６】
データ処理装置２０は、インメモリデータベース２１、デバイスドライバ２３、モデル選択部２４、ＨＤＤ２５、割当て部２６、推論部Ｐ１、ＣＰＵ２７、メモリコントローラ２８、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）サブシステム２９、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）２０１、ＳＣＭ２０２およびＤＲＡＭ２０３を備える。
【００１７】
インメモリデータベース２１は、ＳＣＭ２０２およびＤＲＡＭ２０３にデータを配置して処理を実行する。インメモリデータベース２１は、データ解析サーバ１０で解析される大規模データを記憶する。
【００１８】
デバイスドライバ２３は、ＳＳＤ２０１のリード／ライト処理を実行したり、ＳＣＭ２０２にプリフェッチしたデータをＤＲＡＭ２０３にコピーしたりする。ＳＳＤ２０１のリード／ライト処理を実行する場合、デバイスドライバ２３は、例えば、ＮＶＭ（ｎｏｎ−ｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ）  Ｅｘｐｒｅｓｓに準拠することができる。デバイスドライバ２３は、オペレーティングシステム２２に実装される。
【００１９】
ＣＰＵ２７は、データ処理装置２０全体の動作制御を司るハードウェアである。メモリコントローラ２８は、ＣＰＵ２７がＤＲＡＭ２０３のデータをリード／ライトする際にＤＲＡＭ２０３の動作を制御する。なお、メモリコントローラ２８は、ＣＰＵ２７に内蔵されていてもよい。Ｉ／Ｏサブシステム２９は、ＳＳＤ２０１のデータの入出力を管理する。Ｉ／Ｏサブシステム２９とＳＳＤ２０１との間のデータ伝送は、ＰＣＩ  Ｅｘｐｒｅｓｓを用いることができる。
【００２０】
ＤＲＡＭ２０３は、ＣＰＵ２７が実行中のプログラムを格納したり、ＣＰＵ２７がプログラムを実行するためのワークエリアを設けたりすることができる。ＤＲＡＭ２０３は、ＣＰＵ２７のメインメモリとして用いられる。
【００２１】
ＳＣＭ２０２は、メインメモリの容量を拡張するために用いられる。ＳＣＭ２０２は、ＤＲＡＭ２０３と同じインターフェースでバイト単位にアクセス可能な不揮発性メモリである。ＳＣＭ２０２には、ＳＳＤ２０１からリードされたデータを一時的に保持するプリフェッチバッファを割り当てることができる。ＳＣＭ２０２は、ＳＳＤ２０１のストレージキャッシュとして用いることができる。このとき、ＳＣＭ２０２は、ＤＲＡＭ２０３に格納できない規模の使用頻度が高いデータを格納し、ＳＳＤ２０１よりも小さいアクセスタイムで使用可能とすることができる。例えば、ＳＣＭ２０２は、ＳＳＤ２０１に対して１０００倍程度長寿命かつ高速であり、ＤＲＡＭ２０３に対して１０倍程度の容量を有することができる。
【００２２】
ＳＣＭ２０２は、例えば、磁気抵抗メモリ（ＭＲＡＭ）、抵抗変化メモリ（ＲｅＲＡＭ）、相変化メモリ（ＰＲＡＭ／ＰＣＭ）、強誘電体メモリ（ＦｅＲＡＭ）、スピン注入型磁気メモリ（ＳＴＴ−ＭＲＡＭ）、カーボンナノチューブメモリまたは３Ｄクロスポイントメモリである。
【００２３】
ここで、ＳＣＭ２０２をプリフェッチバッファとして用いることにより、ＤＲＡＭ２０３の容量を増大させることなく、プリフェッチ領域を拡大することができ、コストアップの増大を抑制しつつ、ＤＲＡＭ２０３に格納できない規模のデータ処理のスループットを向上させることができる。
【００２４】
ＳＳＤ２０１は、メインメモリの補助記憶部として用いられるストレージデバイスである。ＳＳＤ２０１は、ＮＡＮＤフラッシュメモリにデータを記憶する。ＮＡＮＤフラッシュメモリは、ページ単位で読み出しまたは書き込みが可能で、ブロック単位で消去が可能な不揮発性メモリである。
【００２５】
ＨＤＤ２５は、補助記憶部の容量を拡張するために用いられる。ＨＤＤ２５は、ＮＮ（Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）変数ＶＢ１およびＩ／Ｏトレース圧縮データ２５Ｂを記憶する。ＮＮ変数ＶＢ１は、ニューラルネットワークで推論部Ｐ１を構成するために用いることができる。ＮＮ変数ＶＢ１は、例えば、ＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅ）ファイルに格納することができる。Ｉ／Ｏトレース圧縮データ２５Ｂは、Ｉ／Ｏトレースデータを圧縮したデータである。Ｉ／Ｏトレースデータは、ＤＲＡＭ２０３に対して過去の読み出しまたは書き込みに用いられたデータである。Ｉ／Ｏトレースデータの属性として、例えば、時刻、ブロックアドレス、ブロック数、読み出し／書き込み種別が記録される。
【００２６】
各推論部Ｐ１〜Ｐ３・・は、ＳＳＤ２０１からのプリフェッチに用いられるアドレスを予測し、その予測結果に基づいてデバイスドライバ２３に外部からプリフェッチを指示する。このとき、各推論部Ｐ１〜Ｐ３・・は、ｓｏｕｒｃｅアドレスおよびｄｅｓｔｉｎａｔｉｏｎアドレスを指定してプリフェッチを指示する。ｓｏｕｒｃｅアドレスは、プリフェッチ対象となるデータが格納されているＳＳＤ２０１のアドレスである。ｄｅｓｔｉｎａｔｉｏｎアドレスはプリフェッチ対象となるデータが格納されるＳＣＭ２０２のアドレスである。
【００２７】
各推論部Ｐ１〜Ｐ３・・は、Ｉ／Ｏトレースデータのデータパターンに応じて異なる予測モデルまたはアルゴリズムを持つ。各推論部Ｐ１〜Ｐ３・・が持つ予測モデルまたはアルゴリズムは、Ｉ／Ｏトレースデータのデータパターンに応じてアクセス頻度が高いデータを予測できるように構築することができる。例えば、各推論部Ｐ１〜Ｐ３・・がニューラルネットワークである場合、Ｉ／Ｏトレースデータのデータパターンに応じてアクセス頻度が高いデータを予測できるように学習した学習済みモデルを用いることができる。各推論部Ｐ１〜Ｐ３・・は、データ解析サーバ１０で用いられるクエリとデータベースに関連付けることができる。
【００２８】
また、各推論部Ｐ１〜Ｐ３・・は、デバイスドライバ２３から性能情報を取得し、プリフェッチに用いるＩ／Ｏ帯域の使用率がしきい値を超えると、プリフェッチを延期するように指示することができる。これにより、プリフェッチによるＩ／Ｏ帯域の占有を回避するとともに、適切なタイミングでの予測に基づいてプリフェッチデータの入れ替えを実行させることができる。
【００２９】
なお、各推論部Ｐ１〜Ｐ３・・は、ＳＳＤ２０１からのプリフェッチ対象となるアドレスを予測する予測モデルの他、プリフェッチに用いるＩ／Ｏ帯域の使用率を予測する予測モデルをさらに備えてもよい。このとき、各推論部Ｐ１〜Ｐ３・・は、その予測モデルで予測されたＩ／Ｏ帯域の使用率に基づいて、プリフェッチのタイミングを決定するようにしてもよい。
【００３０】
割当て部２６は、デバイスドライバ２３の外部に設けられ、ＳＳＤ２０１からリードされたデータを一時的に保持するプリフェッチバッファをＳＣＭ２０２に割り当てる。このとき、割当て部２６は、各推論部Ｐ１〜Ｐ３・・によるアドレス予測に対して適正化されたプリフェッチバッファの面数およびサイズをデバイスドライバ２３に外部から指示することができる。
【００３１】
モデル選択部２４は、各推論部Ｐ１〜Ｐ３・・をデバイスドライバ２３の外部から選択し、デバイスドライバ２３の外部に配置する。このとき、モデル選択部２４は、インメモリデータベース２１から与えられる実行中のクエリと一致するまたは類似度が高いクエリに関連付けられた推論部Ｐ１〜Ｐ３・・を選択することができる。このため、モデル選択部２４は、データ解析の種類などに応じて予測精度が高くなるように各推論部Ｐ１〜Ｐ３・・を入れ替えることができる。
【００３２】
また、モデル選択部２４は、プリフェッチのヒット率などの性能情報を取得し、その性能情報に基づいて各推論部Ｐ１〜Ｐ３・・を入れ替えることができる。例えば、モデル選択部２４は、プリフェッチのヒット率が低い場合、各推論部Ｐ１〜Ｐ３・・を入れ替えることで、プリフェッチのヒット率を向上させることができる。また、ニューラルネットワークの追加学習が行われた場合、例えば、推論部Ｐ１として、追加学習前のニューラルネットワークを追加学習済みのニューラルネットワークに置き換えることができ、推論部Ｐ１の予測精度を向上させることができる。
【００３３】
デバイスドライバ２３は、Ｉ／Ｏトレース採取部Ｄ１、モニタ部Ｄ２、ページ固定部Ｄ３、プリフェッチ部Ｄ４、ヒット判定部Ｄ５、コピー部Ｄ６およびインターフェースＦ１〜Ｆ４を備える。
【００３４】
Ｉ／Ｏトレース採取部Ｄ１は、Ｉ／Ｏトレースデータを採取する。モニタ部Ｄ２は、プリフェッチを含むＩ／Ｏトラフィックをモニタし、プリフェッチのヒット率などの性能情報を取得する。
【００３５】
ページ固定部Ｄ３は、ＳＣＭ２０２に割り当てられたプリフェッチバッファをページ固定する。このとき、ページ固定部Ｄ３は、ＳＳＤ２０１のリード性能が最大化するサイズ（例えば、１２８ＫＢ）を単位としてＳＣＭ２０２の記憶領域を分割し、この単位を束にして可変サイズのプリフェッチバッファを構成することができる。これにより、ページ固定部Ｄ３は、クエリおよびデータベースに関連付けられたニューラルネットワークの構造に応じてプリフェッチバッファの面数およびサイズを変化させることができ、プリフェッチデータのヒット率を向上させることができる。ここで、ページ固定部Ｄ３は、プリフェッチバッファをページ固定することにより、プリフェッチバッファのページングを防止することができる。
【００３６】
プリフェッチ実行部Ｄ４は、クエリとデータベースに関連付けられ各推論部Ｐ１〜Ｐ３・・による予測に基づいて、ＳＣＭ２０２に割り当てられるストレージキャッシュに対するプリフェッチを実行する（Ｍ１）。
【００３７】
ヒット判定部Ｄ５は、プリフェッチが成功したバッファ領域に対応するＳＳＤ２０１へのアクセスを判定する。そして、ヒットしない場合は、ヒット判定部Ｄ５は、リード要求があったデータをＳＳＤ２０１から読み出し、ＤＲＡＭ２０３にライトする（Ｍ３）。
【００３８】
コピー部Ｄ６は、ヒット判定部Ｄ５にてヒットと判定されたときに、ＳＣＭ２０２のプリフェッチデータをＤＲＡＭ２０３にメモリコピーし（Ｍ２）、Ｉ／Ｏ要求の完了処理を実行する。メモリコピーでは、例えば、Ｃ言語で記述されたｍｅｍｃｐｙ関数を用いることができる。このとき、メモリコピーは、コピー元の先頭アドレスから指定バイト数だけコピー先にコピーする。
【００３９】
コピー部Ｄ６は、ヒットした場合に、ＳＣＭ２０２のプリフェッチデータをＤＲＡＭ２０３にメモリコピーすることで、ＳＳＤ２０１へのコマンドを発行する必要がなくなり、プリフェッチ性能を向上させることができる。また、メモリコピーは、ＤＤＲ（Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ）にてバイト単位でデータをコピーすることができ、ＳＳＤ２０１からのリード／ライトに比べてスループットおよびレイテンシを向上させることができる。
【００４０】
インターフェースＦ１は、Ｉ／Ｏトレース採取部Ｄ１で採取されたＩ／Ｏトレースデータをデバイスドライバ２３の外部に提供する。インターフェースＦ２は、モニタ部Ｄ２で取得されたプリフェッチに関する性能情報を外部に提供する。インターフェースＦ３は、割当て部２６からの指示をページ固定部Ｄ３に通知する。インターフェースＦ４は、各推論部Ｐ１〜Ｐ３・・からのプリフェッチの指示をプリフェッチ実行部Ｄ４に通知する。
【００４１】
機械学習用サーバ３０は、機械学習させた予測モデルを作成する。機械学習用サーバ３０は、機械学習フレームワーク３１を備える。機械学習フレームワーク３１は、機械学習に用いるためのソフトウェアライブラリである。機械学習フレームワーク３１は、例えば、テンソルフローを用いることができる。
【００４２】
機械学習フレームワーク３１は、学習部３２、推論部３３および変換部３４を備える。学習部３２は、デバイスドライバ２３がデータ解析実行中のＩ／Ｏトレースデータに基づいて、ニューラルネットワークを学習させ、ＮＮ変数ＶＡ１〜ＶＡ３・・を求める。このとき、ニューラルネットワークの学習に用いる学習データは、クエリとデータベースに関連付けられている。そして、学習部３２は、クエリとデータベースごとにアクセス頻度が高いデータを予測できるようにＮＮ変数ＶＡ１〜ＶＡ３・・を求める。また、学習部３２は、クエリとデータベースの類似度に基づいて追加学習させるニューラルネットワークを選択することができる。
【００４３】
推論部３３は、ＮＮ変数ＶＡ１〜ＶＡ３・・に基づいて生成されるニューラルネットワークを予測モデルとしてアクセス頻度が高いデータを予測する。変換部３４は、ＮＮ変数ＶＡ１〜ＶＡ３のデータ形式を機械学習フレームワーク３１で扱われるデータ形式からデータ処理装置２０で扱われるデータ形式に変換する。
【００４４】
プリフェッチの処理手順としては、デバイスドライバ２３は、ＳＳＤ初期化処理において、プリフェッチ専用のｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューの領域を確保し、割り込みを起こさない簡素化したＳＳＤリード完了処理の設定を行う。
【００４５】
モデル選択部２４は、クエリとデータベースに応じて推論部Ｐ１を選択すると、その推論部Ｐ１に対応した学習済のＮＮ変数ＶＢ１を読み込み、推論部Ｐ１が予測対象とするＳＳＤ２０１のブロックアドレス領域の位置とサイズをデバイスドライバ２３に設定する。そして、デバイスドライバ２３は、プリフェッチバッファをＳＣＭ２０２に割り当て、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドを予め作成するとともに、ページ固定処理を実行する。
【００４６】
デバイスドライバ２３は、ＳＳＤ２０１に対するＩ／Ｏ要求をトレースしており、過去のＩ／Ｏトレースデータの一定数を保持する。推論部Ｐ１は、デバイスドライバ２３に対して予測モデルが入力として必要とする数のデータ取得要求を行い、ＳＳＤ２０１のブロックアドレス領域のアクセス頻度を予測する。このとき、推論部Ｐ１は、デバイスドライバ２３がモニタするプリフェッチによるものを含むＩ／Ｏトラフィック情報を事前に取得することによって、Ｉ／Ｏ帯域に空きがあるときに推論とプリフェッチを行うようにタイミングを調整することができる。
【００４７】
予測されたアクセス頻度の順位をもとに、ＳＳＤ２０１のどのブロックアドレス領域からプリフェッチバッファのどこにデータをリードするかは、データ解析の種類などに応じて予測モデルごとに最適化することができる。このため、予測モデルをオペレーティングシステム２２の外部に実装することにより、オペレーティングシステム２２を入れ替えることなく、予測モデルを切り替えることができる。一方、プリフェッチ実行部Ｄ４をオペレーティングシステム２２内に実装することにより、プラットフォームレベルでプリフェッチ機構を持たせることができる。このため、データ形式に対応して複数のデータベースに別個のプリフェッチ機構を実装する必要がなくなり、プリフェッチ機構の実装を効率化することができる。
【００４８】
デバイスドライバ２３は、プリフェッチが成功したプリフェッチバッファ領域に対応するＳＳＤ２０１へのアクセスを判定し、ヒットした場合はプリフェッチデータのメモリコピーと、Ｉ／Ｏ要求の完了処理を実行する。このとき、デバイスドライバ２３は、ＳＳＤ２０１へのリード／ライトコマンドを発行することなく、ＳＣＭ２０２のプリフェッチデータをＤＲＡＭ２０３にメモリコピーすることができ、アクセス性能を改善することができる。
【００４９】
図２は、図１のデータ処理装置のハードウェア構成例を示すブロック図である。
図２において、データ処理装置２０は、プロセッサ１０１、通信制御デバイス１０２、通信インターフェース１０３、主記憶部１０４、主記憶拡張部１０５、補助記憶部１０６および補助記憶拡張部１０７を備える。プロセッサ１０１、通信制御デバイス１０２、通信インターフェース１０３、主記憶部１０４、主記憶拡張部１０５、補助記憶部１０６および補助記憶拡張部１０７は、内部バス１０８を介して相互に接続されている。
【００５０】
プロセッサ１０１は、データ処理装置２０全体の動作制御を司るハードウェアである。プロセッサ１０１は、ＣＰＵであってもよいし、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であってもよい。プロセッサ１０１は、シングルコアロセッサであってもよいし、マルチコアロセッサであってもよい。プロセッサ１０１は、処理の一部または全部を行うハードウェア回路（例えば、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）またはＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ））を備えていてもよい。プロセッサ１０１は、ニューラルネットワークを備えていてもよい。
【００５１】
主記憶部１０４は、例えば、ＳＲＡＭまたはＤＲＡＭなどの揮発性半導体メモリから構成することができる。主記憶部１０４には、プロセッサ１０１が実行中のプログラムを格納したり、プロセッサ１０１がプログラムを実行するためのワークエリアを設けたりすることができる。
【００５２】
主記憶拡張部１０５は、主記憶部１０４の容量を拡張する。主記憶拡張部１０５は、ＳＣＭなどの不揮発性半導体メモリから構成することができる。主記憶拡張部１０５は、補助記憶部１０６のストレージキャッシュとして用いることができる。主記憶拡張部１０５の容量は、主記憶部１０４の容量より大きい。主記憶拡張部１０５のアクセス速度は、補助記憶部１０６のアクセス速度より速い。
【００５３】
補助記憶部１０６は、大容量の記憶容量を有する不揮発性半導体メモリから構成することができる。補助記憶部１０６は、例えば、ＳＳＤなどのストレージデバイスである。補助記憶部１０６は、主記憶拡張部１０５に比べて単位容量当たりのコストを安くすることができる。
【００５４】
補助記憶拡張部１０７は、補助記憶部１０６の容量を拡張する。補助記憶部１０６は、例えば、ＨＤＤなどのストレージデバイスである。補助記憶拡張部１０７は、補助記憶部１０６に比べて単位容量当たりのコストを安くすることができる。補助記憶拡張部１０７は、各種プログラムの実行ファイルやプログラムの実行に用いられるデータを保持することができる。補助記憶拡張部１０７には、デバイスドライバプログラム１０７Ａおよび外部プログラム１０７Ｂを格納することができる。
【００５５】
デバイスドライバプログラム１０７Ａは、オペレーティングシステム上で動作するプログラムである。外部プログラム１０７Ｂは、オペレーティングシステム外で動作するプログラムである。デバイスドライバプログラム１０７Ａおよび外部プログラム１０７Ｂは、データ処理装置２０にインストール可能なソフトウェアであってもよいし、データ処理装置２０にファームウェアとして組み込まれていてもよい。
【００５６】
通信制御デバイス１０２は、外部との通信を制御する機能を有するハードウェアである。通信制御デバイス１０２は、通信インターフェース１０３を介してネットワーク１０９に接続される。ネットワーク１０９は、インターネットなどのＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよいし、ＷｉＦｉまたはイーサネット（登録商標）などのＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよいし、ＷＡＮとＬＡＮが混在していてもよい。また、ネットワーク１０９には、データ解析サーバ１０および機械学習用サーバ３０が接続されている。
【００５７】
プロセッサ１０１がデバイスドライバプログラム１０７Ａを主記憶部１０４に読み出し、デバイスドライバプログラム１０７Ａを実行することにより、図１のデバイスドライバ２３の機能を実現することができる。また、プロセッサ１０１が外部プログラム１０７Ｂを主記憶部１０４に読み出し、外部プログラム１０７Ｂを実行することにより、図１のモデル選択部２４、推論部Ｐ１および割当て部２６の機能を実現することができる。
【００５８】
図３は、図１のデバイスドライバと外部プログラムとの連携処理の流れを示す図である。
図３において、図１のＳＳＤ２０１の初期化処理として、デバイスドライバ２３は、プリフェッチ専用のｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューをＤＲＡＭ２０３に作成し（Ｂ１１）、ＳＳＤ２０１を初期化する（Ｃ１１）。ＳＳＤ２０１の初期化では、例えば、ｃｏｍｐｌｅｔｉｏｎキューにリード／ライト完了通知が入ると、どの関数を呼ぶかなどを設定する。ｓｕｂｍｉｔキューは、ＳＳＤ２０１へのリード／ライト要求コマンドを保持する。ｃｏｍｐｌｅｔｉｏｎキューは、ＳＳＤ２０１からのリード／ライト完了通知を保持する。リード／ライト完了通知は、リード／ライトの正常終了通知または異常終了通知を含むことができる。
【００５９】
オペレーティングシステム外に実装された外部プログラムは、図１の推論部Ｐ１として用いる予測モデルおよび変数を外部からデータ処理装置２０に取り込み（Ａ１１、Ａ１２）、プリフェッチバッファをＳＣＭ２０２に割り当てる（Ａ１３）。なお、外部プログラムによる処理は、図１のＣＰＵ２７が外部プログラムを実行することで実現される。
【００６０】
次に、外部プログラムは、コマンド作成のｉｏｃｔｌを実行する（Ａ１４）。ｉｏｃｔｌは、外部プログラムがデバイスドライバ２３を制御したり、デバイスドライバ２３と通信したりするためのシステムコールである。このとき、外部プログラムは、デバイスドライバ２３のインターフェースを呼び出し、引数を設定した関数を実行させることができる。デバイスドライバ２３は、コマンド作成のｉｏｃｔｌが実行されると、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドを作成する（Ｂ１２）。
【００６１】
次に、外部プログラムは、性能情報採取のｉｏｃｔｌを実行する（Ａ１５）。デバイスドライバ２３は、性能情報採取のｉｏｃｔｌが実行されると、プリフェッチに関する性能情報を採取し、外部プログラムに送信する（Ｂ１３）。次に、外部プログラムは、性能情報に基づいてプリフェッチ性能を監視するとともに、プリフェッチ頻度を調整する（Ａ１６）。
【００６２】
次に、外部プログラムは、Ｉ／Ｏトレース採取のｉｏｃｔｌを実行する（Ａ１７）。デバイスドライバ２３は、Ｉ／Ｏトレース採取のｉｏｃｔｌが実行されると、Ｉ／Ｏトレースデータを採取し、外部プログラムに送信する（Ｂ１４）。次に、外部プログラムは、Ｉ／Ｏトレースデータに基づいてブロックアドレス領域を予測し（Ａ１８）、プリフェッチバッファに入れ替えられる入替データを決定する（Ａ１９）。
【００６３】
次に、外部プログラムは、リードサブミットのｉｏｃｔｌを実行する（Ａ１７）。デバイスドライバ２３は、リードサブミットのｉｏｃｔｌが実行されると、ＳＳＤ２０１のリードコマンドのサブミットを実行する（Ｂ１５）。次にデバイスドライバ２３は、ＳＳＤ２０１から送られたＳＳＤ２０１のリード完了を確認し、プリフェッチバッファの状態を更新するとともに、外部プログラムに通知する（Ｂ１６）。
【００６４】
外部プログラムは、ＳＳＤ２０１のリード完了が通知されるたびに、Ａ１５〜Ａ２０の処理を繰り返す。このとき、デバイスドライバ２３は、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドのサブミットおよび完了確認のたびにプリフェッチバッファの状態を更新する。
【００６５】
次に、デバイスドライバ２３は、プリフェッチが成功したバッファ領域に対応するＳＳＤ２０１へのアクセスを判定する（Ｂ１７）。そして、ヒットした場合は、デバイスドライバ２３は、ＳＣＭ２０２のプリフェッチデータをＤＲＡＭ２０３にメモリコピーし（Ｂ１８）、サブミットせずにＩ／Ｏ要求の完了処理を実行する（Ｂ１９）。
【００６６】
次に、外部プログラムは、コマンド領域解放のｉｏｃｔｌを実行する（Ａ２１）。デバイスドライバ２３は、コマンド領域解放のｉｏｃｔｌが実行されると、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドの領域を解放する。次に、外部プログラムは、ＳＣＭ２０２に割り当てたプリフェッチバッファを解放する。
【００６７】
ここで、プリフェッチ専用のコマンドキューおよび完了通知キューを用いたプリフェッチ処理では、デバイスドライバ２３がコマンドキューにサブミットした数だけ、ＳＳＤ２０１からの正常完了通知が完了通知キューに設定されると、ＳＳＤ２０１からのリード処理を完了することができ、プリフェッチ処理を簡素化してプリフェッチのオーバーヘッドを削減することができる。
【００６８】
一方、Ｂ１７のヒットチェックにおいて、ヒットしない場合は、デバイスドライバ２３は、割り込みハンドラ処理を伴う通常のプリフェッチを実行する。このとき、デバイスドライバ２３は、ＳＳＤ２０１にサブミットを行い（Ｂ２１）、ＳＳＤ２０１からのリードの完了通知があると（Ｂ２２）、割り込み処理を実行する（Ｂ２３）。次に、デバイスドライバ２３は、ハンドラ処理を実行した後（Ｂ２４）、完了処理を実行する（Ｂ２５）。
【００６９】
なお、プリフェッチバッファのページ固定時には、外部プログラムは、以下の構造体へのポインタを引数とするｉｏｃｔｌ関数を呼び出すことができる。
ｓｔｒｕｃｔ  ｐｒｆｂｆ＿ｕｓｅｒ＿ｐｇ｛
ｉｎｔ  ｈｍｘ＿ｎｕｍ＿ｄｕ；／／プリフェッチバッファ面数
ｉｎｔ  ｌｂａ＿ｉｎｔ＿ｄｕ；／／プリフェッチバッファサイズ／面数
ｖｏｉｄ  ＊＊ｐｒｆｂｆ＿ｄｕ；／／プリフェッチバッファ仮想アドレスの配列
｝；
【００７０】
プリフェッチ対象となるＳＳＤ領域の指定時には、外部プログラムは、以下の構造体へのポインタを引数とするｉｏｃｔｌ関数を呼び出すことができる。
ｓｔｒｕｃｔ  ｐｒｆｌｂａ＿ｐａｒａｍ｛
ｌｏｎｇ  ｐｒｆｓｓｄ＿ａｄｄｒ；／／プリフェッチ対象となるＳＳＤ領域の位置
｝；
【００７１】
Ｉ／Ｏトレースデータの取得時には、外部プログラムは、以下の構造体へのポインタを引数とするｉｏｃｔｌ関数を呼び出すことができる。
ｓｔｒｕｃｔ  ｔｒｄｔｂｆ＿ｕｓｅｒ｛
ｉｎｔ  ｍｘｌｎ＿ｄｕ；／／取得するＩ／Ｏトレース数
ｌｏｎｇ  ＊ｔｒｄｂｆ＿ｄｕ；／／Ｉ／Ｏトレースデータの長さ
｝；
【００７２】
プリフェッチ実行時には、デバイスドライバ２３は、以下の構造体へのポインタを引数とするｉｏｃｔｌ関数を実行することができる。
ｓｔｒｕｃｔ  ｓｕｂｐｒｆ＿ｕｓｅｒ｛
ｉｎｔ  ｓｒｃ＿ｄｕ；／／ＳＳＤ高頻度アクセス領域を分割した領域番号
ｉｎｔ  ｄｅｓｔ＿ｄｕ；／／分割して割当てたプリフェッチバッファの番号
｝；
【００７３】
性能モニタデータの取得時には、外部プログラムは、以下の構造体へのポインタを引数とするｉｏｃｔｌ関数を呼び出すことができる。
ｓｔｒｕｃｔ  ｄｂｇｄｔｂｆ＿ｕｓｅｒ｛
ｉｎｔ  ｍｘｌｎ＿ｄｕ；／／取得する性能モニタデータの数
ｌｏｎｇ  ＊ｄｂｇｂｆ＿ｄｕ；／／性能モニタデータの長さ
｝；
【００７４】
図４は、図１のプリフェッチ対象のＳＳＤの記憶領域とＳＣＭの記憶領域との関係を示す図である。
図４において、ＳＳＤ２０１のプリフェッチ対象領域Ｒ１は、プリフェッチ対象となるＳＳＤ領域の位置ｐｒｆｓｓｄ＿ａｄｄｒが設定され、プリフェッチバッファサイズｌｂａ＿ｉｎｔ＿ｄｕで分割される。ＳＳＤ２０１の各分割領域には、分割領域番号が付されている。ＳＳＤ２０１の記憶領域はブロックアドレスが割り当てられる。
【００７５】
ＳＣＭ２０２のプリフェッチ領域Ｒ２は、プリフェッチバッファサイズｌｂａ＿ｉｎｔ＿ｄｕで分割され、面数ｌｂａ＿ｉｎｔ＿ｄｕだけ割り当てられる。図４では、面数ｈｍｘ＿ｎｕｍ＿ｄｕ＝４の例を示した。プリフェッチ領域Ｒ２の各面には、仮想アドレスｐｒｆｂｆ＿ｄｕが割り当てられる。図１のデバイスドライバ２３は、ＳＳＤ２０１の各分割領域の分割領域番号をプリフェッチ領域Ｒ２の各面の仮想アドレスに変換することができる。
【００７６】
プリフェッチバッファの各面の状態変数配列［ｈｍｘ_ｎｕｍ_ｄｕ］には、ｐｒｆ_ｄｔ［ｉ］、ｐｒｆｓｖ_ｄｔ［ｉ］およびｐｒｆｄｒｔ_ｄｔ［ｉ］を設定することができる。
ただし、ｉは、プリフェッチバッファの各面の番号、ｐｒｆ_ｄｔ［ｉ］は、プリフェッチ済のＳＳＤ分割領域番号、ｐｒｆｓｖ_ｄｔ［ｉ］は、ＳＳＤ２０１のリードが正常終了したことを示すコマンドの個数、ｐｒｆｄｒｔ_ｄｔ［ｉ］は、ダーティ状態を示すビットマップである。
【００７７】
ＳＳＤ２０１の各分割領域は、シーケンシャルリード性能が高くなるデータサイズを単位として再分割することができる。再分割領域Ｒ１１のデータサイズは固定値とすることができる。そして、この再分割領域Ｒ１１を束として分割領域を構成し、各分割領域に含まれる再分割領域Ｒ１１を可変とすることにより、プリフェッチバッファの面数およびサイズを可変とすることができる。
【００７８】
ここで、プリフェッチバッファのサイズが大きくなると、遠い未来まで予測されたデータをプリフェッチする必要があり、ヒット率が低下する。プリフェッチバッファのサイズが小さくなると、予測対象となるデータが増大し、ヒット率が低下する。このため、プリフェッチバッファのサイズには、ヒット率が最大化する最適なサイズがあり、プリフェッチバッファのサイズを可変とすることより、プリフェッチバッファのサイズを最適化することができる。
【００７９】
このとき、予測に最適なサイズは、Ｉ／Ｏトレースデータのデータパターンに応じて変化する。このため、Ｉ／Ｏトレースデータのデータパターンに応じてアクセス頻度が高いデータを予測できるように構築された予測モデルに対し、その予測モデルに最適なプリフェッチバッファのサイズおよび面数を組で学習することができる。そして、図１のデバイスドライバ２３は、その予測モデルに最適なプリフェッチバッファのサイズおよび面数に基づいて、ＳＣＭ２０２のプリフェッチ領域Ｒ２を設定することができる。
【００８０】
図５は、図１のデバイスドライバによる初期化処理を示すフローチャートである。
図５において、デバイスドライバ２３は、一定数のＩ／Ｏトレースデータを格納するデータ配列をＤＲＡＭ２０３に割り当て、初期化する（Ｓ１１）。次に、デバイスドライバ２３は、プリフェッチに関する性能モニタデータを格納するデータ配列をＤＲＡＭ２０３に割り当て、初期化する（Ｓ１２）。次に、デバイスドライバ２３は、プリフェッチバッファの割当て状態を示す変数を未割当に設定する（Ｓ１３）。
【００８１】
次に、デバイスドライバ２３は、プリフェッチとは関係なく作成されるｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのペア数がシステムの上限値より小さいかどうかを判断する（Ｓ１４）。プリフェッチとは関係なく作成されるｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのペア数が上限値より小さい場合、デバイスドライバ２３は、プリフェッチ専用のｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのポインタ変数を割り当てる（Ｓ１５）。
【００８２】
次に、デバイスドライバ２３は、ｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのペア数をインクリメントする（Ｓ１６）。次に、デバイスドライバ２３は、プリフェッチ専用のｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューの領域をＤＲＡＭ２０３に割り当て、初期化する（Ｓ１７）。次に、デバイスドライバ２３は、プリフェッチ専用のｃｏｍｐｌｅｔｉｏｎキューに、割り込みハンドラ処理を伴わない簡素化した完了処理関数（＃）を設定する（Ｓ１８）。なお、完了処理関数（＃）は、完了状態の確認とヘッドポインタの更新のみを実行する。
【００８３】
一方、プリフェッチとは関係なく作成されるｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのペア数が上限値以上の場合、デバイスドライバ２３は、キューＩＤが上限値−１であるｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューをプリフェッチに使用する（Ｓ１９）。ｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのキューＩＤが上限値−１の場合、デバイスドライバ２３は、Ｓ１８に進む。
【００８４】
一方、ｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューのキューＩＤが上限値−１でない場合、デバイスドライバ２３は、プリフェッチ専用のｓｕｂｍｉｔキューおよびｃｏｍｐｌｅｔｉｏｎキューの領域割当てを初期化する（Ｓ２０）。次に、デバイスドライバ２３は、ｃｏｍｐｌｅｔｉｏｎキューに完了処理関数を設定する（Ｓ２１）。
【００８５】
図６は、図１のデバイスドライバによるページ固定処理を示すフローチャートである。
図６において、図１のページ固定部Ｄ３は、プリフェッチバッファの面数およびサイズを引数の構造体から取得する（Ｓ３１）。この引数の構造体は、上述したｓｔｒｕｃｔ  ｐｒｆｂｆ＿ｕｓｅｒ＿ｐｇで定義される。
【００８６】
次に、ページ固定部Ｄ３は、プリフェッチバッファの各面の仮想アドレスを取得する（Ｓ３２）。次に、ページ固定部Ｄ３は、プリフェッチバッファの各面の状態を格納するデータ配列をＤＲＡＭ２０３に割り当て、初期化する（Ｓ３３）。プリフェッチバッファの各面の状態は、例えば、プリフェッチ中、プリフェッチ済またはライト中でダーティなどである。
【００８７】
次に、ページ固定部Ｄ３は、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドの領域をＤＲＡＭ２０３に割り当て、初期化する（Ｓ３４）。次に、ページ固定部Ｄ３は、プリフェッチバッファをＳＣＭ２０２にページ固定する（Ｓ３５）。このとき、プリフェッチバッファとして、Ｓ３１で取得したサイズ×面数の領域がＳＣＭ２０２に設定される。ここで、プリフェッチバッファをページ固定することにより、メモリが枯渇したときに補助記憶装置にページアウトされるのを防止することができる。
【００８８】
次に、ページ固定部Ｄ３は、プリフェッチバッファのスキャッタギャザーリストを作成する（Ｓ３６）。このスキャッタギャザーリストは、プリフェッチバッファの物理ページリストである。
【００８９】
次に、ページ固定部Ｄ３は、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドに対応するプリフェッチバッファの物理ページリストをＤＲＡＭ２０３に設定する（Ｓ３７）。この物理ページリストは、ＳＳＤ２０１のリード／ライトコマンドの格納場所を示すことができる。
【００９０】
次に、ページ固定部Ｄ３は、プリフェッチに関する性能モニタデータを格納するデータ配列をリセットする（Ｓ３８）。次に、ページ固定部Ｄ３は、プリフェッチバッファの割当て状態を示す変数を割当済に設定する（Ｓ３９）。
【００９１】
図７は、図１のデバイスドライバによるプリフェッチ実行処理を示すフローチャートである。
図７において、図１のプリフェッチ実行部Ｄ４は、ｓｏｕｒｃｅアドレスおよびｄｅｓｔｉｎａｔｉｏｎアドレスを引数の構造体から取得する（Ｓ４１）。この引数の構造体は、上述したｓｔｒｕｃｔ  ｓｕｂｐｒｆ＿ｕｓｅｒで定義される。
【００９２】
次に、プリフェッチ実行部Ｄ４は、プリフェッチバッファが割当済かどうかを判断する（Ｓ４２）。プリフェッチバッファが割当済でない場合、処理を終了する。一方、プリフェッチバッファが割当済の場合、プリフェッチ実行部Ｄ４は、プリフェッチバッファがダーティかどうかを判断する（Ｓ４３）。プリフェッチバッファがダーティとは、プリフェッチバッファに格納されたプリフェッチデータが、プリフェッチ元のＳＳＤ２０１のデータと一致しないことである。プリフェッチデータ以外のデータがプリフェッチバッファに書き込まれると、プリフェッチバッファがダーティになる。
【００９３】
次に、プリフェッチバッファがダーティの場合、プリフェッチ実行部Ｄ４は、現在プリフェッチしているＳＳＤ２０１の分割領域の分割領域番号からＳＳＤ２０１のブロックアドレスを算出する（Ｓ４４）。次に、プリフェッチ実行部Ｄ４は、Ｓ４１で取得した引数で指定されたプリフェッチバッファ番号から、予め作成したプリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドを選択する（Ｓ４５）。
【００９４】
次に、プリフェッチ実行部Ｄ４は、Ｓ４４で算出したブロックアドレスをセットし、ＳＳＤ２０１のライトコマンドをサブミットする（Ｓ４６）。次に、プリフェッチ実行部Ｄ４は、ＳＳＤ２０１から送られたＳＳＤ２０１のライト完了を確認する（Ｓ４７）。プリフェッチバッファがダーティの場合、Ｓ４４〜Ｓ４７の処理により、プリフェッチバッファに書込まれたデータをＳＳＤ２０１に書き戻すことができる。
【００９５】
次に、プリフェッチ実行部Ｄ４は、Ｓ４１で取得した引数で指定されたＳＳＤ２０１の分割領域の分割領域番号からＳＳＤ２０１のブロックアドレスを算出する（Ｓ４８）。次に、プリフェッチ実行部Ｄ４は、Ｓ４１で取得した引数で指定されたプリフェッチバッファ番号から、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドを選択する（Ｓ４９）。
【００９６】
次に、プリフェッチ実行部Ｄ４は、Ｓ４８で算出したブロックアドレスをセットし、ＳＳＤ２０１のリードコマンドをサブミットする（Ｓ５０）。次に、プリフェッチ実行部Ｄ４は、ＳＳＤ２０１から送られたＳＳＤ２０１のリード完了を確認する（Ｓ５１）。次に、プリフェッチ実行部Ｄ４は、プリフェッチしているＳＳＤ２０１の分割領域の分割領域番号を更新する（Ｓ５２）。Ｓ４８〜Ｓ５２の処理により、新しく入れ替えるデータをＳＳＤ２０１から読み出し、プリフェッチバッファに上書きすることができる。
【００９７】
一方、Ｓ４３において、プリフェッチバッファがダーティでない場合、プリフェッチ実行部Ｄ４は、Ｓ４４〜Ｓ４７の処理をスキップし、Ｓ４８に進む。
【００９８】
なお、プリフェッチ実行部Ｄ４は、プリフェッチ専用のＳＳＤ２０１のリード／ライトコマンドのサブミットおよび完了確認のたびにプリフェッチバッファの状態を更新する。
【００９９】
図８は、第２実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
図８において、データ処理装置２０Ａは、図１のＨＤＤ２５が除去されている。データ処理装置２０Ａは、データ解析サーバ１０およびストレージ装置４０に接続されている。それ以外の構成については、データ処理装置２０Ａは、図１のデータ処理装置２０と同様である。
【０１００】
ストレージ装置４０は、図１の機械学習用サーバ３０と同様の構成を備えるとともに、Ｉ／Ｏトレース圧縮データ２５Ｂを保持する。また、ストレージ装置４０は、ＣＰＵ４１およびＧＰＵ４２を備える。
【０１０１】
図１の構成では、データ処理装置２０がＩ／Ｏトレース圧縮データ２５Ｂを保持するのに対して、図８の構成では、ストレージ装置４０がＩ／Ｏトレース圧縮データ２５Ｂを保持する。この点以外は、データ処理装置２０Ａは、データ処理装置２０と同様に動作し、ストレージ装置４０は、機械学習用サーバ３０と同様に動作する。
【０１０２】
これにより、データ処理装置２０Ａは、Ｉ／Ｏトレース圧縮データ２５Ｂを保持する必要がなくなり、データ処理装置２０に比べてデータ処理装置２０Ａの規模を低減することができる。
【０１０３】
図９は、第３実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
図９において、このデータ処理装置は、図１のオペレーティングシステム２２の代わりにオペレーティングシステム２２Ａを備える。オペレーティングシステム２２Ａは、デバイスドライバ２３に加え、ブロックＩ／Ｏレイヤ２３Ａを備える。ブロックＩ／Ｏレイヤ２３Ａは、デバイスドライバ２３に読み出しまたは書き込み要求を行う。
【０１０４】
モニタプログラム５１は、ブロックＩ／Ｏレイヤ２３Ａの動作をモニタすることでＩ／Ｏトレースデータを取得する。前処理部５２は、Ｉ／Ｏトレースデータに含まれる｛時刻、読み出し／書き込み種別、ブロックアドレス、ブロック数｝の４次元ベクトルを、時系列データとして一定数だけ記録したテンソル形式データ５４に加工し、ＨＤＤ５３に格納する。
【０１０５】
これにより、Ｉ／Ｏトレースデータの採取をデバイスドライバ２３の上位層で実行することができ、Ｉ／Ｏトレースデータの採取、格納および管理の柔軟性を向上させることができる。また、Ｉ／Ｏトレースデータをテンソル形式データ５４に加工することにより、、一般に多次元テンソルとして扱われる機械学習に使用されるＩ／Ｏトレースデータの読み出しを効率良く行うことができる。
【０１０６】
図１０は、第４実施形態に係るデータ処理装置の機能的な構成を示すブロック図である。
図１０において、各データ処理装置２０−１〜２０−Ｎ（Ｎは２以上の整数）は、図１のデータ処理装置２０および機械学習用サーバ３０と同様の機能を備える。各データ処理装置２０−１〜２０−Ｎは、ネットワークを介して接続される。
【０１０７】
ここで、各データ処理装置２０−１〜２０−Ｎは、インメモリデータベース２１−１〜２１−Ｎ、デバイスドライバ２３−１〜２３−Ｎ、ＳＳＤ１−１〜１−Ｎ、ＳＣＭ２−１〜２−Ｎ、ＤＲＡＭ３−１〜３−Ｎ、ＨＤＤ６２−１〜６２−Ｎ、機械学習フレームワーク６０−１〜６０−Ｎおよび分散ファイルシステム６１−１〜６１−Ｎを備える。各ＨＤＤ６２−１〜６２−Ｎは、ＮＮ変数６３−１〜６３−ＮおよびＩ／Ｏトレース圧縮データ６３−１〜６３−Ｎを記憶する。各分散ファイルシステム６１−１〜６１−Ｎは、未学習のＩ／Ｏトレースデータの格納場所を管理する。
【０１０８】
各機械学習フレームワーク６０−１〜６０−Ｎは、未学習のＩ／Ｏトレースデータを保持するデータ処理装置２０−１〜２０−Ｎにニューラルネットワークの変数を転送し、その移動場所で未学習のＩ／Ｏトレースデータを学習した後、元のデータ処理装置２０−１〜２０−Ｎに戻る。
【０１０９】
これにより、各データ処理装置２０−１〜２０−Ｎが保持する学習データのデータ量を低減しつつ、学習に使用可能な学習データのデータ量を増大させることができる。このため、各ＨＤＤ６２−１〜６２−Ｎの容量を増大させることなく、プリフェッチの予測モデルの予測精度を向上させることができる。
【０１１０】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例および同等の構成が含まれる。例えば、上述した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。
【０１１１】
例えば、上述した実施形態では、図１の推論部Ｐ１〜Ｐ３・・として、Ｉ／Ｏトレースデータを学習させたニューラルネットワークを用いる方法について説明したが、必ずしもニューラルネットワークを用いる必要はない。例えば、Ｉ／Ｏトレースデータに基づいてアクセス頻度が高いデータを予測するアルゴリズムを構築し、そのアルゴリズムを推論部Ｐ１〜Ｐ３・・に用いるようにしてもよい。
【符号の説明】
【０１１２】
１０  データ解析サーバ、１１  解析部、２０  データ処理装置、２１  インメモリデータベース、２２  オペレーティングシステム、２３  デバイスドライバ、２４  モデル選択部、２５  ＨＤＤ、２６  割当て部、Ｐ１〜Ｐ３、３３  推論部、Ｆ１〜Ｆ４  インターフェース、Ｄ１  Ｉ／Ｏトレース採取部、Ｄ２  モニタ部、Ｄ３  ページ固定部、Ｄ４  プリフェッチ実行部、Ｄ５  ヒット判定部、Ｄ６  コピー部、ＶＡ１〜ＶＡ３、ＶＢ１  ＮＮ変数、２５Ｂ  Ｉ／Ｏトレース圧縮データ、２７  ＣＰＵ、２８  メモリコントローラ、２９  Ｉ／Ｏサブシステム、２０１  ＳＳＤ、２０２  ＳＣＭ、２０３  ＤＲＡＭ、３０  機械学習用サーバ、３１  機械学習フレームワーク、３２  学習部、３４  変換部
【図１】
2020135499.tif 000003
【図２】
2020135499.tif 000004
【図３】
2020135499.tif 000005
【図４】
2020135499.tif 000006
【図５】
2020135499.tif 000007
【図６】
2020135499.tif 000008
【図７】
2020135499.tif 000009
【図８】
2020135499.tif 000010
【図９】
2020135499.tif 000011
【図１０】
2020135499.tif 000012