(58)【調査した分野】(Int.Cl.,DB名)
前記メモリコントローラが、前記メディアコントローラに第2の読取りコマンドを送ることであって、前記第2の読取りコマンドが、第2のIDと、第2のアドレスと、第2の長さとを搬送し、前記第2の長さが、前記第2の読取りコマンドによって前記NVMから読み取られるべき第2のデータのサイズを示す、送ること、および
前記第3の長さのデータブロックをフェッチするために、前記メディアコントローラに第2のsendコマンドを送ることであって、前記第2の長さが前記第3の長さに等しい、送ること
を行うようにさらに構成され、
前記メディアコントローラが、
前記第2のsendコマンドに応答して、前記メモリコントローラに、前記第2のアドレスに対応する前記第2のデータと、前記第2のデータのメタデータとを送ることであって、前記第2のデータの前記メタデータが、前記第2のIDを搬送する、送ること
を行うようにさらに構成される、請求項1に記載のコンピュータシステム。
前記メモリコントローラに第1のアクセス要求を送ることであって、前記第1のアクセス要求が、前記第1のIDと、前記第1のアドレスと、前記第1の長さとを備える、送ることを行うように構成されたプロセッサ
をさらに備え、
前記メモリコントローラが、前記第1のアクセス要求に基づいて、前記メディアコントローラに前記第1の読取りコマンドを送るようにさらに構成される、請求項1から4のいずれか一項に記載のコンピュータシステム。
前記メモリコントローラによって、前記メディアコントローラに第2の読取りコマンドを送るステップであって、前記第2の読取りコマンドが、第2のIDと、第2のアドレスと、第2の長さとを搬送し、前記第2の長さが、前記第2の読取りコマンドによって前記NVMから読み取られるべき第2のデータのサイズを示す、ステップと、
前記メモリコントローラによって、前記第3の長さのデータブロックをフェッチするために、前記メディアコントローラに第2のsendコマンドを送るステップであって、前記第2の長さが前記第3の長さに等しい、ステップと、
前記メモリコントローラによって、前記第2のsendコマンドに応答して、前記メディアコントローラによって返される、前記第2のアドレスに対応する前記第2のデータと、前記第2のデータのメタデータとを受信するステップであって、前記第2のデータの前記メタデータが、前記第2のIDを備える、ステップと
をさらに含む、請求項10に記載のメモリアクセス方法。
前記メディアコントローラによって、前記NVMから読み取られた前記第1のデータを、一時的に記憶するために、前記少なくとも2つのデータサブブロックに分割し、前記少なくとも2つのデータサブブロックの前記メタデータを記録するステップ
をさらに含む、請求項10または11に記載のメモリアクセス方法。
各データサブブロックのメタデータが、送信識別子をさらに備え、前記送信識別子が、前記データサブブロックが前記第1のデータの最後の送信されるべきデータサブブロックであるか否かを示すために使用され、
前記方法が、
前記メディアコントローラによって、前記第2のデータが、前記コンピュータシステムのバッファにおける前記第1のデータの第1のデータサブブロックの後に位置し、前記バッファにおける前記第1のデータの第2のデータサブブロックの前に位置すると決定するステップと、
前記メディアコントローラによって、前記決定に基づいて、前記第1のデータサブブロックの前方で、前記メモリコントローラに前記第2のデータを送るステップであって、前記第1のデータサブブロックの前記メタデータにおける送信識別子が、前記第1のデータサブブロックが前記第1のデータの前記最後の送信されるべきデータサブブロックではないことを示し、前記第2のデータサブブロックの前記メタデータにおける送信識別子が、前記第2のデータサブブロックが前記第1のデータの前記最後の送信されるべきデータサブブロックであることを示す、ステップと
をさらに含む、請求項11または12に記載のメモリアクセス方法。
前記メモリコントローラによって、前記コンピュータシステムのプロセッサから第1のアクセス要求を受信するステップであって、前記第1のアクセス要求が、前記第1のIDと、前記第1のアドレスと、前記第1の長さとを備える、ステップと、
前記メモリコントローラによって、前記第1のアクセス要求に基づいて、前記メディアコントローラに前記第1の読取りコマンドを送るステップと
をさらに含む、請求項10から13のいずれか一項に記載の方法。
前記メモリコントローラから、第2のIDと、第2のアドレスと、第2の長さとを備える第2の読取りコマンドを受信するステップであって、前記第2の長さが、前記第2の読取りコマンドによって前記NVMから読み取られるべき第2のデータのサイズを示す、ステップと、
前記第3の長さのデータブロックをフェッチするために、前記メモリコントローラから、第2のsendコマンドを受信するステップであって、前記第2の長さが前記第3の長さに等しい、ステップと、
前記第2のsendコマンドに応答して、前記メモリコントローラに、前記第2のアドレスに対応する前記第2のデータと、前記第2のデータのメタデータとを送るステップであって、前記第2のデータの前記メタデータが、前記第2のIDを備える、ステップと
をさらに含む、請求項15に記載の方法。
前記コンピュータシステムが、バッファをさらに備え、各データサブブロックの前記メタデータが、送信識別子をさらに備え、前記送信識別子が、前記データサブブロックが前記第1のデータの最後の送信されるべきデータサブブロックであるか否かを示すために使用され、
前記方法が、
前記第2のデータが、前記コンピュータシステムのバッファにおける前記第1のデータの第1のデータサブブロックの後に位置し、前記バッファにおける前記第1のデータの第2のデータサブブロックの前に位置すると決定するステップと、
前記決定に基づいて、前記第1のデータサブブロックの前方で、前記メモリコントローラに前記第2のデータを送るステップであって、前記第1のデータサブブロックの前記メタデータにおける送信識別子が、前記第1のデータサブブロックが前記第1のデータの前記最後の送信されるべきデータサブブロックではないことを示し、前記第2のデータサブブロックの前記メタデータにおける送信識別子が、前記第2のデータサブブロックが前記第1のデータの前記最後の送信されるべきデータサブブロックであることを示す、ステップと
をさらに含む、請求項16または17に記載の方法。
メモリアクセス方法であって、前記方法がコンピュータシステムに適用され、前記コンピュータシステムが、メモリコントローラと、メディアコントローラと、前記メディアコントローラに接続された不揮発性メモリNVMとを備え、前記方法が、
前記メモリコントローラによって、前記メディアコントローラに第1の読取りコマンドを送るステップであって、前記第1の読取りコマンドが、第1のIDと、第1のアドレスと、第1の長さとを搬送し、前記第1のIDが、前記第1の読取りコマンドの識別子であり、前記第1の長さが、前記第1の読取りコマンドによって読み取られるべき第1のデータのサイズを示すために使用される、ステップと、
前記メモリコントローラによって、前記メディアコントローラに少なくとも2つのsendコマンドを送るステップであって、前記少なくとも2つのsendコマンドが、第3の長さの少なくとも2つのデータを取得するために使用され、前記第3の長さが前記第1の長さ未満である、ステップと、
前記メモリコントローラによって、前記第3の長さの少なくとも2つのデータサブブロックと、前記少なくとも2つのデータサブブロックのメタデータとを受信するステップであって、前記少なくとも2つのデータサブブロックおよび前記メタデータが、前記少なくとも2つのsendコマンドに応答して、前記メディアコントローラによって送られ、前記少なくとも2つのデータサブブロックが、前記第1のアドレスに基づいて、前記メディアコントローラによって前記NVMから取得され、各データサブブロックのメタデータが、前記第1のIDとロケーション識別子とを備え、前記ロケーション識別子が、前記第1のデータにおける対応するデータサブブロックのロケーションを示すために使用される、ステップと、
前記少なくとも2つのデータサブブロックの前記メタデータにおけるロケーション識別子に基づいて、前記少なくとも2つのデータサブブロックを前記第1のデータへと結合するステップと
を含む、メモリアクセス方法。
前記メモリコントローラによって、前記メディアコントローラに第2の読取りコマンドを送るステップであって、前記第2の読取りコマンドが、第2のIDと、第2のアドレスと、第2の長さとを搬送し、前記第2の長さが、前記第2の読取りコマンドによって読み取られるべき第2のデータのサイズを示すために使用される、ステップと、
前記メモリコントローラによって、前記メディアコントローラに第2のsendコマンドを送るステップであって、前記第2のsendコマンドが、前記第3の長さのデータブロックを取得するために使用され、前記第2の長さが前記第3の長さに等しい、ステップと、
前記メモリコントローラによって、前記第2のsendコマンドに基づいて、前記メディアコントローラによって返される、前記第2のデータと、前記第2のデータのメタデータとを受信するステップであって、前記第2のデータが、前記第2のアドレスに基づいて、前記メディアコントローラによって前記NVMから取得され、前記第2のデータの前記メタデータが、前記第2のIDを搬送する、ステップと
をさらに含む、請求項20に記載の方法。
コンピュータ可読記憶媒体であって、1つまたは複数のコンピュータ実行可能命令を備え、前記1つまたは複数のコンピュータ実行可能命令がコンピュータ上で実行されるとき、前記コンピュータが、請求項10から14または15から19のいずれか一項に記載の方法を行う、コンピュータ可読記憶媒体。
【発明の概要】
【課題を解決するための手段】
【0004】
本出願において提供するメモリアクセス技術およびコンピュータシステムは、システム性能を向上させるために、バス帯域幅を浪費することなしに、異なる長さをもつデータを
読み取るための読取りコマンドをサポートすることができる。
【0005】
第1の態様によれば、本出願は、コンピュータシステムを提供する。コンピュータシステムは、メモリコントローラと、メディアコントローラと、メディアコントローラに接続された不揮発性メモリNVMとを含む。NVMは、データを記憶するように構成される。メモリコントローラは、メディアコントローラに接続される。メモリコントローラが、メディアコントローラに第1の読取りコマンドを送った後、メディアコントローラは、第1の読取りコマンドにおける第1のアドレスに基づいて、NVMから第1のデータを読み取り得る。第1の読取りコマンドは、第1のIDと、第1のアドレスと、第1の長さとを搬送し、第1のIDは、第1の読取りコマンドの識別子であり、第1の長さは、第1の読取りコマンドによって読み取られるべき第1のデータのサイズを示すために使用される。メモリコントローラは、メディアコントローラに少なくとも2つのsendコマンドを送り、そこで、少なくとも2つのsendコマンドが、第3の長さの少なくとも2つのデータを取得するために使用され、第3の長さが第1の長さ未満である。メディアコントローラは、少なくとも2つのsendコマンドに応答して、メモリコントローラに、第3の長さの少なくとも2つのデータサブブロックと、少なくとも2つのデータサブブロックのメタデータとを返す。メタデータは、第1のIDとロケーション識別子とを含み、ロケーション識別子は、第1のデータにおける対応するデータサブブロックのオフセットを示すために使用される。メモリコントローラは、少なくとも2つのデータサブブロックのメタデータにおけるロケーション識別子に基づいて、少なくとも2つのデータサブブロックを第1のデータへと結合する。
【0006】
比較的大きいデータを取得するためのアクセス要求を受信するとき、本出願において提供するコンピュータシステムは、バス帯域幅の浪費を低減し、システム性能を向上させるために、読取りコマンドを追加することなしに、システムのアクセス要求をサポートし得る。
【0007】
実際の適用例では、ロケーション識別子は、少なくとも1ビットである。メモリコントローラは、NVDIMM-Pプロトコルに準拠することによって、メディアコントローラと通信する。
【0008】
第1の態様を参照すると、第1の可能な実装形態では、メモリコントローラは、メディアコントローラに第2の読取りコマンドを送ることであって、そこで、第2の読取りコマンドが、第2のIDと、第2のアドレスと、第2の長さとを搬送し、第2の長さが、第2の読取りコマンドによって読み取られるべき第2のデータのサイズを示すために使用される、送ることを行うようにさらに構成される。メディアコントローラは、第2のアドレスに基づいて、NVMから第2のデータを取得するようにさらに構成される。メモリコントローラは、メディアコントローラに第2のsendコマンドを送ることであって、そこで、第2のsendコマンドが、第3の長さのデータブロックを取得するために使用され、第2の長さが第3の長さに等しい、送ることを行うようにさらに構成される。メディアコントローラは、第2のsendコマンドに応答して、メモリコントローラに、第2のデータと、第2のデータのメタデータとを返すことであって、そこで、第2のデータのメタデータが、第2のIDを搬送する、返すことを行うようにさらに構成される。
【0009】
本出願において提供するコンピュータシステムは、読取りコマンドの量を増加させることなしに、およびバス帯域幅を浪費することなしに、異なる長さをもつデータを読み取るための読取り要件をサポートし、それによって、システム性能を向上させることができる。
【0010】
第1の態様、
または第1の態様の第1の可能な実装形態を参照すると、第2の可能な実装形態では、メディアコントローラは、NVMから読み取られた第1のデータを、一時的に記憶するために、少なくとも2つのデータサブブロックに分割し、少なくとも2つのデータサブブロックのメタデータを記録することを行うようにさらに構成される。
【0011】
第1の態様の第1または第2の可能な実装形態を参照すると、第3の可能な実装形態では、各データサブブロックのメタデータは、送信識別子をさらに含み、送信識別子は、データサブブロックが第1のデータの最後の送信されるべきデータサブブロックであるか否かを示すために使用される。コンピュータシステムは、バッファをさらに含み、バッファは、NVMから読み取られた第1のデータの少なくとも2つのデータサブブロックと、第2のデータとを、一時的に記憶するように構成される。メディアコントローラは、第2のデータがバッファにおける第1のデータの第1のデータサブブロックの後に位置し、バッファにおける第1のデータの第2のデータサブブロックの前に位置するとき、第1のデータサブブロックの前方で、メモリコントローラに第2のデータを送るようにさらに構成される。第1のデータサブブロックの送信識別子は、第1のデータサブブロックが、第1のデータの最後の送信されるべきデータサブブロックではないことを示し、第2のデータサブブロックの送信識別子は、第2のデータサブブロックが、第1のデータの最後の送信されるべきデータサブブロックであることを示す。
【0012】
本出願において提供するコンピュータシステムによれば、メディアコントローラによってメモリコントローラに返されるデータサブブロックのメタデータが、
送信識別子を搬送するので、メディアコントローラによってメモリコントローラにデータを返すプロセスにおいて、メモリコントローラにデータサブブロックを送る送信順序が、
送信識別子に基づいて調整され得る。これによって、異なる長さをもつデータを読み取るための読取りコマンドを処理することができるだけでなく、メモリ
コントローラによってデータを受信する際の待機遅延を低減し、それによって、コンピュータシステムの処理効率をさらに向上させることもできる。
【0013】
第1の態様、または第1の態様の第1から第3の可能な実装形態のうちのいずれか1つを参照すると、第4の可能な実装形態では、コンピュータシステムは、プロセッサをさらに含む。プロセッサは、メモリコントローラに第1のアクセス要求を送るように構成される。第1のアクセス要求は、第1のIDと、第1のアドレスと、第1の長さとを含む。メモリコントローラは、第1のアクセス要求に基づいて、メディアコントローラに第1の読取りコマンドを送るようにさらに構成される。可能な実装形態によるコンピュータシステムでは、プロセッサによって送られ、比較的大きいデータを読み取るために使用されるアクセス要求が受信される場合でも、プロセッサによって送られるアクセス要求は、複数の小さいデータのための読取りコマンドに変更されない。したがって、従来技術と比較して、読取りコマンドの量を低減することができ、バス帯域幅を節約し、それによって、コンピュータシステムの性能を向上させることができる。
【0014】
第2の態様によれば、本出願はストレージを提供する。メモリは、不揮発性メモリNVMと、NVMに接続されたメディアコントローラとを含む。NVMは、データを記憶するように構成される。メディアコントローラは、コンピュータシステムにおけるメモリコントローラによって送られた第1の読取りコマンドを受信すること、および、第1の読取りコマンドにおける第1のアドレスに基づいて、NVMから第1のデータを読み取ることを行うように構成される。第1の読取りコマンドは、第1のIDと、第1のアドレスと、第1の長さとを搬送し、第1のIDは、第1の読取りコマンドの識別子であり、第1の長さは、第1の読取りコマンドによって読み取られるべき第1のデータのサイズを示すために使用される。メモリコントローラによって送られた、少なくとも2つのsendコマンドを受信した後、メディアコントローラは、少なくとも2つのsendコマンドに応答して、メモリコントローラに、第3の長さの少なくとも2つのデータサブブロックと、少なくとも2つのデータサブブロックのメタデータとを返す。少なくとも2つのsendコマンドは、第3の長さのデータを取得するために使用され、第3の長さは、第1の長さ未満である。各データサブブロックのメタデータは、第1のIDとロケーション識別子とを含む。ロケーション識別子は、第1のデータにおける対応するデータサブブロックのオフセットを示すために使用され、少なくとも2つのデータサブブロックにおけるロケーション識別子に基づいて、少なくとも2つのデータサブブロックが第1のデータへと結合され得るようになる。
【0015】
第2の態様を参照すると、第1の可能な実装形態では、メディアコントローラは、メモリコントローラによって送られた第2の読取りコマンドを受信すること、および、第2の読取りコマンドにおける第2のアドレスに基づいて、NVMから第2のデータを取得することを行うようにさらに構成される。第2の読取りコマンドは、第2のIDと、第2のアドレスと、第2の長さとを搬送し、第2の長さは、第2の読取りコマンドによって読み取られるべき第2のデータのサイズを示すために使用される。メモリコントローラによって送られた第2のsendコマンドを受信した後、メディアコントローラは、第2のsendコマンドに応答して、メモリコントローラに、第2のデータと、第2のデータのメタデータとを返す。第2のsendコマンドは、第3の長さのデータブロックを取得するために使用され、そこで、第2の長さが第3の長さに等しく、第2のデータのメタデータは、第2のIDを搬送する。
【0016】
第2の態様、または第2の態様の第1の可能な実装形態を参照すると、メモリは、バッファをさらに含み、バッファは、NVMからメディアコントローラによって読み取られる第1のデータの少なくとも2つのデータサブブロックを、一時的に記憶するように構成される。メディアコントローラは、少なくとも2つのデータサブブロックのメタデータを記録するようにさらに構成される。
【0017】
第2の態様の第1または第2の可能な実装形態を参照すると、第3の可能な実装形態では、各データサブブロックのメタデータは、送信識別子をさらに含み、送信識別子は、データサブブロックが第1のデータの最後の送信されるべきデータサブブロックであるか否かを示すために使用される。バッファは、第2のデータを一時的に記憶するようにさらに構成される。メディアコントローラは、第2のデータがバッファにおける第1のデータの第1のデータサブブロックの後に位置し、バッファにおける第1のデータの第2のデータサブブロックの前に位置するとき、第1のデータサブブロックの前方で、メモリコントローラに第2のデータを送るようにさらに構成される。第1のデータサブブロックの送信識別子は、第1のデータサブブロックが、第1のデータの最後の送信されるべきデータサブブロックではないことを示し、第2のデータサブブロックの送信識別子は、第2のデータサブブロックが、第1のデータの最後の送信されるべきデータサブブロックであることを示す。
【0018】
第3の態様によれば、本出願はメモリアクセス方法を提供し、この方法は、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムの機能を実装するために、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムに適用される。
【0019】
第4の態様によれば、本出願は、別のメモリアクセス方法を提供する。この方法は、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムにおけるメディアコントローラの機能を実装するために、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムにおけるメディアコントローラによって行われる。
【0020】
第5の態様によれば、本出願は、別のメモリアクセス方法を提供する。この方法は、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムにおけるメモリコントローラの機能を実装するために、第1の態様、または第1の態様のいずれかの可能な実装形態において提供するコンピュータシステムにおけるメモリコントローラによって行われる。
【0021】
第6の態様によれば、本出願は、メモリコントローラを提供する。メモリコントローラは、通信インターフェースと、通信インターフェースに接続された制御回路とを含む。通信インターフェースは、コンピュータシステムにおけるメディアコントローラに第1の読取りコマンドを送ることであって、第1の読取りコマンドが、第1のIDと、第1のアドレスと、第1の長さとを搬送し、第1のIDが、第1の読取りコマンドの識別子であり、第1の長さが、第1の読取りコマンドによって読み取られるべき第1のデータのサイズを示すために使用される、送ることを行うように構成される。通信インターフェースは、メディアコントローラに少なくとも2つのsendコマンドを送ること、および、第3の長さの少なくとも2つのデータサブブロックと、少なくとも2つのデータサブブロックのメタデータとを受信することを行うようにさらに構成される。少なくとも2つのデータサブブロックおよびメタデータは、少なくとも2つのsendコマンドに応答して、メディアコントローラによって送られる。少なくとも2つのsendコマンドは、第3の長さの少なくとも2つのデータを取得するために使用され、第3の長さは、第1の長さ未満である。少なくとも2つのデータサブブロックは、第1のアドレスに基づいて、コンピュータシステムにおける不揮発性メモリNVMから、メディアコントローラによって取得される。各データサブブロックのメタデータは、第1のIDとロケーション識別子とを含み、ロケーション識別子は、第1のデータにおける対応するデータサブブロックのロケーションを示すために使用される。制御回路は、少なくとも2つのデータサブブロックのメタデータにおけるロケーション識別子に基づいて、少なくとも2つのデータサブブロックを第1のデータへと結合するように構成される。
【0022】
第6の態様を参照すると、第6の態様の第1の可能な実装形態では、通信インターフェースは、メディアコントローラに第2の読取りコマンドを送るようにさらに構成される。第2の読取りコマンドは、第2のIDと、第2のアドレスと、第2の長さとを搬送し、第2の長さは、第2の読取りコマンドによって読み取られるべき第2のデータのサイズを示すために使用される。次いで、通信インターフェースは、メディアコントローラに第2のsendコマンドを送ること、および、第2のsendコマンドに基づいて、メディアコントローラによって返される、第2のデータと、第2のデータのメタデータとを受信することを行う。第2のsendコマンドは、第3の長さのデータブロックを取得するために使用され、第2の長さは、第3の長さに等しい。第2のデータは、第2のアドレスに基づいて、メディアコントローラによってNVMから取得され、第2のデータのメタデータは、第2のIDを搬送する。
【0023】
第7の態様によれば、本出願は、プログラムコードを含むコンピュータプログラムをさらに提供し、プログラムコード中に含まれた命令が、第3の態様、第4の態様、または第5の態様による方法を実施するために、コンピュータによって実行される。
【0024】
第8の態様によれば、本出願は、コンピュータ可読記憶媒体をさらに提供する。コンピュータ可読記憶媒体は、プログラムコードを記憶するように構成され、プログラムコード中に含まれた命令が、第3の態様、第4の態様、または第5の態様による方法を実施するために、コンピュータによって実行される。
【0025】
本発明の実施形態
における技術的解決策についてより明確に説明するために、以下で、実施形態について説明するために必要とされる添付の図面について簡単に説明する。明らかに、以下の説明における添付の図面は、本発明のいくつかの実施形態を示すものにすぎない。
【発明を実施するための形態】
【0027】
当業者が本発明における技術的解決策をよりよく理解するようにするために、以下で、本発明の実施形態における添付の図面を参照しながら、本発明の実施形態における技術的解決策について明確に説明する。明らかに、説明する実施形態は、本発明の実施形態のうちのいくつかにすぎず、そのすべてではない。
【0028】
図1は、本発明の一実施形態によるコンピュータシステムの概略アーキテクチャ図である。
図1に示されるように、コンピュータシステム100は、少なくともプロセッサ102と、メモリコントローラ106と、不揮発性デュアルインラインメモリモジュール(non-volatile dual in-line memory module、NVDIMM)108とを含み得る。通常、メモリコントローラ106は、プロセッサ102に組み込まれ得る。本発明のこの実施形態において提供するコンピュータシステムでは、
図1に示されたデバイスに加えて、コンピュータシステム100は、通信インターフェースと、外部ストレージとして使用されるディスクなど、別のデバイスとを含み得ることに留意されたい。このことは、本明細書では限定されない。
【0029】
プロセッサ(processor)102は、コンピュータシステム100の動作コアおよび制御ユニット(control unit)である。プロセッサ102は、複数のプロセッサコア(core)104を含み得る。プロセッサ102は、ハイパースケール集積回路であり得る。オペレーティングシステムおよび別のソフトウェアプログラムがプロセッサ102上にインストールされるので、プロセッサ102は、NVDIMM108、バッファ、およびディスクにアクセスすることができるようになる。本発明のこの実施形態では、プロセッサ102におけるcore 104は、たとえば、中央処理ユニット(central processing unit、CPU)であり得るか、または別の特定用途向け集積回路(application-specific integrated circuit、ASIC)であり得ることは理解されよう。
【0030】
メモリコントローラ(memory controller)106は、コンピュータシステム100内にあり、NVDIMM108を制御し、NVDIMM108からcore 104へのデータ送信を管理および計画するように構成される、バス回路コントローラである。データは、メモリコントローラ106を通して、NVDIMM108とcore 104との間で交換され得る。メモリコントローラ106は、別個のチップであり得、システムバスを通して、core 104に接続される。メモリコントローラ106は、代替的に(
図1に示されるように)プロセッサ102に組み込まれるか、またはノースブリッジに内蔵され得ることは、当業者にはわかるであろう。メモリコントローラ106の特定のロケーションは、本発明のこの実施形態では限定されない。実際の適用例では、メモリコントローラ106は、通信インターフェース1062と制御回路1064とを含み得、メモリコントローラ106は、通信インターフェース1062を通して、プロセッサ102およびNVDIMM108と通信し得る。メモリコントローラ106は、NVDIMM108にデータを書き込むか、またはNVDIMM108からデータを読み取るために、制御回路1064を使用することによって、必要な論理を制御し得る。
【0031】
NVDIMM108は、コンピュータシステム100のランダムアクセスメモリRAMであり、コンピュータシステム100におけるメモリまたはストレージとして使用され得る。NVDIMM108は、メディアコントローラ110と、少なくとも1つの不揮発性メモリNVM112と、バッファ114とを含み得る。メディアコントローラ110は、制御能力を有する論理回路を含み得る。NVM112は、オペレーティングシステム上で現在実行中の様々なソフトウェア、入力および出力データ、外部ストレージと交換される情報などを記憶するように構成される。NVM112は、チップの形態において存在し得る。上述のように、NVM112は、相変化メモリ(phase change memory、PCM)、抵抗性ランダムアクセスメモリ(resistive random access memory、RRAM(登録商標))、磁気ランダムアクセスメモリ(magnetic random access memory、MRAM)、またはスピン転送トルクMRAM(spin-transfer torque MRAM、STT-MRAM)など、メモリとして使用され得る不揮発性メモリを含み得る。
【0032】
メモリコントローラ106は、バス105を通して、NVDIMM108に接続される。メモリコントローラ106は、NVDIMM-Pプロトコルに準拠することによって、NVDIMM108と通信する。NVDIMM-Pプロトコルは、ダブルデータレート(double data rate、DDR)プロトコルと互換性のあるバスアクセスプロトコルである。メディアコントローラ110は、メモリコントローラ106のアクセスコマンドに基づいて、NVM112内に記憶されたデータにアクセスし得る。メモリコントローラ106によって送られるアクセスコマンドは、読取りコマンドまたは書込みコマンドであり得ることは理解されよう。メディアコントローラ110は、メモリコントローラ106によって送られた読取りコマンドに基づいて、NVM112からデータを読み取り得る。代替的に、メディアコントローラ110は、メモリコントローラ106によって送られた書込みコマンドに基づいて、NVM112にデータを書き込み得る。
【0033】
本発明のこの実施形態におけるバス105は、データバスと、コマンド/アドレスバスと、データ読取り
レディフィードバックバスとを含み得る。データバスは、データおよびメタデータを送信するように構成される。コマンド/アドレスバスは、読取りコマンドまたは書込みコマンドなど、アクセスコマンドを送信するように構成される。データ読取りレディフィードバックバスは、読み取られるべきデータがNVDIMMにおいてレディであることを、メモリコントローラ106に通知するために使用される、ready信号を送るように構成される。実際の適用例では、メモリコントローラ106が、バス105を通して、NVDIMM108からデータを読み取るとき、メモリコントローラ106は、コマンド/アドレスバスに基づいて、読取りコマンドを最初に送る。NVDIMM108におけるメディアコントローラ110が、読取りコマンドにおける宛先アドレスに基づいて、NVM112から、読み取られるべきデータを取得した後、NVDIMM108は、データ読取り
レディフィードバックバスを通して、メモリコントローラ106に、データがNVDIMMにおいてレディであることを通知するために使用されるready信号を送る。NVDIMM108によって送られたready信号を受信した後、メモリコントローラ106は、コマンド/アドレスバスを通して、NVDIMM108に、データを取得するために使用されるsendコマンドを送る。メモリコントローラ106によってsendコマンドを送る際の固定された遅延の後、メディアコントローラ110は、データバスを通して、メモリコントローラ106に、NVDIMM108のバッファ内で準備されたデータを返す。NVDIMM-Pプロトコルは、NVM読取りコマンドのアウトオブオーダー実行をサポートするので、実際の適用例では、sendコマンドを送るとき、メモリコントローラ106は、それに応答してデータがメディアコントローラ110によって返される、特定の読取りコマンドを決定することができない。
【0034】
バッファ114は、メディアコントローラ110によってNVM112から読み取られたデータを一時的に記憶するように構成される。バッファ114は、バッファキューを含み得る。通常、バッファキューは、先入れ先出し順序でデータをバッファする。メディアコントローラ110は、バッファ114におけるデータの順序に基づいて、バッファ114におけるデータをスケジュールし得る。たとえば、メディアコントローラ110は、バッファキューにおけるデータの順序に基づいて、メモリコントローラ106に、バッファされたデータを送るか、またはNVM112にデータを書き込み得る。本発明のこの実施形態では、メディアコントローラ110は、先入れ先出し順序でデータをスケジュールしないことがあり、データの優先度または適用例の必要性に基づいて、バッファキューにおけるデータをスケジュールする。実際の適用例では、NVDIMM108が、NVM112に書き込まれるべきデータを一時的に記憶するように構成される書込みバッファ(
図1に図示せず)をさらに含み得ることは理解されよう。
【0035】
NVDIMM-Pバスプロトコルは、標準DDRバスプロトコルと互換性があるので、NVDIMM-Pバスプロトコルにおけるデータバスが再使用され得ることは、当業者にはわかるであろう。このようにして、メモリコントローラによって送られた書込みコマンドと、データを取得するために使用されるsendコマンドの両方が、同じデータバスを再使用する。したがって、バス上のコマンドの競合を防止するために、メディアコントローラにsendコマンドを送るとき、メモリコントローラは、各アクセスコマンドが正確にスケジュールされ得るように、sendコマンドに基づいて返されたデータの送信時間を決定して、次のコマンドを送るための時間を決定する必要がある。しかしながら、NVDIMM-Pプロトコルは、NVM読取りコマンドのアウトオブオーダー実行をサポートする。したがって、異なる長さをもつデータにアクセスするための読取りコマンドを処理するプロセスにおいて、sendコマンドを送るとき、メモリコントローラは、メディアコントローラ110によって返されたデータが属する先の特定の読取りコマンドを知ることができず、したがって、メモリコントローラによって受信されたデータの長さを知ることができない。さらに、sendコマンドを送るとき、メモリコントローラは、返されたデータの送信時間を決定することができない。上記の理由に基づいて、上述のように、従来技術では、メモリコントローラ106は、通常、NVDIMM108に固定長の読取りコマンドを送る。たとえば、メモリコントローラ106は、NVDIMM108に、64Bデータを読み取るために使用される読取りコマンド、または128Bデータを読み取るために使用される読取りコマンドを送る。プロセッサは、異なる長さをもつデータを読み取るための要件を有する。したがって、メモリコントローラ106がNVDIMM108に固定長の読取りコマンドを送る方法は、読取りコマンドの量の増加、またはバス105の帯域幅の浪費を引き起こし、システム性能の向上に影響を及ぼし得る。加えて、ウェアレベリングは、通常、受信されたアクセスコマンドに基づいて、NVDIMM内で行われる必要がある。コマンドの量の増加によって、ウェアレベリングの作業が増加することがあり、したがって、従来技術におけるメモリアクセス方法は、システム性能の向上に寄与しない。したがって、帯域幅を節約し、システム性能を向上させるために、メモリコントローラ106による、NVDIMM108からの異なる長さをもつデータの読取りをサポートすることができる、コンピュータシステムを提供することが必要である。
【0036】
以下で、コンピュータシステム100が、異なる要件に基づいて、NVDIMM108から異なる長さをもつデータをどのように読み取るかについて、
図1を参照しながら詳細に説明する。言い換えれば、本発明の実施形態において提供するコンピュータシステム100は、マルチレングス(multi-length)読取りコマンドをサポートすることができる。実施形態における読取りコマンドを、従来技術における読取りコマンドと区別するために、本発明のこの実施形態では、メモリコントローラ106によってメディアコントローラ110に送られた読取りコマンドを、XREADコマンドと呼ぶ。
図2は、本発明の一実施形態によるデータ読取り方法のシグナリング図である。
図2に示されるように、この方法は、以下のステップを含み得る。
【0037】
ステップ202:プロセッサ102は、メモリコントローラ106に第1のアクセス要求を送る。第1のアクセス要求は、第1の論理アドレスと第1の長さとを搬送し、第1の長さが、プロセッサ102によって読み取られるべき第1のデータのサイズを示すために使用され、第1の論理アドレスが、最初に読み取られるべきデータのアドレスを示すために使用される。
【0038】
ステップ204:メモリコントローラ106は、第1のアクセス要求に基づいて、メディアコントローラ110に第1の読取りコマンドを送り、そこで、第1の読取りコマンドが、第1のIDと、第1のアドレスと、第1の長さとを搬送し、第1の長さが、第1の読取りコマンドによって読み取られるべき第1のデータのサイズを示すために使用される。第1のアドレスは、NVM112における第1のデータの物理アドレスを示すために使用される。
【0039】
本発明のこの実施形態では、第1の読取りコマンドのフォーマットが、
図3に示され得る。
図3は、本発明の一実施形態によるXREADコマンドのデータ構造の概略図である。XREADコマンドは、2つの周期において送信される。第1の周期におけるチップセレクト(chip select、CS)信号は、低(L)であり、第2の周期が第1の周期に後続し、第2の周期におけるチップセレクト信号は、高(H)である。各周期は、クロック信号の立上りエッジと、クロック信号の立下りエッジとをさらに含む。
図3に示されるように、NVDIMM-Pプロトコルに従って、コマンド/アドレスバスクロック信号の立上りエッジと立下りエッジの両方が、データ情報を送信するために使用され得る。たとえば、
図3に示されるように、クロック信号の立上りエッジ上で送信される情報については、
図3における「Command/Address Signal Rising CLK_t」部分を参照されたい。クロック信号の立下りエッジ上で送信される情報については、
図3における「Command/Address Signal Falling CLK_t」部分を参照されたい。具体的には、本発明のこの実施形態において提供するXREADコマンドは、以下のフィールドを含み得る。「CS」ビットは、チップセレクト信号フィールドであり、NVDIMMが
選択されるか否かを示すために使用される。フィールドLength[2:0]は、XREADコマンドによって読み取られるべきデータの長さを示すために使用される。フィールドADDR[11:5]およびADDR[4:1]は、XREADコマンドによって読み取られるべきデータのアドレスを示すために使用される。フィールドRID[9:7]およびRID[6:0]は、XREADコマンドのIDを示すために使用される。フィールド「RFU」は、未使用の予約済みフィールドである。
図3に示されたXREADコマンドにおける各フィールドが、
図1に示されたバス105のコマンド/アドレスバスを通して送信され得ることは、当業者にはわかるであろう。バス105は、NVDIMM-Pプロトコルに準拠する。
【0040】
本発明のこの実施形態では、第1の読取りコマンドは、第1の読取りコマンドの第1のIDを含み得、第1のIDは、第1の読取りコマンドの識別子である。たとえば、第1のIDは、識別のために、
図3におけるフィールドRID[9:7]およびRID[6:0]を使用し得る。加えて、第1の読取りコマンドは、読み取られるべきデータのアドレスをさらに含み得る。説明しやすいように、本発明のこの実施形態では、第1の読取りコマンドにおいて搬送される、読み取られるべきデータのアドレスを、第1のアドレスと呼ぶ。たとえば、第1のアドレスは、識別のために、
図3におけるフィールドADDR[11:5]およびADDR[4:1]を使用し得る。第1のアドレスは、NVM112における第1のデータの物理アドレスであることに留意されたい。
【0041】
本発明のこの実施形態において提供するコンピュータシステムが、プロセッサのマルチレングス(multi-length)読取りコマンドをサポートするようにするために、メモリコントローラ106によってメディアコントローラ110に送られた第1の読取りコマンドにおいて、いくつかのフィールドが、第1の読取りコマンドによって読み取られるべき第1のデータの長さを示すためにさらに必要とされ得る。たとえば、
図3におけるフィールド「Length[2:0]」が、第1のデータの長さを示すために使用され得る。このようにして、フィールド「Length[2:0]」は、メモリコントローラ106によって読み取られるべきデータ中に含まれた64B(byte)データブロックの量を示すために使用され得る。たとえば、
図3に示されるように、フィールド「Length[2:0]」は3ビットを有し得、フィールド「Length[2:0]」は、000〜111を使用することによって示され得る。それに対応して、フィールド「Length[2:0]」は、メモリコントローラによって読み取られるべきデータの長さが64B〜512Bであり得ることを示すために使用され得る。言い換えれば、
図3に示されたXREADコマンドのデータフォーマットに基づいて、コンピュータシステム100は、512Bデータを一度読み取る読取り動作をサポートすることができる。
【0042】
図3におけるフィールド「Length[2:0]」は一例にすぎず、読み取られるべきデータの長さを限定するように意図するものではないことに留意されたい。実際の適用例では、より多くの予約済みフィールドが、読み取られるべきデータの長さを表すために使用され得る。たとえば、実際の適用例では、
図3に示されたフィールド「RFU」が、読み取られるべきデータの長さを示すためにさらに使用され得る。この場合には、読み取られるべきデータの長さを示すために使用されるフィールドは、4bitを含み得、このフィールドは、0000から1111までの値を示すことができる。コンピュータシステム100によって読み取られ得るデータは、64B×16=1024Bであり得る。加えて、本発明のこの実施形態では、64Bの粒度が、フィールド「Length[2:0]」によって示される、読み取られるべきデータのサイズのための一例として使用される。このようにして、読み取られるべきデータのサイズは、64Bの倍数である。実際の適用例では、32B、128B、または別のサイズの粒度が、フィールド「Length[2:0]」によって示される、読み取られるべきデータのサイズのために代替的に使用され得、本発明のこの実施形態では、限定が課せられない。
【0043】
ステップ206:メディアコントローラ110は、第1のアドレスに基づいて、NVM112から第1のデータを読み取る。具体的には、メディアコントローラ110は、第1のアドレスおよび第1の長さに基づいて、NVM112から第1のデータを読み取る。第1のデータを読み取った後、メディアコントローラ110は、バッファ(buffer)内で第1のデータを一時的に記憶し得る。本発明のこの実施形態では、第1のデータを読み取った後、メディアコントローラ110は、64Bの粒度を単位として使用することによって、第1のデータをブロッキング方法でバッファし得る。たとえば、第1の長さが128Bである場合、第1のデータは、2つの64Bデータブロックに分割され得、2つのデータブロックは、NVDIMM108のバッファ114内で別個に記憶され得る。各データブロックを記憶するプロセスにおいて、データブロックが属する先の読取りコマンドのID、および読取りコマンドによって読み取られるべきデータにおけるデータブロックのロケーションが、各データブロック内でマーク付けされ得る。たとえば、第1のデータの第1の長さが128Bである場合、メディアコントローラ110は、第1のデータを、記憶するために、第1のデータサブブロックおよび第2のデータサブブロックに分割し、第1のデータサブブロックのメタデータ情報内に、第1のIDと、第1のデータにおける第1のデータサブブロックのロケーションとを記録し得る。第1のデータにおける第1のデータサブブロックのロケーションは、第1のデータにおける第1のデータサブブロックのオフセットを意味する。たとえば、第1のデータサブブロックが、第1のデータにおける最上位の64Bであり、第2のデータサブブロックが、第1のデータにおける最下位の64Bである場合、第1のデータサブブロックのロケーション情報は、第1のデータサブブロックのメタデータ内に1として記録され得、第2のデータサブブロックのロケーション情報は、第2のデータサブブロックのメタデータ内に0として記録され得る。
【0044】
「0」および「1」は、データブロックのメタデータにおけるロケーション識別子の一例にすぎないことは理解されよう。データブロックのメタデータにおけるロケーション指示ビットは、単に1bitではないことがあり、複数のbitのフィールドが、読み取られるべきデータにおけるデータブロックのロケーションを示すために使用され得ることは理解されよう。たとえば、データブロックのロケーションを示すために、3bitのフィールドが使用される場合、000〜111が、読み取られるべきデータにおけるデータブロックの8つの異なるロケーションをそれぞれ示すために使用され得る。
【0045】
ステップ208:メディアコントローラ110は、メモリコントローラ106にready信号を送る。ready信号は、読み取られるべきデータが
NVDIMM108のbuffer内に記憶されていることを、メモリコントローラ106に通知するために使用される。NVMのアクセス遅延が固定されないので、NVDIMMは、読取りコマンドを受信した後の固定された時間内に、メモリコントローラに、読取りコマンドによって読み取られるべきデータを、ダイナミックランダムアクセスメモリDRAMの方法において返すことができないことは、当業者にはわかるであろう。したがって、データを読み取るプロセスにおいて、データフィードバックのために使用されるready信号は、NVDIMM-Pプロトコルにおいて定義される。これもまた、NVDIMM-PプロトコルとDDRバスプロトコルとの間の違いである。ready信号は、NVDIMMが、メモリコントローラによって読み取られるべきデータを準備したことを、メモリコントローラに通知するために使用される。ready信号を受信した後、メモリコントローラは、sendコマンドを使用することによって、NVDIMMのバッファ(buffer)から、準備されたデータを取得し得る。
【0046】
ステップ210:メモリコントローラ106は、メディアコントローラ110にsendコマンドを送る。sendコマンドは、NVDIMMのバッファ内に一時的に記憶された第3の長さのデータブロックを読み取るために使用される。データがNVDIMMのバッファ内に記憶されるとき、メディアコントローラは、メモリコントローラ106にready信号を送ることに留意されたい。NVDIMM-Pプロトコルは、NVM読取りコマンドのアウトオブオーダー実行をサポートするので、この場合には、メモリコントローラ106は、そのためにNVDIMMがデータを準備する特定の読取りコマンドを知ることができない。上述のように、マルチレングスデータを読み取るために使用される読取りコマンドを処理する場合には、メディアコントローラ110にsendコマンドを送るとき、メモリコントローラ106は、メモリコントローラ106によって取得されるべきデータのサイズを知らず、したがって、返されるべきデータの送信時間を決定することができない。本発明のこの実施形態では、バス上のコマンドの無秩序を回避するために、プロセッサによって送られたアクセス要求が、異なる長さをもつデータを読み取ることができる場合でも、メモリコントローラ106は、固定長(たとえば、第3の長さ)のデータを取得する方法で、sendコマンドを送る。このようにして、異なるアクセス要求が、異なるサイズの読み取られるべきデータを有する場合でも、一度取得されたデータの長さが固定されるので、メディアコントローラ110によって返されたデータの送信時間が決定され得る。したがって、メモリコントローラ106は、NVDIMMから、読み取られるべきデータを取得するために、固定されたデータ送信時間に基づいて、メディアコントローラ110にsendコマンドを送り得る。第3の長さが、実際の適用例に従って設定され得ることは理解されよう。実際の適用例では、帯域幅を節約するために、第3の長さは64Bであり得る。
【0047】
ステップ212:メディアコントローラ110は、sendコマンドに基づいて、メモリコントローラ106に、第3の長さのデータブロックと、対応するメタデータとを返す。sendコマンドを受信するとき、メディアコントローラ110は、第3の長さと同じサイズのデータブロックと、対応するメタデータとを返すことは、当業者にはわかるであろう。データのメタデータは、データについて説明するために使用される情報である。実際の適用例では、sendコマンドに基づいて、メモリコントローラ106にデータを返すとき、メディアコントローラ110は、通常、データブロックと対応するメタデータとを一緒に返す。説明しやすいように、本発明のこの実施形態では、メディアコントローラ110によって返される、第3の長さのデータブロックおよび対応するメタデータを、返されるデータと代替的に総称することがある。メディアコントローラ110によって返されるデータのフォーマットが、
図4に示され得る。
図4に示されるように、返されるデータは、以下の情報、すなわち、data 402と、ECC404と、ID406と、location 408とを含み得る。フィールドdata 402は、第3の長さのデータブロックである。たとえば、フィールドdata 402は、64Bデータブロックであり得る。第3の長さが実際の必要性に従って設定され得ることは理解されよう。たとえば、第3の長さが固定された長さであるとすれば、第3の長さは、64Bまたは128Bに設定され得る。フィールドECC404は、データブロックの誤り訂正情報を示すために使用される。実際の適用例では、フィールドECC404は、12Bを占有し得る。加えて、実際の適用例では、返されるデータは、フィールドECC404を含まないことがある。フィールドID406は、データブロックが属する先の読取りコマンドを示すために使用される。たとえば、上記の第1の読取りコマンドを一例として使用すると、第1の読取りコマンドによって読み取られるべき第1のデータが、第1のデータサブブロックおよび第2のデータサブブロックに分割される場合、メモリコントローラ106によって送られた2つのsendコマンドに基づいて、メディアコントローラ110によって返されるデータブロックのメタデータ内で、第1のデータサブブロックのIDおよび第2のデータサブブロックのIDは、各々が第1の読取りコマンドのIDであり得る。location 408は、ID406によって示された読取りコマンドによって読み取られるべきデータにおける、返されるデータサブブロックのロケーションを示すために使用される。たとえば、メディアコントローラ110が第1のデータサブブロックを返すとき、返される第1のデータサブブロックが、第1の読取りコマンドによって読み取られるべきデータにおける最上位の64Bであることを示すために、location 408は「1」であり得る。
【0048】
実際の適用例では、フィールドECC404、フィールドID406、およびフィールドlocation 408が、返されるデータサブブロックのメタデータ中に含まれ得る。
図5は、本発明の一実施形態による、sendコマンドに基づいて返されるデータブロックのメタデータのデータ構造の概略図である。この図に示されるように、M0およびM1が、メタデータを送信するために2つの信号ケーブル上で送信される信号を示すために使用される。「RID」フィールドは、データブロックが属する先の読取りコマンドを示すために使用される。言い換えれば、メディアコントローラ110によって返されたデータブロックを受信した後、メモリコントローラ106は、フィールド「RID」に基づいて、返されたデータブロックを読み取る特定の読取りコマンドを識別し得る。フィールド「SB」は、フィールド「RID」によって示された読取りコマンドによって読み取られるべきデータにおける、返されるデータブロックのオフセットを示すために使用される。
【0049】
図5に示されたデータ構造では、RIDが10
ビットを占有し、SBが3ビットを占有することが、説明のための一例として使用される。メタデータにおけるRID情報は、
図3に示されたXREADコマンドにおけるフィールドRID[9:7]およびRID[6:0]に対応し、データサブブロックが属する先の読取りコマンドを示すために使用される。SBによって占有された3bitは、
図3に示されたXREADコマンドにおける「Length[2:0]」における3bitに対応する。このようにして、XREADコマンドにおいてLength[2:0]=7である場合、このことは、読み取られる必要があるデータの長さが、8つの64Bデータブロックであることを示す。返されるデータブロックにおいて、SB[2:0]=0である場合、このことは、返されるデータサブブロックが、読み取られるべきデータにおける第1のデータサブブロックであることを示す。SB[2:0]=7である場合、このことは、返されるデータサブブロックが、読み取られるべきデータにおける第8のデータサブブロックであることを示す。実際の適用例では、フィールドID406およびフィールドlocation 408によって占有されるビットの量が、実際の必要性に従って設定され得ることは理解されよう。本発明のこの実施形態では、限定が課せられない。
【0050】
返されるべき、読み取られたデータを一時的に記憶するために使用され、NVDIMM108内にある、バッファ114内にデータがあるとき、メディアコントローラ110がメモリコントローラ106にready信号を送ることは、当業者にはわかるであろう。メディアコントローラ110によって送られたready信号を受信した後、メモリコントローラ106は、メディアコントローラ110にsendコマンドを送る。sendコマンドを受信した後、メディアコントローラ110は、メモリコントローラ106に、sendコマンドのための第3の長さのデータブロックを返す。したがって、読取りコマンドによって読み取られるべきデータが比較的大きい、たとえば、指定された第3の長さよりも大きいとき、NVDIMMから、読取りコマンドによって読み取られるべきデータを完全に読み取るために、ステップ208からステップ212が、少なくとも2回行われる必要があることは理解されよう。本発明のこの実施形態では、第1のデータが第3の長さよりも大きい長さのものであることが、一例として使用される。メモリコントローラは、NVDIMMから第1のデータを取得するために、少なくとも2つのsendコマンドを送る必要がある。たとえば、メモリコントローラ106は、少なくとも2つのsendコマンドを送り、メディアコントローラは、少なくとも2つのsendコマンドに別個に応答して、メモリコントローラ106に第1のデータの少なくとも2つのデータサブブロックを別個に送る。
【0051】
ステップ214:メモリコントローラ106は、受信された少なくとも2つのデータサブブロックに基づいて、第1のデータを取得する。具体的には、sendコマンドに基づいて、メディアコントローラ110によって返されたデータを受信した後、メモリコントローラ106は、返されたデータサブブロックのメタデータに基づいて、データサブブロックが属する先の読取りコマンドを決定し得る。第1の読取りコマンドによって読み取られるべき第1のデータが、第3の長さよりも大きい長さのものであることが、本発明のこの実施形態では、一例として使用される。第1のIDを含む少なくとも2つのデータサブブロックを受信した後、メモリコントローラ106は、少なくとも2つのデータブロックのメタデータにおけるフィールドSBに基づいて、第1のデータにおける各データサブブロックのロケーションを別個に取得し得るので、メモリコントローラ106は、第1のデータにおける各データサブブロックのオフセットに基づいて、第1のIDを含む少なくとも2つのデータサブブロックに従って、第1のデータを取得することができるようになる。ステップ216:メモリコントローラ106は、プロセッサ102に第1のデータを返す。
【0052】
図2に示された実施形態では、メモリアクセスがコンピュータシステム100においてどのように行われるかについて、比較的大きいデータを読み取る一例を使用することによって説明する。コンピュータシステムは、異なる要件のための読取りコマンドをサポートすることができるので、以下で、一例として別の場合を使用することによって、コンピュータシステム100によって小さいデータを読み取るプロセスについて説明する。
図6は、本発明の一実施形態による、
別のメモリアクセス方法のシグナリング図である。
図6に示されるように、この方法は、以下のステップを含み得る。
【0053】
ステップ602:プロセッサは、メモリコントローラ106に第2のアクセス要求を送る。第2のアクセス要求は、読み取られるべき第2のデータの第2の長さを含み、そこで、第2の長さが第3の長さ以下である。本発明のこの実施形態では、第2のデータが64Bのものであることが、説明のための一例として使用される。
【0054】
ステップ604:メモリコントローラ106は、メディアコントローラ110に第2の読取りコマンドを送る。第2の読取りコマンドは、第2のIDと、第2のアドレスと、第2の長さとを含む。第2の読取りコマンドのデータフォーマットもまた、
図3に示され得る。第2の長さは、第2の読取りコマンドによって読み取られるべき第2のデータのサイズを示すために使用される。ステップ606:メディアコントローラ110は、NVM112から第2のデータを読み取る。ステップ206と同様に、メディアコントローラ110は、第2のアドレスおよび第2の長さに基づいて、NVM112から第2のデータを読み取り、NVDIMMのバッファ内に、読み取られた第2のデータを一時的に記憶し得る。第2のデータを記憶するプロセスでは、第2のデータと第2のデータのメタデータの両方が記憶される必要がある。第2のデータのメタデータは、第2の読取りコマンドのIDと、第2のデータのロケーションとを含み得る。第2のデータが比較的小さいので、メディアコントローラ110は、第2のデータをブロッキング方法で一時的に記憶する必要がない。
【0055】
ステップ608:メディアコントローラ110は、メモリコントローラ106にready信号を送る。ステップ610:メモリコントローラ106は、メディアコントローラ110にsendコマンドを送る。ステップ612:メディアコントローラ110は、メモリコントローラ106に、第2のデータと第2のデータのメタデータとを返す。メディアコントローラ
110によって返されるデータのフォーマットが、
図4に示され得る。第2のデータのメタデータが、
図5に示され得る。第2のデータのサイズが64Bであるので、メモリコントローラが、メディアコントローラ110によって返された第2のデータを取得した後、ステップ614で、メモリコントローラ106は、プロセッサ102に第2のデータを直接返し得る。
【0056】
本発明のこの実施形態では、第2のデータの長さが、sendコマンドによって読み取られるデータの長さに等しいので、第2のデータを返すとき、メディアコントローラ110は、第2のデータのメタデータにおけるロケーション識別子を000に設定して、第2のデータがただ1つのデータブロックのみを有することを示し得ることに留意されたい。別の場合には、メディアコントローラ110によって返された第2のデータを受信するとき、メモリコントローラ106は、第2のデータのメタデータにおける第2のIDに基づいて、そのデータが、第2の読取りコマンドによって読み取られるべきデータに属することを学習し、第2の読取りコマンドの長さが第3の長さに等しいことをさらに学習し得る。このようにして、メモリコントローラ106は、第2のデータがただ1つのデータブロックを有することを知り得るので、メモリコントローラ106は、第2のデータのメタデータにおけるロケーション識別子を、無意味な識別子と見なし得るようになる。
【0057】
図6に示された実施形態は、
図2に示された実施形態と同様である。したがって、
図6に示された実施形態における関連ステップについての詳細については、
図2における対応するステップの説明を参照されたい。
図2に示された実施形態とは異なり、第2のアクセス要求によって読み取られるべき第2のデータは比較的小さいので、メモリコントローラ106は、1つのsendコマンドを使用することによって、第2のデータを取得し得る。したがって、メモリコントローラ106が、メディアコントローラ110によって返された第2のデータのメタデータに基づいて、第2の読取りコマンドによって読み取られるべき第2のデータが完全に返されると決定した後、メモリコントローラは、プロセッサ102に第2のデータを直接返し得る。
【0058】
実際の適用例では、本発明のこの実施形態において提供するコンピュータシステム100は、異なるNVM112チップにアクセスするための複数の異なる読取りコマンドを同時に処理し得る。たとえば、コンピュータシステム100は、第1の読取りコマンドと第2の読取りコマンドとを同時に処理し得る。
図2および
図6は、コンピュータシステム100が、異なる長さをもつデータを読み取るための読取りコマンドを処理する、実行方法の概略図にすぎない。加えて、本発明のこの実施形態において提供するコンピュータシステム100は、読取りコマンドのアウトオブオーダー実行をさらにサポートすることができる。このようにして、
図2におけるステップおよび
図6におけるステップは、交差するように行われ得る。たとえば、ステップ208の前に、メモリコントローラは、ステップ604を行い得る。メモリコントローラ106にデータを返すとき、メディアコントローラは、
図2に示された第1の読取りコマンドによって読み取られた第1のデータの一部を最初に返し得るか、または、
図6に示された第2の読取りコマンドによって読み取られた第2のデータを最初に返し得る。したがって、本発明のこの実施形態では、
図2および
図6に示されたメモリアクセス方法のステップの実行順序が限定されない。
【0059】
上記の実施形態において提供するコンピュータシステムでは、プロセッサ102が、異なる長さをもつデータを読み取るために使用されるアクセス要求を送るとき、メモリコントローラ106は、受信されたアクセス要求に基づいて、NVDIMM108に、異なる長さをもつデータを読み取るために使用される読取りコマンドを送り得る。比較的大きいデータ(たとえば、第1のデータ)を読み取るために使用される第1の読取りコマンドを送るとき、メモリコントローラ106は、NVDIMM108におけるメディアコントローラに、固定長(たとえば、第3の長さ)のデータを読み取るために使用される少なくとも2つのsendコマンドを送り得る。第3の長さは、第1のデータの第1の長さ未満である。メディアコントローラ110は、少なくとも2つの受信されたsendコマンドに基づいて、メモリコントローラ106に、第3の長さの少なくとも2つのデータサブブロックと、メタデータとを返し得る。各データサブブロックに対応するメタデータは、第1のデータにおけるデータサブブロックのロケーション識別子を含む。したがって、メモリコントローラ106は、返された、少なくとも2つのデータサブブロックのメタデータにおけるロケーション識別子に基づいて、少なくとも2つのデータサブブロックを第1のデータへと結合し得る。本発明のこの実施形態において提供する方法は、読取りコマンドの量を増加させることなしに、およびバス帯域幅を浪費することなしに、異なる長さをもつデータを読み取るための読取り要件をサポートすることができる。
【0060】
実際の適用例では、コンピュータシステム100は、複数の異なる読取りコマンドを同時に処理し得るので、このようにして、複数の読取りコマンドによって読み取られるべきデータが、NVDIMM108のバッファ114内に一時的に記憶され得る。実際の適用例では、データがバッファ114内に記憶されるとき、メディアコントローラ110は、データを取得するように、メモリコントローラ106に命令するために、メモリコントローラ106にready信号を送る。メモリコントローラによってデータを取得する際の待機遅延を低減するために、本発明のこの実施形態では、バッファ内のデータブロックのスケジューリング順序がさらに最適化
され得る。以下で、本発明の実施形態において提供するコンピュータシステム100が、メモリコントローラによってデータを取得する際の待機遅延をどのように低減するかについて、
図5および
図7を参照しながら詳細に説明する。
【0061】
本発明のこの実施形態では、メモリコントローラによってデータを取得する際の待機遅延を低減するために、送信識別子(LB)が、
図5に示されたメタデータにさらに追加され得る。送信識別子LBは、
図5に示されたメタデータにおいて1ビットのみを占有する。具体的には、あるビットが、
図5に示されたメタデータ構造における未使用ビット(たとえば、
図5においてRFUによって示されたビット)から、送信識別子として選択され得る。送信識別子は、データサブブロックが、RIDによって示された読取りコマンドによって読み取られるべきデータにおける、最後の送信されるべきデータブロックであるか否かを示すために使用される。たとえば、第1のデータが、記憶するために、少なくとも2つのデータサブブロックに分割されるとき、少なくとも2つのデータサブブロックのうちのいずれか一方が、第1のデータの最後の送信されるべきデータサブブロックとして使用され得る。このようにして、決定された最後の送信されるべきデータサブブロックのメタデータにおけるLBビットが、「1」としてマーク付けされ得、第1のデータにおける別のデータサブブロックのメタデータにおけるLBビットが、「0」としてマーク付けされ得る。「1」は、データサブブロックが最後の送信されるべきデータサブブロックの識別子であることを示すために使用される一例にすぎず、「0」もまた、データサブブロックが最後の送信されるべきデータサブブロックの識別子ではないことを示すために使用される一例にすぎないことは理解されよう。別の識別子が、実際の適用例では代替的に使用されることがあり、本明細書では限定が課せられない。
【0062】
本発明の実施形態では、メモリコントローラ
106によって読取りコマンドのデータを受信する際の待機遅延を低減するために、
図2に示されたステップ212、および
図6に示されたステップ612で、メディアコントローラ110は、読取りコマンドの、バッファ114内に記憶された、データサブブロックを返すための順序をさらに最適化し得る。以下で、本発明の実施形態におけるメディアコントローラ110がメモリコントローラ106にデータブロックをどのように返すかについて、
図7〜
図9を参照しながら詳細に説明する。
図7は、本発明の一実施形態によるスケジューリング方法のフローチャートである。
図8は、本発明の一実施形態によるスケジューリング方法の概略図である。
図9は、本発明の一実施形態による別のスケジューリング方法の概略図である。説明を明快にするために、第1のデータおよび第2のデータの少なくとも2つのデータサブブロックが、
図7に示された実施形態では、バッファ114内に一時的に記憶されることが、説明のための一例として使用される。
図7に示されるように、メモリコントローラ106にデータブロックを返すとき、メディアコントローラ110は、以下のステップを行い得る。
【0063】
ステップ702:メディアコントローラ110は、第2のデータが、バッファ114における第1のデータの第1のデータサブブロックの後に位置し、バッファ114における第1のデータの第2のデータサブブロックの前に位置すると決定する。第1のデータサブブロックの送信識別子は、第1のデータサブブロックが第1のデータの最後の送信されるべきデータサブブロックではないことを示し、第2のデータサブブロックの送信識別子は、第2のデータサブブロックが第1のデータの最後の送信されるべきデータサブブロックであることを示す。
【0064】
説明を明快にするために、
図8を参照すると、一例が説明のために使用される。
図8に示されるように、第1の読取りコマンドAおよび第2の読取りコマンドBが、一例として使用される。第1の読取りコマンドAによって読み取られるべきデータは、データサブブロックA0と、データサブブロックA1と、データサブブロックA2(LB)とを含み、第2の読取りコマンドBによって読み取られるべきデータは、データサブブロックB0(LB)を含む。A2(LB)は、A2が、第1の読取りコマンドAによって読み取られるデータの最後の送信されるべきデータサブブロックであることを示すために使用され、B0(LB)は、B0が、第2の読取りコマンドBによって読み取られるデータの最後の送信されるべきデータサブブロックであることを示すために使用される。バッファ114におけるデータサブブロックのバッファリング順序が、802において示される。データサブブロックB0(LB)は、データサブブロックA0およびデータサブブロックA1の後に位置し、データサブブロックA2(LB)の前に位置する。
【0065】
ステップ704:メディアコントローラ110は、メモリコントローラ106によって送られたsendコマンドに応答して、第1のデータサブブロックの前方で、メモリコントローラ
106に第2のデータを送る。具体的には、
図8におけるスケジューリング順序804によって示されるように、メディアコントローラ110は、メモリコントローラ106によって送られた1つのsendコマンドに最初に応答して、メモリコントローラ106に第2のデータB0(LB)を送り、次いで、メモリコントローラ106によって送られた少なくとも2つの他のsendコマンドに応答して、メモリコントローラ106に、第1のデータサブブロックA0と、第2のデータサブブロックA1と、第3のデータサブブロックA2(LB)とを返し得る。
【0066】
1つのデータサブブロックを送信する際の送信遅延は、4周期であると仮定する。メディアコントローラ110が、
図8における802によって示されたバッファリング順序に基づいて、メモリコントローラ106にデータサブブロックを送る場合、メモリコントローラ
106によって第1の読取りコマンドAのすべてのデータサブブロックを受信する際の待機遅延は、16周期であり、メモリコントローラ
106によって第2の読取りコマンドBのすべてのデータサブブロックを受信する際の待機遅延は、12周期である。メモリコントローラ
106の待機遅延を低減するために、バッファ114におけるデータサブブロックの送信順序が、本発明のこの実施形態において示された方法に従って、たとえば、804によって示されたスケジューリング順序に基づいて調整された後、メディアコントローラ110は、第1の読取りコマンドAのデータサブブロックA0およびA1の前方で、メモリコントローラ
106に、第2の読取りコマンドBのデータB0(LB)を送り得る。この場合には、メモリコントローラ
106によって第1の読取りコマンドAのすべてのデータサブブロックを受信する際の待機遅延は不変であり、依然として16周期である。しかしながら、メモリコントローラ
106によって第2の読取りコマンドBのすべてのデータサブブロックを受信する際の待機遅延は、4周期であり、それによって、メモリコントローラ
106によって第2の読取りコマンドBのデータサブブロックを受信する際の遅延が低減され、メモリコントローラ
106によって第2の読取りコマンドBを処理する際の処理効率が向上する。
【0067】
第2の読取りコマンドによって読み取られるべきデータが、ただ1つのデータサブブロックB0(LB)を含むことは、
図8において説明のために一例として使用される。実際の適用例では、第2の読取りコマンドによって読み取られるべきデータが、複数のデータサブブロックを含む場合、第2の読取りコマンドによって読み取られるべき各データサブブロックが、バッファにおける第1の読取りコマンドによって読み取られるべきデータにおけるデータサブブロックの後に位置し、バッファにおける第1の読取りコマンドによって読み取られるべきデータの最後の送信されるべきデータサブブロックの前に位置するとすれば、メディアコントローラ110は、第1の読取りコマンドによって読み取られるべきデータサブブロックの前方で、メモリコントローラ106に、第2の読取りコマンドによって読み取られるべきデータサブブロックを送り得る。
図9において902によって示されるように、第2の読取りコマンドBによって読み取られるべきデータは、B0およびB1(LB)を含む。B0およびB1(LB)は、バッファ114における第1の読取りコマンドAによって読み取られるべきデータサブブロックA0の後に位置し、B0およびB1(LB)は、バッファ114における第1の読取りコマンドAによって読み取られるべきデータの最後の送信されるべきデータサブブロックA2(LB)の前に位置する。メディアコントローラ110は、904において示されたスケジューリング順序に基づいて、メモリコントローラ
106にデータサブブロックを送り得る。具体的には、第2の読取りコマンドによって読み取られるべきデータB0およびB1(LB)は、第1の読取りコマンドAによって読み取られるべきデータサブブロックA0の前方で、メモリコントローラに送られ得る。1つのデータサブブロックを送信する際の送信遅延が4周期であることが、依然として一例として使用される。送信順序が調整された後、メモリコントローラ
106によって、第2の読取りコマンドBによって読み取られるデータを受信する際の遅延は、16
周期から
8遅延に低減され、メモリコントローラ
106によって、第1の読取りコマンドAによって読み取られるデータを受信する際の遅延は、依然として20遅延である。したがって、メモリコントローラの処理効率は、ある程度最適化される。
【0068】
加えて、公平性を考慮して、メモリコントローラ106によって読取りコマンドのデータを受信する際の遅延の増大を回避するために、本発明のこの実施形態では、メディアコントローラ110は、第1の読取りコマンドのデータサブブロックの前方で、メモリコントローラに、バッファにおける第1の読取りコマンドのデータの最後の送信されるべきデータサブブロックの後に位置する、別の読取りコマンドによって読み取られるべきデータサブブロックを送ることはできない。たとえば、
図8および
図9に示されるように、第3の読取りコマンドCのデータサブブロックC0(LB)は、バッファ114における第1の読取りコマンドAのデータサブブロックA2(LB)の後に位置し、メディアコントローラ110は、第1の読取りコマンドのデータサブブロックA0、A1、およびA2(LB)の前方で、メモリコントローラ106にC0(LB)を送ることはできない。
メディアコントローラ110が、第1の読取りコマンドのデータサブブロックA0、A1、およびA2(LB)の前方で、メモリコントローラ106にC0(LB)を送る場合、メモリコントローラ
106によって第1の読取りコマンドAのデータブロックを受信する際の遅延が増大する。たとえば、
図8に示された例において、第1の読取りコマンドAのデータサブブロックが、第3の読取りコマンドCのデータサブブロックが送られた後に送られると仮定すると、メモリコントローラ106によって第1の読取りコマンドAのデータを受信する際の遅延は、16周期から20周期に増大する。
【0069】
本発明のこの実施形態では、メディアコントローラ110がデータブロックの送信順序を調整するとき、読取りコマンドによって読み取られるデータにおける最後の送信されるべきデータブロックを、そのコマンドの別のデータブロックの前方で送ることはできないことに留意されたい。たとえば、メディアコントローラ110は、データサブブロックA0またはA1の前方で、メモリコントローラ106に、第1の読取りコマンドのデータサブブロックA2(LB)を送ることはできない。
【0070】
上記の説明から、本発明の実施形態における
図2および
図6における方法に基づいて、メディアコントローラ110によってメモリコントローラ106に読み取られたデータを返すプロセスにおいて、読取りコマンドによって読み取られるデータの返す順序が調整されるので、異なる長さをもつデータを読み取るための読取りコマンドが処理され得るようになり、さらに、メモリコントローラ106によってデータを受信する際の遅延が低減され、それによって、メモリコントローラ106の処理効率が向上し得ることがわかり得る。
【0071】
本明細書で開示する実施形態において説明した例を参照すると、方法ステップが、電子ハードウェア、またはコンピュータソフトウェアおよび電子ハードウェアの組合せによって実装され得ることは、当業者には認識されよう。機能がハードウェアによって行われるか、ソフトウェアによって行われるかは、技術的解決策の特定の適用例および設計制約条件に依存する。当業者は、各特定の適用例のための説明した機能を実装するために、異なる方法を使用し得るが、その実装形態は、本出願の範囲を越えるものと見なされるべきではない。
【0072】
上記の実施形態の全部または一部は、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せによって実装され得る。ソフトウェアが、実施形態を実装するために使用されるとき、実施形態は、コンピュータプログラムの形態において完全にまたは部分的に実装され得る。コンピュータプログラムは、1つまたは複数のコンピュータ命令を含む。コンピュータプログラム命令がコンピュータ上にロードされ、実行されるとき、本発明の実施形態による手順または機能が、すべてまたは部分的に生成される。コンピュータは、汎用コンピュータ、専用コンピュータ、コンピュータネットワーク、または別のプログラマブル装置であり得る。コンピュータ命令は、コンピュータ可読記憶媒体内に記憶され得るか、または、あるコンピュータ可読記憶媒体から別のコンピュータ可読記憶媒体に送信され得る。たとえば、コンピュータ命令は、あるウェブサイト、コンピュータ、サーバ、またはデータセンターから、別のウェブサイト、コンピュータ、サーバ、またはデータセンターに、ワイヤード(たとえば、同軸ケーブルおよび光ファイバー)、またはワイヤレス(たとえば、赤外線、無線、およびマイクロ波)の方法で送信され得る。コンピュータ可読記憶媒体は、1つまたは複数の使用可能な媒体を組み込む、コンピュータ、または、サーバもしくはデータセンターなどのデータ記憶デバイスによってアクセス可能な、任意の使用可能な媒体であり得る。使用可能な媒体は、プログラムコードを記憶することができる、磁気媒体(たとえば、フロッピーディスク、ハードディスク、または磁気テープ)、光媒体(たとえば、光ディスク)、または半導体媒体(たとえば、ソリッドステートドライブ(solid-state drive、SSD))などの非一時的(non-transitory)マシン可読媒体であり得る。
【0073】
本出願において提供する実施形態は例にすぎないことに留意されたい。当業者は、説明の便宜および簡潔さのために、上記の実施形態において、実施形態が異なる態様を強調することを明確に知り得、ある実施形態において詳細に説明されない部分については、別の実施形態の関連する説明を参照されたい。本発明の実施形態、特許請求の範囲、および添付の図面において開示する特徴は、単独で存在するか、または組合せで存在し得る。本発明の実施形態においてハードウェアの形態において説明する特徴は、ソフトウェアによって実行され得、およびその逆も同様であり得、そのことは本明細書で限定されない。