JP5723812B2 - ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム - Google Patents

ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム Download PDF

Info

Publication number
JP5723812B2
JP5723812B2 JP2012059548A JP2012059548A JP5723812B2 JP 5723812 B2 JP5723812 B2 JP 5723812B2 JP 2012059548 A JP2012059548 A JP 2012059548A JP 2012059548 A JP2012059548 A JP 2012059548A JP 5723812 B2 JP5723812 B2 JP 5723812B2
Authority
JP
Japan
Prior art keywords
file
unit
file server
server application
request
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
JP2012059548A
Other languages
English (en)
Other versions
JP2013196066A (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.)
Hitachi Industry and Control Solutions Co Ltd
Original Assignee
Hitachi Industry and Control Solutions Co 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 Hitachi Industry and Control Solutions Co Ltd filed Critical Hitachi Industry and Control Solutions Co Ltd
Priority to JP2012059548A priority Critical patent/JP5723812B2/ja
Publication of JP2013196066A publication Critical patent/JP2013196066A/ja
Application granted granted Critical
Publication of JP5723812B2 publication Critical patent/JP5723812B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアに関し、制御情報付加I/O代行機能を有するファイルサーバ、データ入出力方法、I/O代行デーモンプログラム及びフックモジュールプログラムに関する。
ネットワークによって接続された計算機間で文書や画像等のデータファイルを共有する、ネットワークファイル共有技術が実用化されている。ネットワークファイル共有技術において、WS(Work Station)やNAS(Network Attached
Storage)等のサーバ装置は、PC(Personal Computer)や携帯端末等のクライアント端末に対して、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介してサーバ装置上のファイルにアクセスするサービスである、ネットワークファイル共有サービスを提供する。ネットワークファイル共有サービスを提供するサーバ装置は、一般に、ファイルサーバとよばれる。
ネットワークファイル共有サービスで用いられる通信プロトコルには、主にUNIX(登録商標)系のOS(Operating System)で用いられるNFS(Network
File System)、および、主にWindows(登録商標)系のOSで用いられるCIFS(Common Internet File System)等がある。
UNIX(登録商標)系のOS上でCIFSを用いたネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアとして、Sambaが普及している。Sambaは、サーバ装置のOSが提供するソケットインタフェースを介してクライアント端末と通信し、ファイルシステムインタフェースを介してサーバ装置上のファイルにアクセスする。
特許文献1には、ファイルシステムのオブジェクトに対して、IOCTL(Input Output Control)システムコールを発行することにより、Windows(登録商標)系の属性更新権等のアクセス制御機能をSambaで使用する技術が開示されている。
一方、IOCTLシステムコールを用いて個々のI/O(Input /Output)要求にデッドライン情報等の制御情報を付加することによりI/O制御の精度を高める、リアルタイムI/Oファイルシステムが開発されている。特許文献2には、ファイルシステムのメタデータにアクセス制御情報を格納し、追加の機能モジュールを読み込むことによりファイルシステムの機能を拡張する技術が開示されている。
また、特許文献3には、非リアルタイムOSに外付けのリアルタイムソフトウェアでリアルタイムI/Oを実現する技術が開示されている。
しかし、これらの技術の組み合わせでは特許文献1記載のSambaのようなI/O特性を認識しない非リアルタイムソフトウェアを、特許文献2記載のようなI/O特性を認識するリアルタイムファイルシステム上で動作させることはできない。
なぜならば、特許文献3に記載の方法では、特許文献2記載のようなリアルタイムファイルシステムがI/O特性を認識するために必要な情報をI/Oに付加することができないからである。I/O特性とは、あらかじめ設定した構成情報を参照して得られる制御情報だけでなく、動的に実際に発行されたI/Oのパターンを解析することで得られる制御情報の両方が含まれる。
特開2009−211668号公報 米国特許第7853822号明細書 特表2007−528032号公報
前記従来の技術では、Samba等の既存のファイルサーバアプリケーションソフトウェアが、リアルタイムI/Oファイルシステム等の新たなファイルシステムの拡張機能に対応しその効果を得るためには、ファイルサーバアプリケーションソフトウェアを改変し、ファイルI/O要求発行時に、I/O要求に制御情報を付加するIOCTLシステムコールを発行する等の機能を実装する必要があった。従って、ファイルサーバアプリケーションソフトウェア毎に、新たなファイルシステムに対応するための改変工数がかかるという課題があった。
本発明は、前記課題を解決する、個々のファイルサーバアプリケーションソフトウェアの改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する方式および装置を提供することを目的とする。
前記課題を解決するために、本発明では、従来のファイルサーバアプリケーション部のファイルI/O要求発行をフックするI/Oフックモジュール部と、ファイルシステムの拡張機能に対応するI/O代行デーモン部とを備える。
I/Oフックモジュール部は、ファイルサーバアプリケーション部のファイルI/O要求発行をフックし、フックしたファイルI/O要求からアクセス対象となるファイルのパス名、ファイル内のアクセス対象領域を示すオフセット、レングス等の情報を取得してI/O代行デーモン部に渡す。
I/O代行デーモン部は、I/Oフックモジュール部から受け取った個々のファイルI/O要求に、構成情報に基づいてファイルサーバアプリケーション部およびアクセス対象ファイルに応じた制御情報を付加する。I/O代行デーモン部は、制御情報を付加したI/O要求をファイルシステムに対して発行し、I/Oの実行結果をI/Oフックモジュール部を介してファイルサーバアプリケーション部に渡す。
本発明のファイルサーバは、I/O特性を認識しないファイルサーバアプリケーション部と、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識しないファイルシステムとを備えたファイルサーバにおいて、I/O代行デーモン部、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識するファイルシステム、及び、前記ファイルサーバアプリケーション部及び前記ファイルシステムが管理するファイルの構成情報を有するメモリを備え、前記I/O代行デーモン部は、
前記ファイルサーバアプリケーション部からI/Oを受信し、前記受信したI/Oに、前記構成情報を参照して、前記受信したI/Oの制御情報を付加し、該制御情報を付加したI/Oを、前記I/O特性を認識するファイルシステムへ送信することを特徴とする。
また、本発明のファイルサーバは、前記ファイルサーバアプリケーション部は、I/Oフックモジュール部を備えており、前記I/Oフックモジュール部は、前記ファイルサーバアプリケーション部のファイルI/O発行要求をフックし、フックしたファイルI/O発行要求からアクセス対象となるファイルの情報を取得して前記I/O代行デーモン部に渡すことを特徴とする。
また、本発明のファイルサーバは、前記I/O代行デーモン部は、I/Oパターン解析部を備えており、前記I/Oパターン解析部を用いて前記ファイルI/O発行要求のI/Oパターンを解析して取得した動的な制御情報を、前記ファイルI/O発行要求に付加することを特徴とする。
本発明のデータ入出力方法は、I/O特性を認識しないファイルサーバアプリケーション部と、I/O代行デーモン部と、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識しないファイルシステムと、前記ファイルサーバアプリケーションからI/Oを受信する、I/O特性を認識するファイルシステムと、前記ファイルサーバアプリケーション及び前記ファイルシステムが管理するファイルの構成情報を有するメモリと、を備えるファイルサーバにおけるデータ入出力方法であって、前記ファイルサーバアプリケーション部から送信されるI/Oに、前記構成情報を参照して、該I/Oの制御情報を付加するステップ及び前記制御情報を付加したI/Oを、前記I/O特性を認識するファイルシステムに送信するステップを含むことを特徴とする。
また、本発明のデータ入出力方法は、更に、前記ファイルサーバアプリケーション部のファイルI/O発行要求をフックするステップと、フックしたファイルI/O発行要求からアクセス対象となるファイルの情報を取得して前記I/O代行デーモン部に渡すステップとを含むことを特徴とする。
また、本発明のデータ入出力方法は、更に、前記ファイルI/O発行要求のI/Oパターンを解析するステップと、解析して取得した動的な制御情報を、前記ファイルI/O発行要求に付加するステップとを含むことを特徴とする。
本発明のI/Oフックモジュールプログラムは、ファイルサーバアプリケーションソフトウェアのファイルI/O発行要求をフックする手順と、フックした前記ファイルI/O発行要求からアクセス対象となるファイルのパス名およびファイル内のアクセス対象領域を示す情報を取得する手順と、取得した情報をI/Oデーモンプログラムに渡す手順と、を計算機に実行させることを特徴とする。
本発明のI/O代行デーモンプログラムは、I/Oフックモジュールプログラムから受け取った個々のファイルI/O発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、前記制御情報を付加したファイルI/O発行要求をファイルシステムに対して発行する手順と、前記ファイルI/O発行要求の実行結果をI/Oフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、を計算機に実行させることを特徴とする。
また、本発明のI/O代行デーモンプログラムは、前記ファイルシステムと共有メモリ領域をI/Oバッファとして使用することにより、I/O特性を認識するファイルシステムに対して読み書きするデータの受け渡しを行う手順を、計算機に実行させることを特徴とする。
また、本発明のI/O代行デーモンプログラムは、前記ファイルサーバアプリケーションソフトウェアから受け取った個々のファイルI/O発行要求がデッドラインミスを起こした場合の再試行する回数であるリトライポリシー基づいてファイルI/O発行要求の手順を、計算機に実行させることを特徴とする。
また、本発明のI/O代行デーモンプログラムは、前記ファイルサーバアプリケーションソフトウェアのI/OフックモジュールプログラムからファイルI/O発行要求に関する情報を受け取る手順と、前記ファイルサーバアプリケーションソフトウェアからファイルI/O発行要求に構成情報に基づく制御情報を付加し、リアルタイムI/Oファイルシステムに対して非同期で発行する手順と、非同期で発行される読み込みおよび書き込みのファイルI/O発行要求を管理する手順と、管理される履歴情報を参照し、I/Oのパターンを解析する手順と、解析したパターンに基づく動的な制御情報を前記I/O発行要求に付加して前記リアルタイムI/Oファイルシステムに発行する手順と、を計算機に実行させることを特徴とする。
本発明によれば、個々のファイルサーバアプリケーション部には、ファイルI/O要求発行をフックするI/Oフックモジュール部に対応する改変を加えるのみで、実際のI/Oの発行をI/O代行デーモン部に代行させることができる。
I/O代行デーモン部は、I/Oフックモジュール部から受け取った個々のファイルI/O要求にデッドライン情報等の制御情報を付加してファイルシステムに発行することにより、リアルタイムI/Oファイルシステム等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
従って、本発明によれば、個々のファイルサーバアプリケーション部の改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する装置および方法を提供することができる。
図1は本発明の実施例1のネットワークファイル共有システムの構成例を示す。 図2は本発明の実施例1のファイルサーバのハードウェア構成例を示す。 図3は本発明の実施例1のI/Oフックモジュール部の機能モジュール構成を示す。 図4は本発明の実施例1のI/O代行デーモン部の機能モジュール構成を示す。 図5は本発明の実施例1の構成情報の詳細を示す。 図6は本発明の実施例1のI/Oフックモジュール部とI/O代行デーモン部との間のI/O代行通信プロトコルを示す。 図7は本発明の実施例1のI/Oフックモジュール部の処理を示すフローチャートである。 図8は本発明の実施例1のI/Oフック処理の詳細を示すフローチャートである。 図9は本発明の実施例1のI/O代行デーモン部の処理を示すフローチャートである。 図10は本発明の実施例1のI/O代行デーモン部のファイルサーバアプリケーション部との連携を開始する処理の詳細を示すフローチャートである。 図11は本発明の実施例1のI/O代行デーモン部のファイルサーバアプリケーション部との連携を終了する処理の詳細を示すフローチャートである。 図12は本発明の実施例1のI/Oフックモジュール部のファイルオープン処理の詳細を示すフローチャートである。 図13は本発明の実施例1のI/O代行デーモン部のファイルオープン代行実行処理の詳細を示すフローチャートである。 図14は本発明の実施例1のI/Oフックモジュール部のファイルクローズ処理の詳細を示すフローチャートである。 図15は本発明の実施例1のI/O代行デーモン部のファイルクローズ代行実行処理の詳細を示すフローチャートである。 図16は本発明の実施例1のI/Oフックモジュール部のファイルリード処理の詳細を示すフローチャートである。 図17は本発明の実施例1のI/O代行デーモン部のファイルリード代行実行処理の詳細を示すフローチャートである。 図18は本発明の実施例1のI/Oフックモジュール部のファイルライト処理の詳細を示すフローチャートである。 図19は本発明の実施例1のI/O代行デーモン部のファイルライト代行実行処理の詳細を示すフローチャートである。 図20は本発明の実施例1のI/Oフックモジュール部のファイルサイズ変更処理の詳細を示すフローチャートである。 図21は本発明の実施例1のI/O代行デーモン部のファイルサイズ変更代行実行処理の詳細を示すフローチャートである。 図22は本発明の実施例1のI/Oフックモジュール部のファイル削除処理の詳細を示すフローチャートである。 図23は本発明の実施例1のI/O代行デーモン部のファイル削除代行実行処理の詳細を示すフローチャートである。 図24は本発明の実施例2のネットワークファイル共有システムの構成例を示す。 図25は本発明の実施例2のI/O代行デーモン部の機能モジュール構成を示す。
以下、本発明を実施するための形態について、図面を用いて説明する。なお、各図面で同様の構成には同じ符号を付しその説明を省略する。
図1は、本発明の第1の実施の形態に係るネットワークファイル共有システムの構成例を示す。本実施例のシステムは、ファイルサーバ100、クライアント端末110、ネットワーク120、および、ストレージ装置130からなる。本システムでは、ファイルサーバ100が、クライアント端末110に対して、ファイルサーバ100に接続されたストレージ装置130に格納される文書および画像等のデータファイルを、ネットワーク120を経由してアクセスする、ネットワークファイル共有サービスを提供する。
ファイルサーバ100は、例えば、UNIX(登録商標)等のOSが動作するWSであり、ファイルサーバアプリケーション部140、VFS(Virtual File System)150、リアルタイムI/Oファイルシステム160、および、I/O代行デーモン部400からなる。ファイルサーバアプリケーション部140は、ネットワークファイル共有サービスを提供するファイルサーバアプリケーションソフトウェアであり、例えば、SMBD(Samba Daemon)やNFSD(Network File System Daemon)等である。
ファイルサーバアプリケーション部140は、ファイルサーバ100上に同一あるいは異なる種類のものが複数存在してもよい。ファイルサーバアプリケーション部140のVFS150に対するI/O要求は、I/Oフックモジュール部300によってフックされる。
VFS150は、ファイルサーバ100のOSが提供するファイルシステムインタフェースモジュールであり、例えば、open(), close(), read(), write()等のシステムコールインタフェースを提供する、I/O特性を認識しないファイルシステムである。
リアルタイムI/Oファイルシステム160は、リアルタイムI/O制御機能を備えたファイルシステムモジュールであり、例えば、個々のI/O要求にデッドライン情報等の制御情報を付加してI/O制御の精度を高めることにより、I/O特性を認識するファイルシステムである。
I/O代行デーモン部400は、I/Oフックモジュール部300を介してファイルサーバ140のI/O要求を受け取り、ファイルサーバ140に代行してリアルタイムI/Oファイルシステム160にI/O要求を発行する。I/O代行デーモン部400は、構成情報500に基づき、個々のI/Oにデッドライン情報等の制御情報を付加する。
クライアント端末110は、例えば、文書編集や画像閲覧機能を備えるPCや携帯端末等である。クライアント端末110は、ネットワーク120を介してファイルサーバ140上のデータファイルにアクセスする。クライアント端末110は、同一あるいは異なる種類のものが複数存在してもよい。
ネットワーク120は、例えば、LANおよびWAN等のIP(Internet Protocol)ネットワークである。ネットワーク120は、ファイルサーバ100とクライアント端末110を接続する。
ストレージ装置130は、ファイルサーバ100の補助記憶装置であり、例えば、HDD(Hard Disk Drive)やSSD(Solid State
Drive)、および、HDDやSSDを複数備えるRAID(Redundant Arrays of Inexpensive Independent
Disks)装置等である。ストレージ装置130には、文書や画像データ等のデータファイルが格納される。
図2は本実施例のファイルサーバ100のハードウェア構成例を示す。ファイルサーバ100は、CPU(Central Processing Unit)200、メモリ210、NIC(Network
Interface Card)220、HBA(Host Bus Adapter)230、および、プログラム格納領域240からなる。なお、本発明の説明に直接関係しないハードウェア構成要素、例えば、キーボード、マウス、電源装置等については記載および説明を省略する。
CPU200は、プログラム格納領域240に格納されるプログラムをメモリ210上にロードして実行することにより、ファイルサーバ100全体を制御する。CPU200は、ファイルサーバ100上に複数存在してもよく、シングルコアプロセッサであってもマルチコアプロセッサであってもよい。
メモリ210は、計算機100の主記憶装置であり、例えば、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)等を用いて構成される。メモリ210には、CPU200が実行しているOSおよびアプリケーションソフトウェアのプログラムコードおよびデータが格納される。
NIC220は、ファイルサーバ100とネットワーク120を接続するI/Oインタフェースデバイスであり、例えば、イーサネット(登録商標)、ミリネット、インフィニバンド等の接続機能を提供する。
HBA230、ファイルサーバ100とストレージ装置130を接続するI/Oインタフェースデバイスであり、例えば、SCSI(Small Computer System Interface)、SAS(Serial Attached SCSI)、FC(Fibre Channel)等の接続機能を提供する。
プログラム格納領域240は、不揮発性の記憶領域であり、例えば、ROM(Read Only Memory)やフラッシュメモリ等を用いて構成される。プログラム格納領域240には、OSプログラム241、ファイルサーバプログラム242、I/Oフックモジュールプログラム243、および、I/O代行デーモンプログラム244が格納される。なお、これらのプログラムの一部あるいは全部が、ストレージ装置130上に格納されていてもよい。この場合、CPU200は、HBA230を介してストレージ装置130からそれぞれのプログラムをメモリ210にロードして実行する。
図3は、I/Oフックモジュール部300の機能モジュール構成を示す。I/Oフックモジュール部300は、I/Oフック部310、および、プロセス間通信部320からなる。I/Oフックモジュール部300は、例えば、Sambaの場合、ソースファイルのファイルI/O発行部分を改変してもよく、スタッカブルVFSモジュールとして実装してもよい。また、環境変数LD_PRELOAD等の機構を利用してファイルサーバアプリケーション部140に依存しないダイナミックリンクライブラリとして実装してもよい。
I/Oフック部310は、ファイルサーバアプリケーション部140がVFS150に対して発行するファイルI/O要求をフックする。I/Oフック部310は、フックしたファイルI/O要求のうち、open(), close(), read(), write(), unlink(), ftruncate()の各ファイルI/O要求をI/O代行デーモン部400に代行させる。I/Oフック部310は、その他のファイルI/O要求、例えば、stat()等を、VFS150に対して発行することでファイルサーバアプリケーション部140のプロセスコンテキストで実行する。
プロセス間通信部320は、ファイルサーバアプリケーション部140とI/O代行デーモン部400との間のプロセス間通信機能を提供する。プロセス間通信部320は、I/Oフック部310でフックしたファイルI/O要求に関する情報をI/O代行デーモン部400へ送り、実行結果をI/O代行デーモン部400より受信する。プロセス通信部320は、プロセス間通信機能を、例えば、UNIX(登録商標)ドメインソケットを用いて実装してもよく、POSIX(Portable Operating System Interface)メッセージキューを用いて実装してもよい。
図4は、I/O代行デーモン部400の機能モジュール構成を示す。I/O代行デーモン部400は、プロセス間通信部410、セッション管理部420、ファイル管理部430、共有メモリ管理部440、非同期I/O管理部450、および、構成情報500からなる。I/O代行デーモン部400は、例えば、ファイルサーバアプリケーション部140と完全独立したプロセスとして実装してもよく、ファイルサーバアプリケーション部140から実行中にfork()されるプロセスとして実装してもよい。
プロセス間通信部410は、I/Oフックモジュール部300のプロセス間通信部320と同様の機構により、I/O代行デーモン部400とファイルサーバアプリケーション部140との間のプロセス間通信機能を提供する。プロセス間通信部410は、ファイルサーバアプリケーション部140のI/Oフックモジュール部300よりファイルI/O要求に関する情報を受け取る。
セッション管理部420は、I/O代行デーモン部400とファイルサーバアプリケーション部140との通信をセッションとして扱い、ファイルサーバアプリケーション部140の代理で開いているファイル等を管理する。セッション管理部420は、ファイルサーバアプリケーション部140のプロセスの終了を検出した場合に、代理で開いているファイルを閉じる等の後片付け処理を行う。
ファイル管理部430は、I/O代行デーモン部400が開いているファイル、および、当該ファイルのデータ領域の一部であるファイルブロックのうち、共有メモリ管理部440においてキャッシュしているファイルブロックを管理する。
共有メモリ管理部440は、I/O代行デーモン部400が、ファイルサーバ100のメモリ210上に確保した共有メモリ領域を管理する。I/O代行デーモン部400は、メモリ210上に確保した共有メモリ領域を、ファイルサーバアプリケーション部140と共有する。I/O代行デーモン部400とファイルサーバアプリケーション部140は、共有メモリ領域をI/Oバッファとして使用することにより、リアルタイムI/Oファイルシステム160に対して読み書きするデータの受け渡しを行う。
非同期I/O管理部450は、I/O代行デーモン部400が、リアルタイムI/Oファイルシステム160に対して発行する非同期I/O要求を管理する。非同期I/O管理部450は、ファイルサーバアプリケーション部140から受け取ったファイルI/O要求に構成情報500に基づく制御情報を付加し、リアルタイムI/Oファイルシステム160に対して非同期で発行する。非同期I/O管理部450は、リアルタイムI/Oファイルシステム160からファイルI/O実行結果を非同期で受け取り、プロセス間通信部410を介してファイルサーバアプリケーション部140に通知する。
図5は、構成情報500の詳細を示す。構成情報500は、アプリケーション構成情報510、および、ファイル構成情報520からなる。構成情報500は、コンフィグファイルとしてストレージ装置130に格納されているものをI/O代行デーモン部400の起動時に読み込んでもよく、I/O代行デーモンプログラム244の一部として組み込まれていてもよい。
アプリケーション構成情報510は、アプリケーション名511、優先度512、リトライポリシー513を格納するテーブルである。アプリケーション名511は、I/O代行デーモン部400と連携するファイルサーバアプリケーション部140のプロセス名やバイナリファイル名である。
優先度512は当該ファイルサーバアプリケーション部140のI/O実行優先度であり、例えば、優先度の値の高いファイルサーバアプリケーション部140から受け取ったファイルI/O要求は、優先度の低いファイルサーバアプリケーション部140から受け取ったファイルI/O要求に比べて、I/O代行デーモン部400によって、優先的に処理される。
リトライポリシー513は、当該ファイルサーバアプリケーション部140から受け取った個々のファイルI/O要求がデッドラインミスを起こした場合に、ファイルI/Oデーモン部400が再試行する回数等を格納する。
ファイル構成情報520は、ファイルパス521、ビットレート522、デッドライン523の値を格納するテーブルである。ファイルパス521は、I/O代行デーモン部400がアクセス対象とするファイルのパスである。ビットレート522は、当該ファイルの読み込みおよび書き込みビットレートである。デッドライン523は、当該ファイルに対する個々のファイルI/O要求に付加するデッドライン情報である。なお、ファイルパス521は、例えば、絶対パスによって単一のファイルを一意に識別するものであってもよく、正規表現を含むパス名によって複数のファイルを識別すものであってもよい。
図6は、I/Oフックモジュール部300とI/O代行デーモン部400との間のI/O代行通信プロトコル600を示す。I/O代行通信プロトコル600には、I/Oフックモジュール部300からI/O代行デーモン部400へ伝達されるI/O代行要求と、その応答としてI/O代行デーモン部400からI/Oフックモジュール部300へ伝達されるI/O代行応答がある。
I/O代行要求には、CONNECT要求610、DISCONNECT要求611、OPEN要求612、CLOSE要求613、READ0要求614、READ1要求615、WRITE0要求616、WRITE1要求617、FTRUNCATE要求618、および、UNLINK要求619がある。
I/O代行応答には、CONNECT応答620、DISCONNECT応答621、OPEN応答622、CLOSE応答623、READ0応答624、READ1応答625、WRITE0応答626、WRITE1応答627、FTRUNCATE応答628、および、UNLINK応答629がある。
CONNECT要求610は、I/Oフックモジュール部300がI/O代行デーモン部400と連携を開始する場合に使用される。CONNECT要求610には、I/Oフックモジュール300が組み込まれているファイルサーバアプリケーション部140のプロセス識別子、例えば、プロセスID(PID)と、I/Oフックモジュール部300が応答の受信に使用する情報、例えば、メッセージキュー名(MQ NAME)が含まれる。CONNECT要求610を受け取ったI/O代行デーモン部400は、送信元のファイルサーバアプリケーション部140との通信を、セッション管理部420においてセッションとして管理する。
CONNECT応答620は、CONNECT要求610に対する応答として使用される。CONNECT応答620には、CONNECT要求610の実行結果(RESULT)と、I/O代行デーモン部400が共有メモリ管理部440において管理している共有メモリ領域の情報、例えば、共有メモリ名(SHM NAME)と、共有メモリ領域サイズ(SHM SIZE)が含まれる。CONNECT応答620を受け取ったI/Oフックモジュール部300は、共有メモリ領域をファイルサーバアプリケーション部140のプロセスメモリ空間にマップする。
DISCONNECT要求611は、I/Oフックモジュール部300がI/O代行デーモン部400との連携を終了する場合に使用される。DISCONNECT要求611には、プロセス識別子が含まれる。DISCONNECT要求610を受け取ったI/O代行デーモン部400は、対応するファイルサーバアプリケーション部140のセッションの後片付け処理を行う。
DISCONNECT応答621は、DISCONNECT要求611に対する応答として使用される。DISCONNECT応答621には、DISCONNECT要求611の実行結果が含まれる。
OPEN要求612は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイルオープン処理をフックした場合に使用される。OPEN要求612には、プロセス識別子と、ファイルサーバアプリケーション部140内でファイルを一意に示すファイル識別子、例えば、ファイルID(FID)と、読み出しのみ、あるいは、読み書きのオープンモードを示すフラグ(FLAGS)と、ファイルのパス名(PATH)が含まれる。OPEN要求612を受け取ったI/O代行デーモン部400は、当該ファイルを指定されたモードでオープンし、ファイル管理部430において管理する。
OPEN応答622は、OPEN要求612に対する応答として使用される。OPEN応答622には、OPEN要求612の実行結果と、ファイル識別子が含まれる。
CLOSE要求613は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイルクローズ処理をフックした場合に使用される。CLOSE要求613には、ファイルサーバアプリケーション部140の識別子と、ファイル識別子が含まれる。CLOSE要求613を受け取ったI/O代行デーモン部400は、ファイル管理部430において管理されている当該ファイルをクローズする。
CLOSE応答623は、CLOSE要求613に対する応答して使用される。CLOSE応答623には、CLOSE要求613の実行結果と、ファイル識別子が含まれる。
READ0要求614は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイルリード処理をフックした場合に使用される。
READ0要求614には、プロセス識別子と、読み込み対象ファイルを示すファイル識別子と、ファイルサーバアプリケーション部140内でI/O代行デーモン部400に代行させるファイルI/O要求を一意に識別するI/O識別子(IOID)と、対象ファイル内の読み込み位置を示すオフセット(OFFSET)とサイズ(SIZE)が含まれる。
READ0要求614を受け取ったI/O代行デーモン部400は、共有メモリ管理部440においてI/Oバッファメモリとなる共有メモリ領域を割り当て、非同期I/O管理部450において、構成情報500に基づく制御情報を付加したファイルI/O要求をリアルタイムI/Oファイルシステム160に対して発行し、割り当てたI/Oバッファメモリに当該ファイルデータを読み込む。
READ0応答624は、READ0要求614に対する応答として使用される。READ0応答624には、READ0要求614の実行結果と、ファイル識別子と、I/O識別子と、読み込んだデータが格納されているI/Oバッファメモリを示す共有メモリ領域内のオフセット(SHM OFFSET)とサイズが含まれる。
READ1要求615は、I/Oフックモジュール部300が、READ0応答624を受け取り、例えば、クライアント端末110に送信し終わった等、共有メモリ領域に読み込まれたデータの使用を完了した場合に使用される。READ1要求615には、プロセス識別子と、ファイル識別子と、I/O識別子が含まれる。READ1要求615を受け取ったI/O代行デーモン部400は、共有メモリ部450において当該ファイルI/O要求のために割り当てたI/Oバッファメモリを開放する。
READ1応答625は、READ1要求615に対する応答として使用される。READ1応答625には、READ1要求625の実行結果と、ファイル識別子と、I/O識別子が含まれる。
WRITE0要求616は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイルライト処理をフックした場合に使用される。WRITE0要求616には、プロセス識別子と、ファイル識別子と、I/O識別子と、対象ファイル内の書き込み位置を示すオフセットとサイズが含まれる。WRITE0要求616を受け取ったI/O代行デーモン部400は、共有メモリ管理部440においてI/Oバッファメモリとなる共有メモリ領域を割り当てる。
WRITE0応答626は、WRITE0要求616に対する応答として使用される。WRITE0応答626には、WRITE0要求616の実行結果と、ファイル識別子と、I/O識別子と、I/O代行デーモン部400が割り当てたI/Oバッファメモリを示す共有メモリ領域内のオフセットとサイズが含まれる。
WRITE1要求617は、I/Oフックモジュール部300が、WRITE0応答626を受け取り、I/Oバッファとして割り当てられた共有メモリ領域へ書き込むべきデータの転送を完了した場合に使用される。WRITE1要求617には、プロセス識別子と、ファイル識別子と、I/O識別子が含まれる。WRITE1要求617を受け取ったI/O代行デーモン部400は、非同期I/O管理部450において構成情報500に基づく制御情報を付加したファイルI/O要求をリアルタイムI/Oファイルシステム160に対して発行し、I/Oバッファメモリに格納されたデータを当該ファイルに書き込む。
WRITE1応答627は、WRITE1要求617の応答として使用される。WRITE1応答627には、WRITE1要求617の実行結果と、ファイル識別子と、I/O識別子と、実際に書き込まれたサイズが含まれる。
FTRUNCATE要求618は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイルサイズ変更処理をフックした場合に使用される。FTRUNCATE要求618には、プロセス識別子と、ファイル識別子と、I/O識別子と、当該ファイルの変更後のファイルサイズが含まれる。
FTRUNCATE要求618を受け取ったI/O代行デーモン部400は、ファイル管理部430において管理されている当該ファイルのサイズを変更し、非同期I/O管理部450において、ファイルサイズ変更要求をリアルタイムI/Oファイルシステム160に対して発行する。ファイルサイズが縮小される場合、I/O代行デーモン部400は、共有メモリ管理部440において共有メモリ領域にキャッシュされている当該ファイルのデータブロックのうち、ファイルサイズの変更により不要となる部分を無効化する。
FTRUNCATE応答628は、FTRUNCATE要求618の応答として使用される。FTRUNCATE応答628には、FTRUNCATE応答628の実行結果と、フィル識別子と、I/O識別子が含まれる。
UNLINK要求619は、I/Oフックモジュール部300が、ファイルサーバアプリケーション部140のファイル削除処理をフックした場合に使用される。UNLINK要求619には、プロセス識別子と、ファイル識別子と、削除対象のファイルのパス名が含まれる。UNLINK要求619を受け取ったI/O代行デーモン部400は、ファイル管理部430において管理されている当該ファイルの情報を削除し、共有メモリ管理部440において共有メモリ領域にキャッシュされている当該ファイルのデータブロックを無効化する。
UNLINK応答629は、UNLINK要求619の応答として使用される。UNLINK応答629には、UNLINK要求619の実行結果と、ファイル識別子が含まれる。
以下、フローチャートを用いてI/Oフックモジュール部300、および、I/O代行デーモン部400の処理を説明する。
図7は、I/Oフックモジュール部300の処理を示すフローチャートである。I/Oフックモジュール部300は、ファイルサーバアプリケーション部140の開始時に合わせて開始される。I/Oフックモジュール部300は、開始時にFIDテーブル等の初期化処理を行う(S700)。
次に、連携するI/O代行デーモン部400に対して、自身のファイルサーバアプリケーション部140のプロセスID(PID)CONNECT要求610を送信し(S710)、その応答としてCONNECT応答620を受信する(S720)。I/Oフックモジュール部300は、CONNECT応答620に含まれる共有メモリ領域の情報をもとに、当該共有メモリを自身のプロセス空間にマップする(S730)。
I/Oフックモジュール部300は、ファイルサーバアプリケーション部140が終了するまで、I/Oフック処理を繰り返す(S740)。
I/Oフックモジュール部300は、ファイルサーバアプリケーション部140が終了する際に、I/O代行処理の終了を通知するためにI/O代行デーモン部400に対してDISCONNECT要求611を送信する(S750)。最後に、I/Oフックモジュール部300は、DISCONNECT応答S621を受信し(S760)、自身の処理を終了する。
図8は、I/Oフック処理(S710)の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルサーバアプリケーション部140のファイルI/O要求をフックした際に、フックしたファイルI/O要求がファイルI/Oデーモン400部に代行させる対象のI/O要求、例えば、ファイルオープンopen()、ファイルクローズclose()、ファイルリードread()、ファイルライトwrite()、ファイルサイズ変更ftruncate()、および、ファイル削除unlink()であるかを判定する(S800)。
代行対象I/O要求である場合(S800においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400にI/Oを代行させる処理を行い(S810)、結果をファイルサーバアプリケーション部140に返す。
代行対象I/O要求でない場合(S800においてNO)、I/Oフックモジュール部300は、VFS関数を実行することにより自身でVFS150に対してファイルI/O要求を発行し(S820)、結果をファイルサーバアプリケーション部140に返す。
図9は、I/O代行デーモン部400の処理を示すフローチャートである。I/O代行デーモン部400は、例えば、デーモンプロセスとして起動され、最初に、共有メモリ管理部440において共有メモリ領域を確保する等の初期化処理を行う(S900)。
初期化処理を完了すると、I/O代行デーモン部400は、自身のプロセスを終了するまで、I/Oフックモジュール部300からのI/O代行要求の処理を行うI/O代行実行処理を繰り返す(S910)。
図10は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルサーバアプリケーション部140との連携を開始する処理の詳細を示すフローチャートである。
I/O代行デーモン部400は、CONNECT要求610を受信した場合(S1000)、要求に含まれるファイルサーバアプリケーション部140のプロセス識別子をセッション管理部420においてセッション情報として登録する(S1010)。次に、I/O代行デーモン400は、I/Oフックモジュール部300に対して、実行結果および共有メモリ領域の情報等を含むCONNECT応答620を送信し(S1020)、I/O代行実行処理を終了する。
図11は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルサーバアプリケーション部140との連携を終了する処理の詳細を示すフローチャートである。
I/O代行デーモン部400は、DISCONNECT要求611を受信した場合(S1100)、要求に含まれるプロセス識別子を含むセッション情報をセッション管理部420において削除する(S1110)。次に、I/O代行デーモン部400は、I/Oフックモジュール300に対して、実行結果を含むDISCONNECT応答621を送信し(S1120)、I/O代行実行処理を終了する。
図12は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイルオープン処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルオープンI/O要求をフックした場合、最初に、VFS150が提供するVFS関数を用いて対象ファイルを自身でオープンし、FIDを取得する(S1200)。ファイルオープンに失敗した場合(S1210においてNO)、I/Oフックモジュール部300は、失敗をファイルサーバアプリケーション部140に返す。
ファイルオープンに成功した場合(S1210においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、ファイルサーバアプリケーション部140のPID、オープンしたファイルのFID、対象ファイルのパス等を含むOPEN要求612を送信する(S1220)。
次に、I/Oフックモジュール部300は、I/O代行モジュール部400からOPEN応答622を受信し(S1230)、応答に含まれる実行結果が成功であったかを判定する(S1240)。実行結果が失敗であった場合(S1240においてNO)、自身のファイルオープン処理には成功しているため、成功をファイルサーバアプリケーション部140に返す。
実行結果が成功であった場合(S1240においてYES)、FIDをファイルI/O要求代行対象のファイルを示す情報としてI/Oフックモジュール部300内に登録し(S1250)、成功をファイルサーバアプリケーション部140に返す。
図13は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルオープン代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、OPEN要求612を受信した場合(S1300)、要求に含まれるパス名等の情報を用いて、対象ファイルをオープンする(S1310)。ファイルオープンに失敗した場合(S1320においてNO)、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、実行結果に失敗を含むOPEN応答622を送信(S1340)し、I/O代行実行処理を終了する。
ファイルオープンに成功した場合(S1320においてYES)、I/O代行デーモン部400は、ファイル管理部430において、要求に含まれるFID、自身がファイルオープン処理により取得したFID等の情報をファイル管理情報として登録する(S1330)。次に、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、実行結果に成功を含むOPEN応答622を送信(S1340)し、I/O代行実行処理を終了する。
図14は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイルクローズ処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルクローズI/O要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する(S1400)。代行対象ファイルであるかの判定は、対象FIDがI/Oフックモジュール部300内に登録されているかどうかを判定することによって行う。
代行対象ファイルでない場合(S1400においてNO)、I/Oフックモジュール部300は、自身でオープンしたファイルをクローズし(S1440)、結果をファイルサーバアプリケーション部140に返す。
代行対象ファイルである場合(S1400においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、PIDおよびFIDを含むCLOSE要求613を送信する(S1410)。次に、I/Oフックモジュール部300は、I/O代行モジュール400からCLOSE応答623を受信し(S1420)、結果をファイルサーバアプリケーション部140に返す。
図15は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルクローズ代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、CLOSE要求613を受信した場合(S1500)、要求に含まれるPID、FIDに対応するファイルをクローズする(S1510)。
次に、I/O代行デーモン部400は、ファイル管理部430において、登録されている対応するファイル情報を削除し(S1520)する。次に、I/O代行デーモン部400は、CLOSE応答623を送信(S1530)し、I/O代行実行処理を終了する。
図16は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイルリード処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルリードI/O要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する(S1600)。
代行対象ファイルでない場合(S1600においてNO)、I/Oフックモジュール部300は、VFS150が提供するVFS関数を実行することによりファイルリード処理を実行し(S1610)、結果をファイルサーバアプリケーション部140に返す。
代行対象ファイルである場合(S1600においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、PID、FID、IOID、そして、ファイルの読み出し範囲を示すOFFSETおよびSIZEを含むREAD0要求614を送信する(S1620)。ここで、IOIDは、ファイルサーバアプリケーション部140プロセス内で単調増加する整数値を用いればよい。
次に、I/Oフックモジュール部300は、I/O代行モジュール部400からREAD0応答624を受信し(S1630)、応答に含まれるSHM OFFSETおよびSIZEで示される共有メモリ領域に格納されたファイルデータを読み出す(S1640)。
ここで、例えば、ファイルデータのストレージ装置130からの読み込みおよびネットワーク120への送信を一度に行うsendfile()をフック対象にしている場合は、共有メモリ領域に格納されたファイルデータを直接ネットワーク120へ送信すればよい。通常のread()をフックした場合は、共有メモリ領域に格納されたファイルデータをファイルサーバアプリケーション140が読み込みバッファに指定したメモリ領域にコピーすればよい。
次に、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、READ0要求614送信時と同一のIOID含むREAD1要求615を送信し(S1650)、共有メモリ領域に格納されたファイルデータの使用を完了したことを通知する。
次に、I/Oフックモジュール部300は、I/O代行デーモン部400からREAD1応答625を受信し(S1660)、結果をファイルサーバアプリケーション部140に返す。
図17は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルリード代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、READ0要求614を受信した場合(S1700)、共有メモリ管理部440において要求に含まれるサイズ分の共有メモリ領域をI/Oバッファメモリとして割り当てる(S1710)。
次に、非同期I/O管理部450において、構成情報500に基づく制御情報を付加したファイルI/O要求をリアルタイムI/Oファイルシステム160に対して発行し、割り当てた共有メモリ領域に当該ファイルデータを読み込む(S1720)。次に、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、ファイルデータを読み込んだ共有メモリ領域の情報を含むREAD0応答624を送信する(S1730)。
次に、I/O代行デーモン部400は、READ1要求615を受信し(S1740)、共有メモリ管理部440においてI/Oバッファメモリとして割り当てた共有メモリ領域を解放する(S1750)。次に、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、READ1応答625を送信し(S1760)、I/O代行実行処理を終了する。
図18は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイルライト処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルライトI/O要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する(S1800)。
代行対象ファイルでない場合(S1800においてNO)、I/Oフックモジュール部300は、VFS150が提供するVFS関数を実行することによりファイルライト処理を実行し(S1810)、結果をファイルサーバアプリケーション部140に返す。
代行対象ファイルである場合(S1800においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、PID、FID、IOID、そして、ファイルの書き込み範囲を示すOFFSETおよびSIZEを含むWRITE0要求616を送信する(S1820)。
次に、I/Oフックモジュール部300は、I/O代行デーモン部400からWRITE0応答626を受信し(S1830)、応答に含まれるSHM OFFSETおよびSIZEで示される共有メモリ領域に対して、対象ファイルに書き込むデータを書き込む(S1840)。次に、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、WRITE0要求616送信時と同一のIOID含むWRITE1要求617を送信し(S1850)、共有メモリ領域へのファイルデータの書き込みが完了したことを通知する。
次に、I/Oフックモジュール部300は、I/O代行デーモン部400からWRITE1応答627を受信し(S1860)、結果をファイルサーバアプリケーション部140に返す。
図19は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルライト代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、WRITE0要求616を受信した場合(S1900)、共有メモリ管理部440において要求に含まれるサイズ分の共有メモリ領域をI/Oバッファメモリとして割り当てる(S1910)。次に、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、割り当てた共有メモリ領域の情報を含むWRITE0応答626を送信する(S1920)。
次に、I/O代行デーモン部400は、WRITE1要求617を受信し(S1930)、非同期I/O管理部450において、構成情報500に基づく制御情報を付加したファイルI/O要求をリアルタイムI/Oファイルシステム160に対して発行し、共有メモリ領域に格納された当該ファイルデータを書き込む(S1940)。次に、I/O代行デーモン部400は、共有メモリ管理部440において割り当てた共有メモリ領域を解放する(S1950)。
次に、I/O代行デーモン部400は、I/Oフックモジュール300に対して、WRITE1応答627を送信し(S1960)、I/O代行実行処理を終了する。
図20は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイルサイズ変更処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイルサイズ変更I/O要求をフックした場合、最初に、対象ファイルが代行対象ファイルであるかを判定する(S2000)。
代行対象ファイルでない場合(S2000においてNO)、I/Oフックモジュール部300は、VFS150が提供するVFS関数を実行することによりファイルサイズ変更処理を実行し(S2010)、結果をファイルサーバアプリケーション部140に返す。
代行対象ファイルである場合(S2000においてYES)、I/Oフックモジュール部300は、I/O代行デーモン部400に対して、PID、FID、IOID、そして、変更後のファイルサイズを示すSIZEを含むFTRUNCATE要求618を送信する(S2020)。次に、I/Oフックモジュール部300は、I/O代行デーモン部400からFTRUNCATE応答628を受信し(S2030)、結果をファイルサーバアプリケーション部140に返す。
図21は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイルサイズ変更代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、FTRUNCATE要求618を受信した場合(S2100)、ファイル管理部430において管理されている当該ファイルのサイズを変更し、非同期I/O管理部450において、ファイルサイズ変更要求をリアルタイムI/Oファイルシステム160に対して発行する(S2110)。次に、I/O代行デーモン部400は、ファイルサイズ変更処理がファイルサイズ縮小であるかを判定する(S2120)。
ファイルサイズ縮小である場合(S2120においてYES)、I/O代行デーモン部400は、共有メモリ管理部440において共有メモリ領域にキャッシュされている当該ファイルのデータブロックのうち、ファイルサイズの変更により不要となる部分を無効化する(S2130)。次に、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、FTRUNCATE応答628を送信し(S2140)、I/O代行実行処理を終了する。
ファイルサイズ縮小でない場合(S2120においてNO)、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、直ちにFTRUNCATE応答628を送信し(S2140)、I/O代行実行処理を終了する。
図22は、I/Oフックモジュール部300のI/O代行処理(S810)のひとつである、ファイル削除処理の詳細を示すフローチャートである。I/Oフックモジュール部300は、ファイル削除I/O要求をフックした場合、I/O代行デーモン部400に対して、PID、FID、そして、削除対象のファイルを示すPATHを含むUNLINK要求619を送信する(S2200)。次に、I/Oフックモジュール部300は、I/O代行デーモン部400からUNLINK応答629を受信し(S2210)、VFS関数を用いて対象ファイルを削除して(S2220)、結果をファイルサーバアプリケーション部140に返す。
図23は、I/O代行デーモン部400のI/O代行実行処理(S910)のひとつである、ファイル削除代行実行処理の詳細を示すフローチャートである。I/O代行デーモン部400は、UNLINK要求619を受信した場合(S2300)、対象ファイルがファイル管理部430において管理されている代行対象ファイルであるかを判定する(S2310)。
代行対象ファイルである場合(S2310においてYES)、I/O代行デーモン部400は、ファイル管理部430において管理されている当該ファイルの情報を削除し、共有メモリ管理部440において共有メモリ領域にキャッシュされている当該ファイルのデータブロックを無効化する(S2320)。次に、UNLINK応答629を送信し(S2330)、I/O代行実行処理を終了する。
代行対象ファイルでない場合(S2310においてNO)、I/O代行デーモン部400は、I/Oフックモジュール部300に対して、直ちにUNLINK応答629を送信し(S2330)、I/O代行実行処理を終了する。
以上に説明したように、本発明の第1の実施の形態に係るネットワークファイル共有システムでは、個々のファイルサーバアプリケーション部140には、ファイルI/O要求発行をフックするI/Oフックモジュール部300に対応する改変を加えるのみで、実際のファイルI/Oの発行をI/O代行デーモン部400に代行させることができる。I/O代行デーモン部400は、I/Oフックモジュール部300から受け取った個々のファイルI/O要求にリトライポリシー513およびデッドライン523等の制御情報を付加してリアルタイムI/Oファイルシステム160に発行することにより、リアルタイムI/Oファイルシステム160等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
従って、本発明によれば、個々のファイルサーバアプリケーションソフトウェアの改変工数を従来技術と比較して少なく抑えて新たなファイルシステムの拡張機能に対応する方式および装置を提供することができる。
また、本発明は、Sambaに限らず、例えば、HTTPDなど他のI/O特性を認識しないアプリケーションに適用して実施することが出来る。
図24は、本発明の第2の実施の形態に係るネットワークファイル共有システムの構成例を示す。本実施例のI/O代行デーモン部2500は、I/Oパターン解析部2510を備える。I/O代行デーモン部2500は、I/Oパターン解析部2510において、代行するファイルI/O要求のI/Oパターンを解析し、ファイルブロックの先読み等の処理を行う。
図25は、I/O代行デーモン部2500の機能モジュール構成を示す。本発明の実施例1のI/O代行デーモン部400の構成に加えて、I/Oパターン解析部2510を備える。I/Oパターン解析部2510は、I/O履歴管理部2512、I/Oパターン検出部2511、および、先読みI/O管理部2513からなる。
I/O履歴管理部2511は、非同期I/O管理部450において発行される読み込みおよび書き込みのファイルI/O要求の履歴情報を管理する。I/O履歴管理部2511が管理する履歴情報には、例えば、読み書き種別、要求元PID、対象FID、対象領域オフセットおよびサイズ等がある。
I/Oパターン検出部2512は、I/O履歴管理部2511において管理される履歴情報を参照し、非同期I/O管理部450において発行されるI/Oのパターンを検出する。I/Oパターン検出部2512が検出するI/Oパターンは、例えば、ファイルI/O要求のアクセス対象となるファイルブロックのオフセットが一定サイズ間隔で増加あるいは減少している、および、ファイルブロックのアクセス時間間隔等である。
従って、本発明の第2の実施の形態に係るネットワークファイル共有システムでは、本発明の第1の実施の形態では対応できない、動的に変化する制御情報(I/O特性)についても付加してリアルタイムI/Oファイルシステム160に発行することにより、リアルタイムI/Oファイルシステム160等の新たなファイルシステムが提供する拡張機能の効果を得ることができる。
100 ファイルサーバ
110 クライアント端末
120 ネットワーク
130 ストレージ装置
140 ファイルサーバアプリケーション部
150 VFS
160 リアルタイムI/Oファイルシステム
200 CPU
210 メモリ
220 NIC
230 HBA
240 プログラム格納領域
241 OSプログラム
242 ファイルサーバプログラム
243 I/Oフックモジュールプログラム
244 I/O代行デーモンプログラム
300 I/Oフックモジュール部
310 I/Oフック部
320 プロセス間通信部
400 I/O代行デーモン部
410 プロセス間通信部
420 セッション管理部
430 ファイル管理部
440 共有メモリ管理部
450 非同期I/O管理部
500 構成情報
510 アプリケーション構成情報
511 アプリケーション名
512 優先度
513 リトライポリシー
520 ファイル構成情報
521 ファイルパス
522 ビットレート
523 デッドライン
600 I/O代行通信プロトコル
610 CONNECT要求
611 DISCONNECT要求
612 OPEN要求
613 CLOSE要求
614 READ0要求
615 READ1要求
616 WRITE0要求
617 WRITE1要求
618 FTRUNCATE要求
619 UNLINK要求
620 CONNECT応答
621 DISCONNECT応答
622 OPEN応答
623 CLOSE応答
624 READ0応答
625 READ1応答
626 WRITE0応答
627 WRITE1応答
628 FTRUNCATE応答
629 UNLINK応答
2500 I/O代行デーモン部
2510 I/Oパターン解析部
2511 I/Oパターン検出部
2512 I/O履歴管理部
2513 先読みI/O管理部

Claims (10)

  1. I/O特性を認識しないファイルサーバアプリケーション部と、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識しないファイルシステムとを備えたファイルサーバにおいて、
    I/O代行デーモン部、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識するファイルシステム、及び、前記ファイルサーバアプリケーション部及び前記ファイルシステムが管理するファイルの構成情報を有するメモリを備え、
    前記I/O代行デーモン部は、
    前記ファイルサーバアプリケーション部からI/Oを受信し、
    前記受信したI/Oに、前記構成情報を参照して、前記受信したI/Oの制御情報を付加し、
    該制御情報を付加したI/Oを、前記I/O特性を認識するファイルシステムへ送信することを特徴とするファイルサーバ。
  2. 請求項1に記載のファイルサーバにおいて、
    前記ファイルサーバアプリケーション部は、I/Oフックモジュール部を備えており、
    前記I/Oフックモジュール部は、前記ファイルサーバアプリケーション部のファイルI/O発行要求をフックし、フックしたファイルI/O発行要求からアクセス対象となるファイルの情報を取得して前記I/O代行デーモン部に渡すことを特徴とするファイルサーバ。
  3. 請求項2に記載のファイルサーバにおいて、
    前記I/O代行デーモン部は、I/Oパターン解析部を備えており、
    前記I/Oパターン解析部を用いて前記ファイルI/O発行要求のI/Oパターンを解析して取得した動的な制御情報を、前記ファイルI/O発行要求に付加することを特徴とするファイルサーバ。
  4. I/O特性を認識しないファイルサーバアプリケーション部と、I/O代行デーモン部と、前記ファイルサーバアプリケーション部からI/Oを受信する、I/O特性を認識しないファイルシステムと、前記ファイルサーバアプリケーションからI/Oを受信する、I/O特性を認識するファイルシステムと、前記ファイルサーバアプリケーション及び前記ファイルシステムが管理するファイルの構成情報を有するメモリと、を備えるファイルサーバにおけるデータ入出力方法であって、
    前記ファイルサーバアプリケーション部から送信されるI/Oに、前記構成情報を参照して、該I/Oの制御情報を付加するステップ及び
    前記制御情報を付加したI/Oを、前記I/O特性を認識するファイルシステムに送信するステップを含むことを特徴とするデータ入出力方法。
  5. 請求項4に記載のデータ入出力方法において、
    更に、前記ファイルサーバアプリケーション部のファイルI/O発行要求をフックするステップと、
    フックしたファイルI/O発行要求からアクセス対象となるファイルの情報を取得して前記I/O代行デーモン部に渡すステップとを含むことを特徴とするデータ入出力方法。
  6. 請求項5に記載のデータ入出力方法において、
    更に、前記ファイルI/O発行要求のI/Oパターンを解析するステップと、解析して取得した動的な制御情報を、前記ファイルI/O発行要求に付加するステップとを含むことを特徴とするデータ入出力方法。
  7. ファイルサーバアプリケーションソフトウェアのファイルI/O発行要求をフックし、フックしたファイルI/O発行要求からアクセス対象となるファイルの情報を取得して、I/O代行デーモンプログラムに渡すI/Oフックモジュールプログラムであって、
    前記I/O代行デーモンプログラムは、I/OフックモジュールプログラムからファイルサーバのI/O要求を受け取り、前記ファイルサーバに代行してリアルタイムI/Oファイルシステムに前記I/O要求を発行するものであり、
    前記I/Oフックモジュールプログラムは、前記ファイルサーバアプリケーションソフトウェアのファイルI/O発行要求をフックする手順と、フックした前記ファイルI/O発行要求からアクセス対象となるファイルのパス名およびファイル内のアクセス対象領域を示す情報を取得する手順と、
    取得したアクセス対象領域を示す情報を前記I/O代行デーモンプログラムに渡す手順と、
    を計算機に実行させることを特徴とするI/Oフックモジュールプログラム。
  8. I/OフックモジュールプログラムからファイルサーバのI/O要求を受け取り、前記ファイルサーバに代行してリアルタイムI/Oファイルシステムに前記I/O要求を発行するI/O代行デーモンプログラムであって
    前記I/Oフックモジュールプログラムから受け取った個々のファイルI/O発行要求に、前記ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じたファイルI/Oの制御情報を付加する手順と、
    前記制御情報を付加したファイルI/O発行要求を前記リアルタイムI/Oファイルシステムに対して発行する手順と、
    前記ファイルI/O発行要求の実行結果を前記I/Oフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、
    を計算機に実行させるものであるI/O代行デーモンプログラム。
  9. I/Oフックモジュールプログラムから受け取った個々のファイルI/O発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、
    前記制御情報を付加したファイルI/O発行要求をファイルシステムに対して発行する手順と、
    前記ファイルI/O発行要求の実行結果をI/Oフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、
    前記ファイルサーバアプリケーションソフトウェアから受け取った個々のファイルI/O発行要求がデッドラインミスを起こした場合の再試行する回数であるリトライポリシー基づいてファイルI/O発行要求の手順を、
    計算機に実行させることを特徴とするI/O代行デーモンプログラム。
  10. I/Oフックモジュールプログラムから受け取った個々のファイルI/O発行要求に、ファイルサーバアプリケーションソフトウェアおよびアクセス対象ファイルに応じた制御情報を付加する手順と、
    前記制御情報を付加したファイルI/O発行要求をファイルシステムに対して発行する手順と、
    前記ファイルI/O発行要求の実行結果をI/Oフックモジュールプログラムを介して前記ファイルサーバアプリケーションソフトウェアに渡す手順と、
    前記ファイルサーバアプリケーションソフトウェアのI/OフックモジュールプログラムからファイルI/O発行要求に関する情報を受け取る手順と、
    前記ファイルサーバアプリケーションソフトウェアからファイルI/O発行要求に構成情報に基づく制御情報を付加し、リアルタイムI/Oファイルシステムに対して非同期で発行する手順と、
    非同期で発行される読み込みおよび書き込みのファイルI/O発行要求を管理する手順と、管理される履歴情報を参照し、I/Oのパターンを解析する手順と、
    解析したパターンに基づく動的な制御情報を前記I/O発行要求に付加して前記リアルタイムI/Oファイルシステムに発行する手順と、
    を計算機に実行させることを特徴とするI/O代行デーモンプログラム。
JP2012059548A 2012-03-16 2012-03-16 ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム Active JP5723812B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012059548A JP5723812B2 (ja) 2012-03-16 2012-03-16 ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012059548A JP5723812B2 (ja) 2012-03-16 2012-03-16 ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム

Publications (2)

Publication Number Publication Date
JP2013196066A JP2013196066A (ja) 2013-09-30
JP5723812B2 true JP5723812B2 (ja) 2015-05-27

Family

ID=49394999

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012059548A Active JP5723812B2 (ja) 2012-03-16 2012-03-16 ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム

Country Status (1)

Country Link
JP (1) JP5723812B2 (ja)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170008153A (ko) * 2015-07-13 2017-01-23 삼성전자주식회사 비휘발성 장치에서 데이터 속성 기반 데이터 배치를 활용하기 위해 컴퓨터를 구동하는 경험적 인터페이스
KR20180026327A (ko) * 2016-09-02 2018-03-12 삼성전자주식회사 자동 스트림 검출 및 할당 알고리즘
US10592171B2 (en) 2016-03-16 2020-03-17 Samsung Electronics Co., Ltd. Multi-stream SSD QoS management
US10656838B2 (en) 2015-07-13 2020-05-19 Samsung Electronics Co., Ltd. Automatic stream detection and assignment algorithm
US10732905B2 (en) 2016-02-09 2020-08-04 Samsung Electronics Co., Ltd. Automatic I/O stream selection for storage devices
US10739995B2 (en) 2016-10-26 2020-08-11 Samsung Electronics Co., Ltd. Method of consolidate data streams for multi-stream enabled SSDs
US10824576B2 (en) 2015-07-13 2020-11-03 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
US10866905B2 (en) 2016-05-25 2020-12-15 Samsung Electronics Co., Ltd. Access parameter based multi-stream storage device access
US10901907B2 (en) 2017-10-19 2021-01-26 Samsung Electronics Co., Ltd. System and method for identifying hot data and stream in a solid-state drive
US10949087B2 (en) 2018-05-15 2021-03-16 Samsung Electronics Co., Ltd. Method for rapid reference object storage format for chroma subsampled images
US11194710B2 (en) 2017-04-25 2021-12-07 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11449256B2 (en) 2018-05-15 2022-09-20 Samsung Electronics Co., Ltd. Method for accelerating image storing and retrieving differential latency storage devices based on access rates
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
US11507326B2 (en) 2017-05-03 2022-11-22 Samsung Electronics Co., Ltd. Multistreaming in heterogeneous environments

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6165580B2 (ja) * 2013-10-04 2017-07-19 株式会社 日立産業制御ソリューションズ コンテンツ配信装置及びコンテンツ配信装置のコンテンツ配信方法
JP7100260B2 (ja) 2018-11-21 2022-07-13 富士通株式会社 情報処理装置および情報処理プログラム
CN110750242B (zh) * 2019-09-19 2023-05-02 北京字节跳动网络技术有限公司 一种部署文件的方法、系统、介质和电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3335801B2 (ja) * 1995-07-05 2002-10-21 株式会社日立製作所 異種ファイルへのアクセスを可能とする情報処理システム及びその制御方法
JP4057201B2 (ja) * 1999-09-16 2008-03-05 富士通株式会社 異種計算機間高速データ交換方式およびエクステント抽出・変換プログラム記録媒体
JP2002196960A (ja) * 2000-12-25 2002-07-12 Hitachi Ltd ファイル入出力制御方法、ファイル管理サーバ及び並列計算機システム
JP5056529B2 (ja) * 2007-03-28 2012-10-24 富士通株式会社 アクセス制御プログラム

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10824576B2 (en) 2015-07-13 2020-11-03 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
US10509770B2 (en) 2015-07-13 2019-12-17 Samsung Electronics Co., Ltd. Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US11392297B2 (en) 2015-07-13 2022-07-19 Samsung Electronics Co., Ltd. Automatic stream detection and assignment algorithm
US10656838B2 (en) 2015-07-13 2020-05-19 Samsung Electronics Co., Ltd. Automatic stream detection and assignment algorithm
KR20170008153A (ko) * 2015-07-13 2017-01-23 삼성전자주식회사 비휘발성 장치에서 데이터 속성 기반 데이터 배치를 활용하기 위해 컴퓨터를 구동하는 경험적 인터페이스
US11249951B2 (en) 2015-07-13 2022-02-15 Samsung Electronics Co., Ltd. Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
EP3118745B1 (en) * 2015-07-13 2020-09-16 Samsung Electronics Co., Ltd. A heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US10732905B2 (en) 2016-02-09 2020-08-04 Samsung Electronics Co., Ltd. Automatic I/O stream selection for storage devices
US10592171B2 (en) 2016-03-16 2020-03-17 Samsung Electronics Co., Ltd. Multi-stream SSD QoS management
US11586392B2 (en) 2016-03-16 2023-02-21 Samsung Electronics Co., Ltd. Multi-stream SSD QoS management
US10866905B2 (en) 2016-05-25 2020-12-15 Samsung Electronics Co., Ltd. Access parameter based multi-stream storage device access
KR20180026327A (ko) * 2016-09-02 2018-03-12 삼성전자주식회사 자동 스트림 검출 및 할당 알고리즘
US11048411B2 (en) 2016-10-26 2021-06-29 Samsung Electronics Co., Ltd. Method of consolidating data streams for multi-stream enabled SSDs
US10739995B2 (en) 2016-10-26 2020-08-11 Samsung Electronics Co., Ltd. Method of consolidate data streams for multi-stream enabled SSDs
US11194710B2 (en) 2017-04-25 2021-12-07 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11630767B2 (en) 2017-04-25 2023-04-18 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US11507326B2 (en) 2017-05-03 2022-11-22 Samsung Electronics Co., Ltd. Multistreaming in heterogeneous environments
US11847355B2 (en) 2017-05-03 2023-12-19 Samsung Electronics Co., Ltd. Multistreaming in heterogeneous environments
US10901907B2 (en) 2017-10-19 2021-01-26 Samsung Electronics Co., Ltd. System and method for identifying hot data and stream in a solid-state drive
US11449256B2 (en) 2018-05-15 2022-09-20 Samsung Electronics Co., Ltd. Method for accelerating image storing and retrieving differential latency storage devices based on access rates
US10949087B2 (en) 2018-05-15 2021-03-16 Samsung Electronics Co., Ltd. Method for rapid reference object storage format for chroma subsampled images
US11947826B2 (en) 2018-05-15 2024-04-02 Samsung Electronics Co., Ltd. Method for accelerating image storing and retrieving differential latency storage devices based on access rates

Also Published As

Publication number Publication date
JP2013196066A (ja) 2013-09-30

Similar Documents

Publication Publication Date Title
JP5723812B2 (ja) ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム
US10691341B2 (en) Method for improving memory system performance in virtual machine systems
US8407448B1 (en) Shared storage I/O elimination through mapping client integration into a hypervisor
US9697130B2 (en) Systems and methods for storage service automation
US8966476B2 (en) Providing object-level input/output requests between virtual machines to access a storage subsystem
KR101769448B1 (ko) 주석이 달린 극소 기록 작동을 수행하기 위한 방법 및 장치
US9959074B1 (en) Asynchronous in-memory data backup system
CN100405304C (zh) 基于存储区域网络的高速固态存储设备的实现方法
EP2879040B1 (en) Data storage method, data storage apparatus, and storage device
US8966188B1 (en) RAM utilization in a virtual environment
US20090019223A1 (en) Method and systems for providing remote strage via a removable memory device
WO2017157145A1 (zh) 一种数据预取方法以及装置
WO2018094649A1 (zh) 一种虚拟机启动过程中的数据获取方法和云计算系统
US10853185B1 (en) Virtual machine image backup to exclude system page file
US8595454B1 (en) System and method for caching mapping information for off-host backups
US11983115B2 (en) System, device and method for accessing device-attached memory
US11822813B2 (en) Storage device, operation method of storage device, and storage system using the same
US20160077747A1 (en) Efficient combination of storage devices for maintaining metadata
US11662949B2 (en) Storage server, a method of operating the same storage server and a data center including the same storage server
JP2005018643A (ja) ストレージエリアネットワーク上の共有ディスク装置へのアクセスシステム及びそのクライアント
TWI564803B (zh) 用於儲存虛擬化的系統和方法
KR102435910B1 (ko) 스토리지 장치 및 그것의 동작 방법
US11809341B2 (en) System, device and method for indirect addressing
Shin et al. Towards weakly consistent local storage systems
Wang et al. Computer Memory and Storage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140409

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150210

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150302

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150330

R150 Certificate of patent or registration of utility model

Ref document number: 5723812

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150