(54)【発明の名称】ペリフェラル・コンポーネント・インターコネクト・エクスプレス・エンドポイントデバイスにアクセスするためのコンピュータシステム、方法、および装置
【文献】
内藤 竜治,徹底解説 作ればわかるPCI Express 第13回 最も基本的なPCI Expressデバイスの設計,Interface,日本,CQ出版株式会社,2010年 4月 1日,第36巻, 第4号,p.171-178
(58)【調査した分野】(Int.Cl.,DB名)
前記アクセスプロキシが、前記PCIeエンドポイントデバイスに対するアクセスが失敗したことを示す第2の通知メッセージを前記プロセッサに送信するようにさらに構成され、
前記プロセッサが、前記第2の通知メッセージを受信した後で、前記アクセスプロキシが前記PCIeエンドポイントデバイスにアクセスするのに失敗した理由を判断し、前記アクセス失敗に関する前記理由が、前記PCIeエンドポイントデバイスが異常にオフラインであるためである場合、前記PCIeエンドポイントデバイスに対するアクセスを停止するようにさらに構成される、請求項1または4に記載のコンピュータシステム。
前記アクセスプロキシが前記プロセッサに接続しているプリント回路基板上に溶接される、または、接続ファームウェアを使用することによって、前記プロセッサに接続する、請求項1から7のいずれか一項に記載のコンピュータシステム。
前記コンピュータシステムがPCIe交換器をさらに含み、前記PCIe交換器の上流ポートが前記PCIeバスを介して前記プロセッサに接続し、前記PCIe交換器の下流ポートが前記PCIeバスを介して前記PCIeエンドポイントデバイスに接続する、請求項1から8のいずれか1項に記載のコンピュータシステム。
前記PCIe交換器が前記プロセッサに接続しているプリント回路基板上に溶接されるか、または、接続ファームウェアを使用することによって、前記プロセッサに接続する、請求項10に記載のコンピュータシステム。
ペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための方法であって、コンピュータシステムのプロセッサがPCIeバスを介して前記PCIeエンドポイントデバイスに接続し、
前記プロセッサによって、動作命令を獲得するステップであって、前記動作命令が、アクセスプロキシを使用することによって前記PCIeエンドポイントデバイスにアクセスするように前記プロセッサに命令する、獲得するステップと、
前記プロセッサによって、前記動作命令に従ってアクセス要求を前記アクセスプロキシに送信するステップであって、前記アクセス要求が前記PCIeエンドポイントデバイスにアクセスするように前記アクセスプロキシに命令する、送信するステップと、
前記PCIeエンドポイントデバイスへのアクセスが成功であるか否かにかかわらず、前記プロセッサによって、前記アクセスプロキシによって送信された前記アクセス要求の応答メッセージを受信するステップと、
前記プロセッサによって、前記応答メッセージを受信した後で、前記アクセス要求に対応するタスクが完了していると判断して、前記タスクに関して開始されたタイマを停止するステップとを含む方法。
前記アクセスプロキシがダイレクトメモリアクセスDMAエンジンによって実施され、前記動作命令が、前記DMAエンジンを使用することによって前記PCIeエンドポイントデバイスにアクセスするように前記プロセッサに特に命令し、
前記プロセッサによって、前記動作命令に従ってアクセス要求を前記アクセスプロキシに送信する前記ステップが、
前記プロセッサによって、前記動作命令に従ってデータ移動要求を前記DMAエンジンに送信するステップであって、前記データ移動要求が、前記PCIeエンジンのメモリ内の特定データを前記コンピュータシステムのメモリに移動するか、または前記コンピュータシステムの前記メモリ内の特定データを前記PCIeエンドポイントデバイスの前記メモリに移動するように前記DMAエンジンに命令する、送信するステップ
を含む、請求項12に記載の方法。
前記プロセッサによって、前記アクセスプロキシによって送信された第2の通知メッセージを受信するステップであって、前記第2の通知メッセージが、前記アクセスプロキシが前記PCIeエンドポイントデバイスにアクセスするのに失敗したことを示す、受信するステップと、
前記プロセッサによって、前記アクセスプロキシが前記PCIeエンドポイントデバイスにアクセスするのに失敗した理由を判断し、前記アクセス失敗の前記理由が、前記PCIeエンドポイントデバイスが異常にオフラインであるためである場合、前記プロセッサによって、前記PCIeエンドポイントデバイスに対するアクセスを停止するステップと
をさらに含む、請求項12から15のいずれか一項に記載の方法。
前記PCIeエンドポイントデバイスが異常にオフラインであることを示す通知を獲得して、前記PCIeエンドポイントデバイスに割り振られたリソースを確保するステップ
をさらに含む、請求項16に記載の方法。
コンピュータ実行命令を含むコンピュータ可読記録媒体であって、コンピュータのプロセッサが前記コンピュータ実行命令を実行するとき、コンピュータが請求項12から17のいずれか一項に記載のアクセス方法を実行するコンピュータ可読記録媒体。
ペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための方法であって、前記PCIeエンドポイントデバイスがPCIeバスを介してコンピュータシステムのプロセッサに接続し、
起動命令を受信するステップであって、前記起動命令が前記PCIeエンドポイントデバイスにアクセスする必要があることを示す、受信するステップと、
前記PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成するステップであって、前記プリセットされたインターフェースは、アクセスプロキシを指し示し、前記動作命令が、前記アクセスプロキシを使用することによって前記PCIeエンドポイントデバイスにアクセスするように前記プロセッサに命令するために使用される、生成するステップとを含む方法。
コンピュータ実行命令を含むコンピュータ可読記録媒体であって、前記コンピュータのプロセッサが前記コンピュータ実行命令を実行するとき、コンピュータが以下のステップ、すなわち、
起動命令を受信するステップであって、前記起動命令がPCIeエンドポイントデバイスにアクセスする必要があることを示す、受信するステップと、
前記PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、前記PCIeエンドポイントデバイスにアクセスするための動作命令を生成するステップであって、前記プリセットされたインターフェースは、アクセスプロキシを指し示し、前記動作命令が、前記アクセスプロキシを使用することによって前記PCIeエンドポイントデバイスにアクセスするように前記プロセッサに命令するために使用される、生成するステップと
を行うコンピュータ可読記録媒体。
【発明の概要】
【課題を解決するための手段】
【0005】
本発明の実施形態は、ペリフェラル・コンポーネント・インターコネクト・エクスプレス・エンドポイントデバイスにアクセスするための方法、コンピュータシステム、およびPCIeエンドポイントデバイスが異常にオフラインになった後で、プロセッサによってリセットが引き起こされるのを回避するための装置を提案する。
【0006】
第1の態様において、本発明のある実施形態は、
プロセッサと、
PCIeエンドポイントデバイスに接続するように構成されたペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeバスと
を含むコンピュータシステムであって、
コンピュータシステムがアクセスプロキシをさらに含み、アクセスプロキシがプロセッサとPCIeエンドポイントデバイスとに接続し、
プロセッサが、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令する動作命令を獲得し、PCIeエンドポイントデバイスにアクセスするようにアクセスプロキシに命令するアクセス要求を動作命令に従ってアクセスプロキシに送信するように構成され、
アクセスプロキシが、プロセッサによって送信されたアクセス要求を受信した後で、アクセス要求の応答メッセージをプロセッサに送信するように構成された、
コンピュータシステムを提供する。
【0007】
第1の態様に関して、第1の可能な実装様式では、コンピュータシステムは、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成するように構成されたPCIeエンドポイントデバイスのドライブモジュールをさらに含み、
プロセッサは、PCIeエンドポイントデバイスのドライブモジュールによって生成された動作命令を獲得するよう特に構成される。
【0008】
第1の態様に関して、第2の可能な実装様式では、コンピュータシステムは、PCIeエンドポイントデバイスのドライブモジュールとホストオペレーティングシステムとをさらに含み、
PCIeエンドポイントデバイスのドライブモジュールは、PCIeエンドポイントデバイスにアクセスするために、ホストオペレーティングシステムを起動させるように構成され、
ホストオペレーティングシステムは、PCIeエンドポイントデバイスのドライブモジュールによる起動に応答して、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成するように構成され、
プロセッサは、ホストオペレーティングシステムによって生成された動作命令を獲得するように特に構成される。
【0009】
第1の態様、第1の態様の第1の可能な実装様式、または第1の態様の第2の可能な実装方法に関して、第3の可能な実装方法では、アクセスプロキシは、アクセス要求に従ってPCIeエンドポイントデバイスに対するアクセスを実行するようにさらに構成される。
【0010】
第2の態様において、PCIeバスを介してコンピュータシステムのプロセッサに接続するペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための方法であって、
プロセッサによって、動作命令を獲得するステップであって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令する、獲得するステップと、
プロセッサによって、動作命令に従ってアクセス要求をアクセスプロキシに送信するステップであって、アクセス要求がPCIeエンドポイントデバイスにアクセスするようにアクセスプロキシに命令する、送信するステップと、
プロセッサによって、アクセスプロキシによって送信されたアクセス要求の応答メッセージを受信するステップと
を含む方法が提供される。
【0011】
第2の態様に関して、第1の可能な実装様式では、プロセッサは、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、PCIeエンドポイントデバイスのドライブモジュールによって生成された動作命令を獲得するか、あるいは、プロセッサは、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、ホストオペレーティングシステムによって生成された動作命令を獲得する。第2の態様または第2の態様の第1の可能な実装様式に関して、第2の可能な実装様式では、動作命令は、ダイレクトメモリアクセス(Direct Memory Access、DMA)エンジンを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに特に命令し、
プロセッサは、動作命令に従ってデータ移動要求をDMAエンジンに送信し、データ移動要求は、PCIeエンジンのメモリ内の特定データをコンピュータシステムのメモリに移動するように、またはコンピュータシステムのメモリ内の特定データをPCIeエンドポイントデバイスのメモリに移動するようにDMAエンジンに命令する。
【0012】
第2の態様、第2の態様の第1の可能な実装様式、または第2の態様の第2の可能な実装方法に関して、第3の可能な実装様式では、方法は、
プロセッサによって、アクセスプロキシによって送信された第1の通知メッセージを受信するステップであって、第1の通知メッセージが、アクセスプロキシがPCIeエンドポイントデバイスに成功裏にアクセスしたことを示す、受信するステップと、
プロセッサによって、第1の通知メッセージに従ってアクセス結果を獲得するステップと
をさらに含む。
【0013】
第2の態様、第2の態様の第1の可能な実装様式、または第2の態様の第2の可能な実装方法に関して、第4の可能な実装様式では、方法は、
プロセッサによって、アクセスプロキシによって送信された第2の通知メッセージを受信するステップであって、第2の通知メッセージが、アクセスプロキシがPCIeエンドポイントデバイスにアクセスするのに失敗したことを示す、受信するステップと、
プロセッサによって、第2の通知メッセージに従って、アクセス失敗に関する後続処理を実行するステップと
をさらに含む。
【0014】
第2の態様の第4の可能な実装方法に関して、第5の可能な実装方法では、アクセス失敗の後続処理は、
プロセッサによって、アクセスプロキシがPCIeエンドポイントデバイスにアクセスするのに失敗した理由を判断して、アクセス失敗の理由が、アクセスされるべきPCIeエンドポイントデバイスが異常にオフラインであるためである場合、プロセッサによって、PCIeエンドポイントデバイスへのアクセスを停止するステップ
を含む。
【0015】
第3の態様において、
プロセッサと、
コンピュータ実行命令を記憶するように構成されたメモリとを含むコンピュータであって、
コンピュータが実行しているとき、プロセッサが、コンピュータが第2の態様に従ってペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスする方法を実行するように、メモリ内に記憶されたコンピュータ実行命令を実行して、通信インターフェースを介してコンピュータの外部デバイスと通信する
コンピュータが提供される。
【0016】
第4の態様において、コンピュータ実行命令を含むコンピュータ可読媒体であって、コンピュータのプロセッサがコンピュータ実行命令を実行するとき、コンピュータが第2の態様に従ってペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスする方法を実行するコンピュータ可読媒体が提供される。
【0017】
第5の態様において、PCIeバスを介してコンピュータシステムのプロセッサに接続するペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための方法であって、
起動命令を受信するステップであって、起動命令がPCIeエンドポイントデバイスにアクセスする必要があることを示す、受信するステップと、
アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成するステップであって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令するために使用される、生成するステップと
を含む方法が提供される。
【0018】
第6の態様において、ペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための装置であって、
PCIeエンドポイントデバイスにアクセスする必要があることを示す起動命令を受信するように構成された受信モジュールと、
アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、PCIeエンドポイントデバイスにアクセスするための動作命令を生成するように構成された生成モジュールであって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令するために使用される、生成モジュールと
を含む装置が提供される。
【0019】
第7の態様において、
プロセッサと、
コンピュータ実行命令を記憶するように構成されたメモリとを含むコンピュータであって、
コンピュータが実行しているとき、コンピュータが以下のステップ、すなわち、
起動命令を受信するステップであって、起動命令がPCIeエンドポイントデバイスにアクセスする必要があることを示す、受信するステップと、
アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、PCIeエンドポイントデバイスにアクセスするための動作命令を生成するステップであって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令するために使用される、生成するステップと
を実行するように、プロセッサが、メモリ内に記憶されたコンピュータ実行命令を実行するコンピュータが提供される。
【0020】
第8の態様において、コンピュータ実行命令を含むコンピュータ可読媒体であって、コンピュータのプロセッサがコンピュータ実行命令を実行するとき、コンピュータが以下のステップ、すなわち、
起動命令を受信するステップであって、起動命令がPCIeエンドポイントデバイスにアクセスする必要があることを示す、受信するステップと、
アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、PCIeエンドポイントデバイスにアクセスするための動作命令を生成するステップであって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにプロセッサに命令するために使用される、生成するステップと
を実行するコンピュータ可読媒体が提供される。
【0021】
第9の態様において、コンピュータシステムに適用されるアクセスプロキシであって、コンピュータシステムが、プロセッサとペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeバスとを含み、PCIeバスが少なくとも1つのPCIeエンドポイントデバイスに接続し、
アクセスプロキシがプロセッサとPCIeエンドポイントデバイスとに接続し、
プロセッサとPCIeエンドポイントデバイスとの間の直接アクセスを分離して、PCIeエンドポイントデバイスにアクセスするための要求をプロセッサから受信して、アクセス要求の応答メッセージをプロセッサに返すように構成されたアクセスプロキシが提供される。
【0022】
第10の態様において、コンピュータシステムに適用されるPCIe交換器であって、コンピュータシステムが、プロセッサとペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeバスとを含み、PCIeバスが少なくとも1つのPCIeエンドポイントデバイスに接続し、
PCIe交換器の上流ポートがPCIeバスを介してプロセッサに接続し、PCIe交換器の下流ポートがPCIeバスを介してPCIeエンドポイントデバイスに接続し、
第9の態様によるアクセスプロキシがその中に組み込まれたPCIe交換器が提供される。
【0023】
第11の態様において、コンピュータシステムにアクセスするペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにリソースを割り振るための方法であって、
PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに関して特定割合のリソースを確保するステップであって、特定割合がPCIeエンドポイントデバイスの必要とされるリソース量以上である、確保するステップと、
確保された特定割合のリソースに従って、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに確保された特定割合のリソースを割り振るステップと
を含む方法が提供される。
【0024】
第11の態様によれば、第1の実装様式で、特定割合は最大リソース要求量を有するタイプのPCIeエンドポイントデバイスの必要とされるリソース量である。
【0025】
第11の態様または第11の態様の第1の可能な実装様式によれば、第2の可能な実装様式で、コンピュータシステムにアクセスするPCIeエンドポイントデバイスとプロセッサとがPCIeフィールドを構成し、PCIeフィールドが対応するPCIeツリーで構成され、
この方法は、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに割り振られた特定割合のリソースをPCIeツリー内に記録するステップをさらに含む。
【0026】
第11の態様の第2の可能な実装様式によれば、第3の可能な実装様式で、この方法は、
それぞれのPCIeエンドポイントデバイスがコンピュータシステムからオフラインであるとき、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに割り振られ、かつPCIeツリー内に記録された特定割合のリソースを確保するステップを含む。
【0027】
第12の態様において、
プロセッサと、
PCIeエンドポイントデバイスを接続するように構成されたペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeバスと、
PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに関して特定割合のリソースを確保するように構成された基本出力システムBIOSであって、特定割合がPCIeエンドポイントデバイスの必要とされるリソース量以上である、基本入出力システムBIOSと、
BIOSによって確保された特定割合のリソースに従って、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに確保された特定割合のリソースを割り振るように構成されたPCIe管理モジュールと
を含むコンピュータシステムが提供される。
【0028】
本発明の実施形態では、プロセッサは、アクセスされるべきPCIeエンドポイントデバイスにもはや直接的にアクセスせず、アクセスプロキシを使用することによってアクセスを完了する。アクセスプロキシは、PCIeエンドポイントデバイスの異常オフラインによってもたらされる影響を分離して、アクセス要求の応答メッセージをプロセッサに返すことが可能であり、その結果、プロセッサ上にキャッシュされたタスクがタイムアウトにより蓄積せず、したがって、プロセッサはMCEリセットを回避する。
【0029】
本発明の実施形態では、システムは、特定割合のリソースを確保して、そのリソースをPCIeエンドポイントデバイスにアクセスするためのポートに割り振り、その結果、PCIeエンドポイントデバイスがシステムにアクセスするとき、プロセッサはPCIeエンドポイントデバイスを走査しない。これは、PCIeエンドポイントデバイスがコンピュータシステムにアクセスするとき、発生しうるMCEエラーによってシステム全体のリセットが引き起こされるのを回避する。
【0030】
本発明の実施形態の技術的解決策をより明瞭に例示するために、以下は、これらの実施形態または先行技術を説明するために必要とされる添付の図面を手短に紹介する。明らかに、以下の説明で添付の図面は本発明の単にいくつかの実施形態を示し、当業者は、創造的努力なしに、これらの添付の図面から依然として他の図面を導出することができる。
【発明を実施するための形態】
【0032】
本発明の実施形態は、ペリフェラル・コンポーネント・インターコネクト・エクスプレス・エンドポイントデバイスにアクセスするための方法、コンピュータシステム、および装置を提供する。PCIeエンドポイントデバイス上でホットスワップ動作を実行する必要があるとき、システムは前処理について事前に通知されない場合があり、PCIeエンドポイントデバイスとプロセッサとの間の接続は直接的に接続解除される。この時点で、プロセッサ上でMCEリセットリスクは生じない。本発明の実施形態では、PCIeエンドポイントデバイスがシステムから直接的に除去される状態、または失敗によりオフラインになる状態は、集合的にPCIeエンドポイントデバイスの異常なオフラインと呼ばれる。
本発明のある実施形態のシステムアーキテクチャ
【0033】
図1は、本発明のある実施形態による、あるコンピュータシステムの組成図である。
図1に示されるコンピュータシステムは、CPU110と、メモリ120と、PCIeエンドポイントデバイス130とを含む。PCIeエンドポイントデバイス130は、PCIeバス140を介してCPU110に接続し、コンピュータシステム内に挿入可能であり、またはコンピュータシステムから除去可能である。PCIeエンドポイントデバイス130は、グラフィックス処理ユニット131、ネットワークインターフェースカード132、固体ディスク133、およびビデオ加速構成要素(video accelerating component)134など、複数の種類を含む。メモリ120は、データを記憶するように構成され、記憶されたデータは、CPUによって外部デバイスから獲得されるデータであってよく、またはさらに、CPUを実行させることが可能なプログラムデータであってもよい。詳細には、1つまたは複数のプログラムモジュールをメモリ内に記憶することが可能であり、CPU110は、プログラムモジュールのコンピュータ実行命令に従って関係する動作を実行する。
図1に示されるコンピュータシステム内のPCIeエンドポイントデバイス130およびCPU110はPCIeフィールドを構成し、PCIeフィールド内のすべてのデバイスは、PCIeバス140を介してCPU110に接続し、CPU110によって制御される。
【0034】
図1に示されるシステムアーキテクチャでは、
図2に示されるように、メモリ120内のプログラムモジュールは、詳細には、アプリケーションモジュール121と、ドライブモジュール122と、ホストオペレーティングシステム(Host Operation System、HOS)123とを含むことが可能である。アプリケーションモジュール121は、PCIeエンドポイントデバイスに対するアクセス要求を生成する。ドライブモジュール122は、PCIeエンドポイントデバイスにアクセスするためのアプリケーションモジュールの要求に従って、(アクセスインターフェースがHOSによって提供されている場合)HOS123の対応するインターフェースを起動させることができる。HOS123は、ドライブモジュールによる起動に応答して、動作命令を生成し、その結果、CPUは、動作命令に従って、対応するPCIeエンドポイントデバイスにアクセスするか、または対応するPCIeエンドポイントデバイスを制御する。概して、1つのPCIeエンドポイントデバイスは、1つのドライブモジュールに対応する(確かに、それぞれのPCIeエンドポイントデバイスが対応するドライブモジュールを備えていることが確実にされる限り、1つのドライブモジュールが複数のPCIeエンドポイントデバイスに対応することは可能である)。例えば、
図1に示されるシステムアーキテクチャによれば、メモリ120内のPCIeエンドポイントデバイスのドライブモジュールは、グラフィックス処理ユニットのドライブモジュール122-1と、ネットワークインターフェースカードNICのドライブモジュール122-2と、固体ディスクSSDのドライブモジュール122-3と、ビデオ加速構成要素のドライブモジュール122-4とを含むことが可能である。
【0035】
例えば、アプリケーションモジュールが、CPUによってPCIeエンドポイントデバイスにアクセスするための現在の方法に従って、SSD固体ディスクに対するアクセス要求を生成する場合、アプリケーションモジュール121による起動に応答して、SDDのドライブモジュール122-3はHOS123を起動させ、HOS123は、デフォルト構成されたアクセスインターフェースに従ってCPU110に対する動作命令を生成し、動作命令は、デバイスSSD133にアクセスさせる命令と、関係する動作要件とを含み、CPU110は、SSD133のレジスタに対するアクセスを要求するために、SSDのドライブモジュール122-3の動作命令に従ってアクセス要求をSSD133に送信し、SSD133が異常にオフラインである場合、CPU110はCPU110のアクセス要求の応答メッセージをSSD133から受信しないことになり、この時点で、CPUはアクセスタスクを未完了と見なし、そのような未完了なタスクがCPU上にある程度まで蓄積した場合、CPUはシステム全体を異常と見なし、リセットを求めてMCEエラーを報告する。
【0036】
本発明のこの実施形態において、CPUによってPCIeエンドポイントデバイスにアクセスするための方法は変更される。CPUはPCIeエンドポイントデバイスにもはや直接的にアクセスせず、第3者を使用することによってPCIeエンドポイントデバイスにアクセスする。
図1に示されるように、本発明のこの実施形態において、アクセスプロキシ160がシステム内に新たに追加され、PCIeエンドポイントデバイスにアクセスして、CPU110に対するPCIeエンドポイントデバイスの異常なオフラインの影響を分離するために、CPU110の代わりにアクセスプロキシ160が使用される。
図1に示されるように、CPU110は、SSD133にアクセスするために、もはやライン1を使用せず、ライン2およびライン3を使用する(ライン1は、図に示されるライン1であり、ライン2は図に示されるライン2であり、ライン3は図に示されるライン3であり、図に示されるライン1〜3の破線は実際の接続ではなく、それぞれの複合モジュール間のシグナルフローラインを視覚的に例示するためにだけ使用される)。CPU110は、まず、動作命令を獲得し、動作命令は、アクセスプロキシ160を使用することによって、SSD133にアクセスするようにCPUに命令する。次いで、CPU110は、ライン2を介してアクセス要求をアクセスプロキシ160に送信する。アクセスプロキシ160は、ライン2を介してアクセス要求の応答メッセージをCPU110に返す。その後、アクセスプロキシは、アクセス要求に従って、PCIeエンドポイントデバイスに対するアクセスを実行し、すなわち、ライン3を介してSSD133のレジスタ上で読取り動作および書込み動作を実行する。このようにして、一態様において、CPU110はPCIeエンドポイントデバイス130との直接的な信号関係を生成しないため、PCIeエンドポイントデバイス130がオフラインであるかどうかはCPU110に不可視であり、すなわち、PCIeエンドポイントデバイスはCPU110のサービス処理に影響を及ぼさない。別の態様において、本発明のこの実施形態によって提供されるアクセスプロキシ160は、CPU110によって送信されたアクセス要求に関して対応する応答メッセージを常に受信できるように、CPU110からアクセス命令を受信した後で、応答メッセージをCPU110に返すことが可能である。したがって、CPU110のアクセスタスクは、タスクの未完了により累積せず、MCEエラーは生成されず、CPUによって開始されるシステムリセットは回避される。
【0037】
本発明のこの実施形態において、CPUによってPCIeエンドポイントデバイスにアクセスするための方法は、PCIeエンドポイントデバイスに対応するドライブモジュールをアップグレードまたは改善することによって変更可能である。PCIeエンドポイントデバイスに対応するドライブモジュールを再構成することによってこれが実施されるとき、アクセスインターフェースはPCIeエンドポイントデバイスに対応するドライブモジュール内でプリセットされ、プリセットされたアクセスインターフェースはアクセスプロキシを指摘し、PCIeエンドポイントデバイスに対応するドライブモジュールが、PCIeエンドポイントデバイスにアクセスすることが必要であると判断したとき、PCIeエンドポイントデバイスのドライブモジュールは、プリセットされたアクセスインターフェースに従ってCPUの動作命令を生成し、動作命令は、アクセスプロキシを使用することによって、PCIeエンドポイントデバイスにアクセスするようにCPUに命令する。
【0038】
加えて、CPUによってPCIeエンドポイントデバイスにアクセスするための方法の変更は別の実装方法を有することが可能である。例えば、この変更はHOSを修正することによって実施される。アクセスインターフェースはHOS上でプリセットされ、プリセットされたアクセスインターフェースはアクセスプロキシを指摘する。PCIeエンドポイントデバイスに対するアクセスが必要とされると判断するとき、PCIeエンドポイントデバイスのドライブモジュールは、PCIeエンドポイントデバイスにアクセスするためにHOSを依然として起動させる。HOSがPCIeエンドポイントデバイスのドライブによって送信された起動命令を受信した後で、HOS上で構成されたPCIeエンドポイントデバイスにアクセスするためのインターフェースはアクセスプロキシにリセットされているため、HOSは動作命令を生成し、動作命令は、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにCPUに命令する。
【0039】
以下は、本発明のこの実施形態によるアクセスプロキシの機能および詳細な実装形式を説明する。本発明のこの実施形態によるアクセスプロキシは、分離機能とアクセスプロキシ機能とを含む。分離モジュールとして機能すると、アクセスプロキシは、PCIeエンドポイントデバイスからのその独立を確実にする必要があり、CPUからのその独立を確実にする必要もある。PCIeエンドポイントデバイスからの独立を保つためには、アクセスプロキシがPCIeエンドポイントデバイスと共に除去されないことを確実にする必要があり、したがって、アクセスプロキシおよびPCIeエンドポイントデバイスが物理設定で異なるデバイスに属する必要があり、CPUからの独立を保つためには、アクセスプロキシが独立したプロセッサを有することが主に確実にされる。アクセスプロキシのプロセッサがシステムのCPUから独立しているとき、PCIeエンドポイントデバイスが直接的に除去されない場合ですら、アクセスプロキシモジュールに対する影響はCPUに影響を及ぼさないことになる。プロキシモジュールとして機能すると、アクセスプロキシは、PCIeエンドポイントデバイスに対するアクセスを実施して、CPUから受信されたアクセス要求の応答メッセージを返す必要があり、アクセス要求の応答メッセージは、確認応答、拒絶応答、または失敗応答であってよい。しかし、何の種類の応答メッセージであれ、メッセージは、CPUによって送信されたアクセス要求が受信されていることをCPUに示す。CPUは、応答メッセージを受信した後で、現在のタスクが完了していると判断して、そのタスクに関して開始されたタイマを停止することができる。このようにして、CPUのタスクタイムアウト停止機構は正常に保たれ、CPU上にキャッシュされた他のメッセージはタイムアウトにより累積せず、それによって、CPUによってMCEリセットが引き起こされるのを回避する。
【0040】
アクセスプロキシの機能のこの考察に基づいて、システム内のアクセスプロキシを複数の形式で設定することも可能である。
図1に示されるシステムアーキテクチャにおいて、アクセスプロキシ160は、独立した新たに追加されたデバイスとしてコンピュータシステム内で設定され、アクセスプロキシはPCIeバスを介して、CPUとPCIeエンドポイントデバイスとに接続する。加えて、アクセスプロキシ160は、実施のために、PCIeフィールド内の既存のデバイスと共にパッケージ化されてもよい。例えば、アクセスプロキシ160は、ファームウェアとしてCPUと共にパッケージ化される。
【0041】
本発明のこの実施形態において、アクセスプロキシは既存のハードウェアを使用することによって実施可能である。例えば、アクセスプロキシは、ダイレクトメモリアクセス(Direct Memory Access、DMA)エンジンを使用することによって実施される。新しいハードウェアを使用することによって、アクセスプロキシを実施することも可能である。例えば、アクセスプロキシ機能を有するソフトウェアモジュールは、独立したプロセッサを有するハードウェアデバイス上にインストールされる。
【0042】
本発明のこの実施形態において、アクセスプロキシはアクセス要求の応答メッセージをCPUに返す必要があるため、特定の実装の間、アクセスプロキシの機能を実施するための異なる様式が存在する。実装様式のうちの1つは、アクセスプロキシとCPUとの間の接続関係が保持状態であることを確実にすること、すなわち、これら2つの間の接続関係が接続解除されないこと、またはアクセスプロキシがCPUに関してホットスワップ可能でないことである。例えば、アクセスプロキシがロードされたハードウェアデバイス、もしくはアクセスプロキシを実施するために使用されるハードウェアデバイスは、CPUに接続されたプリント基板PCB上にはんだ付けされるか、またはアクセスプロキシがロードされているハードウェアデバイスもしくはアクセスプロキシとプロセッサとを実施するために使用されるハードウェアデバイスは、コネクタを使用することによって固定される。
【0043】
図3は、本発明の別の実施形態による、あるコンピュータシステムを例示する。
【0044】
図3に示されるコンピュータシステム内には、
図1に示されるCPUと、PCIeバスと、PCIeエンドポイントデバイスとを除いて、PCIe交換器150がさらに含まれる。PCIe交換器150の上流ポートはPCIeバス140を介してCPU110に接続し、下流ポートはそれぞれのPCIeエンドポイントデバイスに関するPCIeポートを提供し、それぞれのPCIeポートは、PCIeバス140を介してそれぞれのPCIeエンドポイントデバイスに接続する。PCIe交換器150は、経路データを対応するPCIeポートに向けて下流に流し、それぞれの独立PCIeポートからの経路データをCPU110に向けて上流に流すように構成される。
図3に示された実施形態では、新たに追加されたアクセスプロキシ160がPCIe交換器150内に設定され、この実施形態では、DMAエンジンを使用することによって、アクセスプロキシ160が実施される。PCIeエンドポイントデバイス130は、PCIeバス140を介してPCIe交換器150に接続する。PCIe交換器150およびPCIeエンドポイントデバイス130は異なるデバイスに属するため、任意のPCIeエンドポイントデバイスの直接除去は、システムからPCIe交換器150を除去させず、すなわち、アクセスプロキシ160がPCIeエンドポイントデバイスの除去に伴って除去されないことが確実にされ、それによって、アクセスプロキシ160の独立性とPCIeエンドポイントデバイス130の独立性とを実現する。加えて、この実施形態において、DMAエンジンは独立したプロセッサを有するため、いずれかのPCIeエンドポイントデバイスが直接的に除去され、かつDMAからPCIeエンドポイントデバイスにアクセスすることすら影響を受ける場合、DMAはこの影響を分離する。PCIeエンドポイントデバイスに対するアクセスが成功したかどうかにかかわらず、DMAがCPU110によって送信されたアクセス要求の応答メッセージをCPU110に返すことが確実にされ、それによって、CPUによってMCEリセットが開始される問題を回避する。
【0045】
ある例として、アプリケーションモジュールがSSD固体ディスク133に対するアクセス要求を生成することが依然として使用される。CPU110は固体ディスクSSDのドライブモジュール122-3によって生成された動作命令を獲得し、動作命令は、DMAを使用することによってSSD固体ディスク133にアクセスするようにCPU110に命令する。CPU110は、固体ディスクSSDのドライブモジュール122-3の動作命令に従ってデータ移動要求をDMAに送信し、データ移動要求は、PCIeエンドポイントデバイスのメモリ内の特定データをコンピュータシステムのメモリ内に移動するように、またはコンピュータシステムのメモリ内の特定データをPCIeエンドポイントデバイスのメモリ内に移動するようにDMAエンジンに命令する。CPU110のデータ移動要求を受信した後で、DMAは、データ移動要求の応答メッセージをCPU110に返して、SSD固体ディスク133上でデータ移動を実行し、データ移動が完了した後で、アクセスの結果を獲得するようにCPU110に命令するために、アクセス完了の通知メッセージをCPU110に返す。
【0046】
さらに、本発明のこの実施形態において、DMAはPCIe交換器150内に組み込まれているため、PCIe交換器150をCPU110に接続しているプリント回路基板PCB上にはんだ付けすることがさらに可能であるか、またはPCIe交換器150とCPU110とを接続するためのインターフェースは、コネクタを使用することによって固定される。これはPCIe交換器150内に組み込まれたDMAがシステムから除去されないことを確実にし、したがって、DMAがアクセス要求の応答メッセージをCPUに返すことが常に可能であることを確実にする。
【0047】
図4は、本発明の別の実施形態による、あるコンピュータシステムを例示する。
【0048】
図4に示される実施形態は、アクセスプロキシ160がCPU110内に新たに追加されており、DMAエンジンを使用することによってアクセスプロキシ160を実施することができるという点で
図3に示される実施形態とは異なる。アクセスプロキシ160はCPU110内に設定され、すなわち、アクセスプロキシ160がPCIeエンドポイントデバイスの除去に伴って除去されないことが確実にされ、それによって、アクセスプロキシ160の独立性とPCIeエンドポイントデバイス130の独立性とを実現する。加えて、この実施形態において、DMAエンジンは独自のプロセッサを有するため、いずれかのPCIeエンドポイントデバイスが直接的に除去され、DMAからPCIeエンドポイントデバイスにアクセスすることすら影響を受ける場合、CPU110が影響を受けないように、DMAはその影響を分離する。PCIeエンドポイントデバイスに対するアクセスが成功したかどうかにかかわらず、DMAがCPU110によって送信されたアクセス要求の応答メッセージをCPU110に返すことが確実にされ、それによって、CPUによってMCEリセットが開始される問題を回避する。この実施形態における詳細なアクセス方法は、
図1および
図3に示される実施形態で説明されたアクセス方法と一致し、したがって、本明細書でさらなる詳細は提供されない。
【0049】
本発明の実施形態において、PCIeエンドポイントデバイスにアクセスするための方法は、
図1、
図3、または
図4に示されるコンピュータシステムで実施されうる。しかし、
図1、
図3、または
図4で示されているのは、本発明の実施形態に適用される単なる例であり、本発明のアプリケーションに関する特定の限定ではない。他のシステム実施形態またはアプリケーションシナリオは本出願書において記述されない。加えて、
図1、
図3、または
図4に示されるシステム内のアクセスプロキシの設定は単なる例である。当業者は、本発明の実施形態において新たに追加されたアクセスプロキシをシステム内の別の位置にさらに設定すること、または本発明の実施形態の技術原理に従って、実装のための別の技術手段を使用することができる。
【0050】
図1、
図3、または
図4に示されたCPU110も単なる例である。例えば、CPU110は、さらに特定用途向け集積回路であってよい。形式は何であれ、CPU110はコンピュータシステム内でプロセッサ機能を実施する。本発明の実施形態において、コンピュータシステムは、計算サーバであってよく、またはスイッチなど、経路を管理するサーバであってもよい。コンピュータシステムの詳細な実装形態は本発明のこの実施形態に限定されない。
【0051】
PCIeエンドポイントデバイスにアクセスするためのプロセス
以下は、本発明のある実施形態による、PCIeエンドポイントデバイスにアクセスするためのあるプロセスを説明し、このプロセスは、コンピュータシステム内に新たに追加されたアクセスプロキシによって実施される。
図5に示されるように、本発明のこの実施形態において、PCIeエンドポイントデバイスにアクセスするためのあるプロセスは以下を含む。
【0052】
S501:CPUは動作命令を獲得し、動作命令は、コンピュータシステム内でアクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにCPUに命令する。
【0053】
詳細には、動作命令は、PCIeエンドポイントデバイスのドライブモジュールによって生成可能である。PCIeエンドポイントデバイスのドライブモジュールは、アクセスプロキシとして、PCIeエンドポイントデバイスにアクセスするためのインターフェースをプリセットしているため、上層アプリケーションモジュールがPCIeエンドポイントデバイスに対するアクセス要求を生成するとき、PCIeエンドポイントデバイスのドライブモジュールは、PCIeエンドポイントデバイスにアクセスするための動作命令を生成し、動作命令は、コンピュータシステム内でアクセスプロキシを使用することによって、アクセスされるべきPCIeエンドポイントデバイスにアクセスするようにCPUに命令する。あるいは、動作命令は、コンピュータシステム内でHOSによっても生成されうる。HOSは、アクセスプロキシとして、PCIeエンドポイントデバイスにアクセスするためのインターフェースをプリセットしている。上層アプリケーションモジュールがPCIeエンドポイントデバイスに対するアクセス要求を生成するとき、PCIeエンドポイントデバイスのドライブモジュールはHOSを起動させて、HOSはプリセットされたアクセスインターフェースに従って動作命令を生成し、動作命令は、コンピュータシステム内でアクセスプロキシを使用することによって、アクセスされるべきPCIeエンドポイントデバイスにアクセスするようにCPUに命令する。
【0054】
S502:CPUは、動作命令に従って、PCIeエンドポイントデバイスにアクセスするようにアクセスプロキシに命令するアクセス要求をアクセスプロキシに送信する。
【0055】
S503:アクセスプロキシは、CPUによって送信されたアクセス要求を受信した後で、アクセス要求の応答メッセージをCPUに返す。
【0056】
アクセス要求の応答メッセージは、確認応答、拒絶応答、または失敗応答であってよい。しかし、何の種類の応答メッセージであれ、このメッセージは、CPUによって送信されたアクセス要求が受信されていることをCPUに知らせる。CPUは、応答メッセージを受信した後で、現在のタスクが完了していると判断し、そのタスクに関して開始されたタイマを停止することができる。このようにして、CPUのタスクタイムアウト停止機構は正常に保たれる。
【0057】
このプロセスでは、CPUは、アクセスされるべきPCIeエンドポイントデバイスに直接的にアクセスせず、アクセスプロキシを使用することによってアクセスを完了する。アクセスプロキシは、PCIeエンドポイントデバイスの異常なオフラインによってもたらされる影響を分離することが可能であり、アクセスプロキシはアクセス要求の応答メッセージをCPUに返し、その結果、CPU上にキャッシュされたタスクがタイムアウトにより蓄積せず、それによって、CPUに関するMCEリセットを回避する。
【0058】
さらに、
図6に示されるように、本発明の別のプロセス実施形態では、アクセスプロキシがPCIeエンドポイントデバイスにアクセスするためのプロセスは以下を含む。
【0059】
S601〜S603:これらのステップはステップS501〜S503と同じであり、したがって、本明細書でさらなる詳細は提供されない。
【0060】
S604:アクセスプロキシは、CPUからのアクセス要求に従って、PCIeエンドポイントデバイスに対するアクセス動作を開始する。
【0061】
S605:アクセスプロキシは、PCIeエンドポイントデバイスに対して開始されたアクセス動作が成功裏に実行されたかどうかを判断し、アクセス動作が成功した場合、ステップ606を実行し、アクセス動作が失敗した場合、ステップ608を実行する。
【0062】
S606:アクセスプロキシはアクセス完了の第1の通知メッセージをCPUに送信する。
【0063】
S607:CPUは、第1の通知メッセージを受信した後で、アクセスの結果を獲得する。
【0064】
CPUは、アクセス結果に従って、アクセスの完了を上層モジュールにさらに通知することができる。
【0065】
S608:アクセスプロキシはアクセス失敗の第2の通知メッセージをCPUに送信する。
【0066】
S609:CPUは、第2の通知メッセージを受信した後で、アクセス失敗に関する後続処理を実行する。
【0067】
詳細には、アクセス失敗に関する後続処理は、以下、すなわち、アクセスプロキシがPCIeエンドポイントデバイスにアクセスするのに失敗した理由を判断するステップと、アクセス失敗の理由がアクセスされるべきPCIeエンドポイントデバイスが異常にオフラインであるためである場合、CPUによって、PCIeエンドポイントデバイスに対するアクセスを停止するステップと、アクセス失敗の理由が、アクセスプロキシが失敗したことである場合、CPUによって、アクセスプロキシをリセットするか、またはアクセスプロキシの失敗を是正するために、アクセスプロキシが失敗したことを示す通知を送信するステップとを含む。
【0068】
PCIeエンドポイントデバイスに対するアクセスを停止した後で、CPUは、PCIeエンドポイントデバイスに対するアクセスを停止することを上層モジュールにさらに通知することができる。
【0069】
このプロセスは、本発明のこの実施形態において、PCIeエンドポイントデバイスにアクセスするためのある方法を説明する。この方法では、アクセスプロキシは、CPUの代わりに、PCIeエンドポイントデバイスにアクセスして、アクセス要求の応答メッセージをCPUに返し、それによって、CPUによって引き起こされるMCEエラーによって生じるシステム全体のリセットを回避する。さらに、アクセスプロキシがPCIeエンドポイントデバイスにアクセスするのに失敗したとき、アクセスプロキシはアクセス失敗のメッセージをCPUに通知する。CPUは、障害診断を実行し、アクセス失敗がアクセスされるべきPCIeエンドポイントデバイスの異常なオフラインによって生じたと判断したとき、アクセスされるべきPCIeエンドポイントデバイスに対するアクセスを停止し、それによって、システムが成功しえない、繰り返されるアクセスを実行し続けるときに引き起こされるリソースの浪費を回避する。
【0070】
図3または
図4に示されるコンピュータシステムの実施形態の組合せにおいて、DMAエンジンを使用することによってアクセスプロキシが実施されるとき、上層アプリケーションモジュールは、SSDに関する読取り動作要求を生成し、以下を含めて、特定のアクセスプロセスは
図7に示される。
【0071】
S701:コンピュータシステム内でCPUは動作命令を取得し、動作命令はアクセスインターフェースとアクセスコンテンツとを搬送し、アクセスインターフェースはDMAエンジンを指摘し、アクセスコンテンツはアクセスオブジェクトがSSDであり、そのアクセスが読取り動作であることを示し、かつ読取り動作の発信源アドレスを示し、アクセスコンテンツは読取り動作の長さをさらに示すことが可能であるが、一般に、読取り動作の長さはシステム内のデフォルト長さを条件としうる。
【0072】
上流エンドポイントがSSDデバイスに関する読取り動作要求を生成するとき、SSDデバイスのドライブモジュールは上流エンドポイントによる起動命令を受信して、プリセットされたアクセスインターフェースに従って、PCIeエンドポイントデバイスにアクセスするための動作命令を生成する。
【0073】
ドライブモジュールによってCPUに送信される動作命令の詳細な実装方法は、さらに別の様式であってよい。例えば、動作命令は、アクセスオブジェクトがSSDであり、そのアクセスが読取り動作であることを示し、かつ読取り動作の開始アドレスを示す表示を搬送し、加えて、DMAエンジンを動作させることによってSSDに対するアクセスが実施されるように命令するための1つの表示が動作命令内に新たに追加される。
【0074】
S702:CPUは、動作命令に従ってデータ移動要求をDMAエンジンに送信し、データ移動要求はPCIeエンドポイントデバイスのメモリ内の特定データをコンピュータシステムのメモリに移動するようにDMAエンジンに命令するために使用される。
【0075】
詳細には、SSDのドライブモジュールの動作命令を獲得した後で、CPUは、読取り動作の宛先アドレスに関してコンピュータシステムのメモリを適用し、読取り動作の宛先アドレスを獲得した後で、データ移動要求をDMAエンジンに送信し、読取り動作の長さのデータを読取り動作の発信源アドレスから読取り動作の宛先アドレスに移動するようにDMAエンジンに命令するために、データ移動要求は、読取り動作の発信源アドレス、宛先アドレス、および長さを示す。
【0076】
S703:DMAエンジンは、CPUのデータ移動要求を受信した後で、データ移動要求の応答メッセージをCPUに返し、CPUは、CPU内にキャッシュされた他のメッセージが、累積により、CPUにMCEリセットを生成させないことを確実にするために、データ移動要求の応答メッセージを受信した後で、データ移動要求に頼るタイムアウトを行わない。
【0077】
S704:DMAエンジンはSSDデバイスに対して読取り要求を開始し、読取り要求は読取り動作の発信源アドレスを搬送し、読取り動作は、読取り動作の発信源アドレスに対応するレジスタの値がDMAエンジンのキャッシュ内に読み取られることを要求するために使用される。
【0078】
S705:DMAエンジンは、読取り要求が成功裏に実行されたかどうかを判断し、読取り要求が成功裏に実行された場合、ステップ706を実行し、読取り要求の実行が失敗した場合、ステップ709を実行する。
【0079】
S706:DMAエンジンは、書込み要求に従って、その独自のキャッシュ内のデータを読取り動作の宛先アドレス内に書き込む。
【0080】
S707:DMAエンジンは第1の通知メッセージをCPUに送信し、第1の通知メッセージは、詳細には、アクセスが完了したことをCPUに通知するための第1のMSI割込み(Message Signaled Interrupts、MSI)であってよい。
【0081】
S708:CPUは、第1のMSI割込みメッセージを受信した後で、読取り動作の宛先アドレスからデータを読み取り、アクセスが完了したことをSSDデバイスのドライブモジュールに通知することができる。
【0082】
S709:DMAエンジンは第2の通知メッセージをCPUに送信し、第2の通知メッセージは、詳細には、アクセスが失敗したことをCPUに通知するための第2のMSI割込みであってよい。
【0083】
S710:CPUは、第2のMSI割込みメッセージを受信した後で、アクセス失敗に関する後続処理を実行する。
【0084】
詳細には、アクセス失敗の後続処理は、以下、すなわち、DMAエンジンに関する診断を開始して、DMAエンジンに障害があるかどうかを判断するステップと、
DMAエンジンに障害がある場合、DMAエンジンの障害を回復するために、CPUによってDMAエンジンをリセットするか、またはDMAエンジンに障害があることを示す通知を送信するステップと、
DMAエンジンに障害がない場合、アクセス失敗の原因が、SSDデバイスが異常にオフラインであるためであると判断し、CPUによって、SSDデバイスに対するアクセスを停止するステップとを含むことが可能である。
【0085】
さらに、CPUは、SSDデバイスに対するアクセスを停止するようにSSDデバイスのドライブモジュールにさらに命令することができる。
【0086】
別の態様では、
図3または
図4に示されるコンピュータシステムの実施形態に関して、DMAエンジンを使用することによってアクセスプロキシが実施され、上層アプリケーションモジュールがSSDに関する書込み動作要求を生成するときの、以下を含む特定のアクセスプロセスが
図8に示される。
【0087】
S801:CPUはSSDのドライブモジュールによって生成された動作命令を獲得し、動作命令はアクセスインターフェースとアクセスコンテンツとを搬送し、アクセスインターフェースはDMAエンジンを指摘し、アクセスコンテンツは、アクセスオブジェクトがSSDデバイスであり、そのアクセスが書込み動作であることを示し、かつ書込み動作の発信源アドレスおよび宛先アドレスを示す。
【0088】
ドライブモジュールによってCPUに送信された動作命令の詳細な実装方法はさらに、別の様式であってよい。例えば、動作命令は、アクセスオブジェクトがSSDであり、そのアクセスが書込み動作であることを示し、かつ書込み動作の発信源アドレスおよび宛先アドレスを示す表示を搬送し、加えて、SSDに対するアクセスがDMAエンジンを動作させることによって実施されるように命令するための1つの表示が動作命令内に新たに追加される。
【0089】
S802:CPUはSSDのドライブモジュールの動作命令に従ってデータ移動要求をDMAエンジンに送信し、データ移動要求は、コンピュータシステムのメモリ内の特定データをPCIeエンドポイントデバイスのメモリに移動させるようにDMAエンジンに命令するために使用される。
【0090】
詳細には、CPUは、SSDのドライブモジュールの動作命令を獲得した後で、データ移動要求をDMAエンジンに送信し、データ移動要求は、書込み動作の長さのデータを書込み動作の発信源アドレスから書込み動作の宛先アドレスに移動するようにDMAエンジンに命令するために、書込み動作の発信源アドレス、宛先アドレス、および長さを示す。
【0091】
S803:DMAエンジンは、CPUのデータ移動要求を受信した後で、データ移動要求の応答メッセージをCPUに返す。
【0092】
S804:DMAエンジンは、発信源アドレスのデータをDMAエンジンのキャッシュ内に読み取るために、書込み動作の発信源アドレスに対して読取り要求を開始する。
【0093】
S805:DMAエンジンは、発信源アドレスのデータがその独自のキャッシュ内に読み取られた後で、SSDデバイスに対する書込み要求を開始し、書込み要求は、書込み動作の宛先アドレスを搬送し、書込み要求は、DMAエンジンのキャッシュ内のデータを宛先アドレスに対応するレジスタ内に書き込むために使用される。
【0094】
S806:DMAエンジンは、書込み要求が成功裏に実行されたかどうかを判断し、書込み要求が成功裏に実行された場合、ステップ807を実行し、書込み要求の実行が失敗した場合、ステップ809を実行する。
【0095】
S807:DMAエンジンは、アクセスが完了したことをCPUに通知するために、CPUに対して第1のMSI割込み(Message Signaled Interrupts、MSI)を開始する。
【0096】
S808:CPUは、第1のMSI割込みメッセージを受信した後で、書込み動作が完了したことを学習し、アクセスが完了したことをSSDデバイスのドライブモジュールにさらに通知することができる。
【0097】
S809:DMAエンジンは、アクセスが失敗したことをCPUに通知するために、CPUに対して第2のMSI割込みを開始する。
【0098】
S810:CPUは、第2のMSI割込みメッセージを受信した後で、アクセス失敗に関する後続処理を実行する。
【0099】
詳細には、アクセス失敗の後続処理は、以下、すなわち、DMAエンジンに障害があるかどうかを判断するためにDMAエンジンに関する診断を開始するステップと、
DMAエンジンに障害がある場合、DMAエンジンの障害を回復するために、CPUによって、DMAエンジンをリセットするか、またはDMAエンジンに障害があることを示す通知を送信するステップと、
DMAエンジンに障害がない場合、アクセス失敗の原因が、SSDデバイスが異常にオフラインであるためであると判断し、CPUによって、SSDデバイスに対するアクセスを停止するステップを含むことが可能である。
【0100】
さらに、CPUは、SSDデバイスに対するアクセスを停止するようにSSDデバイスのドライブモジュールにさらに命令することが可能である。
【0101】
図7および
図8に示されるプロセスは、本発明の実施形態において、DMAエンジンがSSDデバイス上で読取りまたは書込みを完了するための方法プロセスを説明する。読取り方法または書込み方法において、DMAエンジンは、CPUの代わりに、PCIeエンドポイントデバイスにアクセスして、アクセス要求の応答メッセージをCPUに返し、その結果、CPUはMCEエラーを生成せず、システム全体のリセットが回避される。さらに、DMAエンジンがデータをSSDデバイスから移動するのに失敗したとき、DMAエンジンは、アクセス失敗のメッセージをCPUに通知し、CPUは障害診断を実行し、SSDデバイスがシステムから直接的に除去されるため、またはSSDデバイスに障害があるためにアクセス失敗が生じたと判断するとき、SSDデバイスに対するアクセスを停止し、それによって、システムが成功しえない、繰り返されるアクセスを実行し続けるときに引き起こされるリソースの浪費を回避する。
【0102】
加えて、本発明のこの実施形態において、CPUがPCIeエンドポイントデバイスにアクセスするためのある方法は、PCIeエンドポイントデバイスに対応するドライブモジュールもしくはホストオペレーティングシステムをアップグレードまたは改善することによって変更可能である。CPUがPCIeエンドポイントデバイスにアクセスするための方法を変更するためにPCIeエンドポイントデバイスに対応するドライブモジュールが使用される場合、以下のプロセスを含めることが可能である。
【0103】
S901:PCIeエンドポイントデバイスのドライブモジュールは上層アプリケーションモジュールの起動命令を受信し、起動命令は、PCIeエンドポイントデバイスにアクセスする必要があることを示す。
【0104】
S902:PCIeエンドポイントデバイスに対応するドライブモジュールは、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成し、動作命令は、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにCPUに命令するために使用される。
【0105】
ホストオペレーティングシステムが、CPUがPCIeエンドポイントデバイスにアクセスするための方法を変更するように構成される場合、以下のプロセスを含めることが可能である。
【0106】
S1001:PCIeエンドポイントデバイスに対応するドライブモジュールは、上層アプリケーションモジュールの起動命令を受信し、起動命令はPCIeエンドポイントデバイスにアクセスする必要があることを示す。
【0107】
S1002:PCIeエンドポイントデバイスに対応するドライブモジュールはホストオペレーティングシステムを起動させ、起動命令はPCIeエンドポイントデバイスにアクセスする必要があることを示す。
【0108】
S1003:ホストオペレーティングシステムは、アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って動作命令を生成し、動作命令は、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにCPUに命令するために使用される。
【0109】
本発明のある実施形態のある装置
図11に示されるように、本発明のある実施形態で提供される、ペリフェラル・コンポーネント・インターコネクト・エクスプレスPCIeエンドポイントデバイスにアクセスするための装置は、
PCIeエンドポイントデバイスにアクセスする必要があることを示す起動命令を受信するように構成された受信モジュール1101と、
アクセスプロキシを指摘する、PCIeエンドポイントデバイスにアクセスするためにプリセットされたインターフェースに従って、PCIeエンドポイントデバイスにアクセスするための動作命令を生成するように構成された生成モジュール1102であって、動作命令が、アクセスプロキシを使用することによってPCIeエンドポイントデバイスにアクセスするようにCPUに命令するために使用される、生成モジュール1102と
を含む。
【0110】
詳細には、アクセス装置は、PCIeエンドポイントデバイスのドライブモジュールまたはコンピュータシステムのホストオペレーティングシステムであってよい。
【0111】
図12は、本発明のある実施形態による、あるコンピュータの構成組成図である。本発明のこの実施形態のこのコンピュータは、
プロセッサ1201と、メモリ1202と、システムバス1204と、通信インターフェース1205とを含むことが可能である。CPU1201、メモリ1202、および通信インターフェース1205は、システムバス1204を使用することによって、互いの間の通信を接続および完了する。
【0112】
プロセッサ1201は、シングルコア中央処理装置もしくはマルチコア中央処理装置、または特定用途向け集積回路であってよく、あるいは本発明のこの実施形態において、1つまたは複数の集積回路として構成される。
【0113】
メモリ1202は、高速RAMメモリであってよく、または少なくとも1つの磁気ディスクメモリなど、不揮発性メモリ(non-volatile memory)であってよい。
【0114】
メモリ1202は、コンピュータ実行命令1203を記憶するように構成される。詳細には、コンピュータ実行命令1203はプログラムコードを含むことが可能である。
【0115】
コンピュータが実行しているとき、プロセッサ1201はコンピュータ実行命令1203を実行し、
図5から
図10のうちのいずれか1つに示された方法プロセスを実行することが可能である。
【0116】
PCIeエンドポイントデバイスにアクセスするためのコンピュータシステム
PCIeエンドポイントデバイスがコンピュータシステムから除去されるとき、PCIeエンドポイントデバイスを後でコンピュータシステムに再度挿入することができる。加えて、新しいPCIeエンドポイントデバイスが実行状態のコンピュータシステムに接続する必要があるという条件も存在する。例えば、SSDデバイスの人気として、ユーザがSSDデバイスを直接的に挿入または除去するという現象がますます頻繁に生じている。先行技術では、いずれかのPCIeエンドポイントデバイスの電源がオンにされて、システムに接続されるとき、CPUはPCIeエンドポイントデバイスに関して走査およびリソース割振りプロセスを開始し、CPUが電源が新たにオンにされたPCIeエンドポイントデバイスを走査するプロセスにおいて、PCIeエンドポイントデバイスがシステムから直接的に除去された場合、CPUはMCEエラーを報告することが可能であり、これはシステムリセットを引き起こす。この問題を回避するために、本発明のこの実施形態は、PCIeエンドポイントデバイスの電源が新たにオンにされて、システムに接続したとき、CPUが、電源が新たにオンにされたそのPCIeエンドポイントデバイスを走査する必要またはリソースを割り振る必要がないように、PCIeエンドポイントデバイスにリソースを割り振るための新しい解決策を提案する。
【0117】
コンピュータシステムを開始する間、基本入出力システム(Basic Input-Output System、BIOS)はシステム内のそれぞれのデバイスに関するリソースを確保する必要がある。PCIeエンドポイントデバイスの場合、BIOSはPCIeエンドポイントデバイスにアクセスするためのそれぞれのポートを走査する。走査によってPCIeエンドポイントデバイスを見出したとき、BIOSは、PCIeエンドポイントデバイスの対応するレジスタを読み取り、PCIeエンドポイントデバイスの要件に従って、それに応じて、リソースを確保し、例えば、バスリソースとメモリアドレスリソースとを確保する。詳細には、本発明のこの実施形態で説明される、PCIeエンドポイントデバイスにアクセスするためのポートは、PCIe交換器のダウンリンクポートまたはシステム内のノースブリッジのダウンリンクポートであってよい。
【0118】
本発明のこの実施形態で提供される、PCIeエンドポイントデバイスにリソースを割り振るための解決策では、コンピュータシステムのBIOSに関するリソース確保方法は先行技術と異なる。コンピュータシステムを開始する間、BIOSは、走査によって実際に見出されたPCIeエンドポイントデバイスの実際の要求に従ってリソースを確保せず、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに関して特定割合のリソースを確保し、特定割合はPCIeエンドポイントデバイスの必要とされるリソース量以上であり、優先的に、特定割合は最大リソース要求量を有するタイプのPCIeエンドポイントデバイスのリソース要求量でありうる。例えば、BIOSは、コンピュータシステム内でPCIeエンドポイントデバイスにアクセスするためのそれぞれのポートを走査し、走査によってPCIeエンドポイントデバイスが見出されたかどうかにかかわらず、かつ走査によってどのタイプのPCIeエンドポイントデバイスが見出されたかにかかわらず、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートが、最大リソース要求量を有するタイプのPCIeエンドポイントデバイスによって後でアクセスされうることを指定する。現在のシステム内で10のタイプのPCIeエンドポイントデバイスを使用することが可能であり、最大リソース要求量を有するPCIeエンドポイントデバイスが、事前にフェッチできない10Mのメモリリソースと3個のPCIeバスとを必要とするSSDデバイスである場合、BIOSは、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに関して、事前にフェッチできない10Mのリソースと3個のPCIeバスリソースとを確保する。
【0119】
次に、BIOSがリソースを確保した後で、コンピュータシステムのPCIe管理モジュールは、コンピュータシステム内の1つのCPUとPCIe交換器とによって管理されたすべてのPCIeエンドポイントデバイスは、PCIeフィールドを構成するのを可能にし、かつPCIeフィールドに関して対応するPCIeツリーを構成し、PCIeツリーは、PCIeフィールド内のそれぞれのPCIeエンドポイントデバイスからCPUまでのそれぞれの層の接続関係と、それぞれのPCIeエンドポイントデバイスのリソース構成条件とを記述するために使用される。BIOSはPCIeエンドポイントデバイスにアクセスするためのそれぞれのポートに関して特定割合のリソースを確保しているため、PCIeエンドポイントデバイスにアクセスするためのそれぞれのポートをロードするとき、PCIe管理モジュールは、ポートのPCIeエンドポイントデバイスの実際のリソース要求量を走査せず、BIOSのリソース確保条件に従ってリソースを割り振り、すなわち、BIOSによって確保された特定割合のリソースをPCIeエンドポイントデバイスにアクセスするためのそれぞれのポートを割り振り、特定割合のリソースを割り振る条件をPCIeツリー内に記録する。
【0120】
さらに、PCIeエンドポイントデバイスに障害があるか、またはPCIeエンドポイントデバイスがコンピュータシステムからオフラインであるとき、PCIe管理モジュールは、PCIeエンドポイントデバイスがオフラインであると判断するとき、電源がオフにされたPCIeエンドポイントデバイスに割り振られた特定割合のリソースを解放しない。加えて、PCIeツリーのアーキテクチャは変更されない状態に留まり、すなわち、オフラインPCIeエンドポイントデバイスの接続関係およびリソース構成条件はPCIeツリー内に保持される。このように、PCIeエンドポイントデバイスのリソースと接続関係とがPCIeフィールド内で構成されているため、PCIeエンドポイントデバイスの電源がオンにされて、PCIeフィールドにアクセスするとき、PCIe管理モジュールは、PCIeエンドポイントデバイスの電源がオンにされ、PCIeエンドポイントデバイスがコンピュータシステムのPCIeフィールドに対するアクセスを完了したことを対応するドライブモジュールに通知する。この解決策では、PCIeエンドポイントデバイスの電源がオンにされるとき、CPUは、PCIeエンドポイントデバイスを走査する必要がなく、それによって、PCIeエンドポイントデバイスがコンピュータシステムにアクセスするときに生じる可能性があるMCEエラーによってシステム全体のリセットが引き起こされるのを回避する。
【0121】
本発明のそれぞれの態様またはそれぞれの態様の可能な実装様式は、詳細には、システム、方法、またはコンピュータプログラム製品として実施されうる点を当業者は理解されよう。したがって、本発明のそれぞれの態様またはそれぞれの態様の可能な実装様式は、本明細書で集合的に「回路」、「モジュール」、または「システム」と呼ばれる、完全なハードウェア実施形態、(ファームウェア、常駐ソフトウェアなどを含めて)完全なソフトウェア実施形態、またはソフトウェアとハードウェアとを組み合わせた実施形態の形式を使用することが可能である。加えて、本発明のそれぞれの態様またはそれぞれの態様の可能な実装様式は、コンピュータプログラム製品の形式を使用することが可能であり、コンピュータプログラム製品は、コンピュータ可読媒体内のコンピュータ可読プログラムコードを指す。
【0122】
コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読メモリ媒体であってよい。コンピュータ可読メモリ媒体は、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、デバイス、または装置、あるいはランダムアクセスメモリ(RAM)、読出し専用メモリ、取消可能プログラマブル読出し専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ、および携帯用読出し専用メモリ(CD-ROM)など、それらの任意の適切な組合せを含むが、これらに限定されない。
【0123】
コンピュータのプロセッサは、プロセッサが流れ図のそれぞれのステップまたはそれぞれのステップの組合せに規定された機能動作を実行することができ、ブロック図内のそれぞれのブロックまたはブロックの組合せに規定された機能動作を実施する装置が生成されるように、コンピュータ可読媒体内に記憶されたコンピュータ可読プログラムコードを読み取る。
【0124】
コンピュータ可読プログラムコードを、ユーザのコンピュータ上で完全に実行すること、ユーザのコンピュータ上で部分的に実行すること、独立したソフトウェアパッケージとして機能するとき、ユーザのコンピュータ上で部分的に実行し、かつ遠隔コンピュータ上で部分的に実行することが可能であり、または遠隔コンピュータ上もしくはサーバ上で完全に実行することも可能である。いくつかの代替の実装形態解決策では、流れ図のそれぞれのステップ内またはブロック図のそれぞれのブロック内に示された機能は、その流れ図または図に示された順序で生じなくてよい点に留意されたい。例えば、関連する機能に応じて、示される2つのステップもしくは2つのブロックを実際には同時に次々に実行することが可能であり、またはこれらのブロックは、時には逆の順序で実行される。
【0125】
本明細書で開示された実施形態で説明された例と組み合わせて、ユニットおよびアルゴリズムステップを電子ハードウェア、またはコンピュータソフトウェアと電子ハードウェアの組合せによって実施できることを当業者は認識されよう。これらの機能がハードウェアとして実行されるか、またはソフトウェアとして実行されるかは、特定のアプリケーションおよび技術的解決策の設計制約条件に依存する。当業者はそれぞれの特定のアプリケーションに関して説明された機能を実施するために異なる方法を使用することができるが、その実装形態は本発明の範囲を超えるものと見なすべきではない。
【0126】
前述の説明は、本発明の特定の実施形態に過ぎず、本発明の保護範囲を限定することが意図されない。本発明で開示された技術範囲内で当業者によって容易に考え出されるいずれの改変または置換も本発明の保護範囲に包含されるべきである。したがって、本発明の保護範囲は、請求項の保護範囲を条件とすべきである。