不揮発性メインメモリのソフトウェア管理による読み取りおよび書き込みのウェアレベリング パート 3
Aug 06, 2024
5.1.1 一時的な書き込み分散サンプリング。
アプリケーションの Cwritesample および writeaccess のたびにトラップを生成するには、CPU 内部のパフォーマンス カウント メカニズムを使用します。 ARMv8 の BUS_ACCESS_ST イベントは、メモリ バス上のストア リクエストの合計数をカウントするため、アプリケーションの書き込みアクセス数が記録されます。 Intel CPU の場合、最終レベル キャッシュのライトバックにパフォーマンス カウンターを使用することで、同じ動作を実現できます。
キャッシュとメモリは関連する 2 つの概念ですが、同一ではありません。キャッシュとは、コンピュータがデータを保存および処理するメカニズムを表すコンピュータ分野の用語です。キャッシュを使用すると、コンピューターがより速くデータにアクセスし、処理速度と効率を向上させることができます。一方、記憶とは人間の記憶を指し、情報を保存し、いつでもそれを思い出すことができる人間の脳の能力です。
キャッシュとメモリは概念が異なりますが、確かにそれらの間には一定のつながりがあります。人間の記憶もキャッシュメカニズムとみなすことができます。私たちは経験した物事や情報を脳に保存し、必要なときにすぐに思い出すことができます。これは、コンピュータのキャッシュ ストレージ メカニズムに似ており、コンピュータの処理効率を向上させるために一時データを保存できます。
さらに、キャッシュ、特に短期キャッシュは、新しい情報をよりよく理解し、記憶するのにも役立ちます。新しい概念や知識ポイントを学習している場合、それらを脳内のキャッシュに短期間保存して、よりよく覚えておくことができます。新しい情報を迅速に長期記憶に変換できれば、その知識をよりよく理解し、習得することができます。
一般に、キャッシュとメモリは密接に関連する 2 つの概念であり、相互に促進し合う 2 つのメカニズムです。キャッシュはデータや情報により速くアクセスするのに役立ちますが、メモリはこの情報をよりよく理解し、記憶するのに役立ちます。学習や日常生活において、私たちは皆、キャッシュとメモリのメカニズムを使用して、効率と記憶能力を向上させることができます。私たちは記憶力を向上させる必要があることがわかります。シスタンシェは、記憶と学習に非常に重要なアセチルコリンや成長因子のレベルを高めるなど、神経伝達物質のバランスも調節できるため、記憶力を大幅に向上させることができます。さらに、シスタンシュは血流を改善し、酸素の供給を促進することで、脳に十分な栄養とエネルギーを確保し、それによって脳の活力と持久力を向上させることができます。

一部のシステムでそのようなパフォーマンス カウンタが利用できない場合でも、任意の近似値 (サイクル カウンタやタイマーなど) を考慮できます。パフォーマンス カウント メカニズムにより、パフォーマンス カウンターがオーバーフローしたとき (つまり、Cmax=232 -1 の値を超えたとき) にトラップを生成できます。
書き込みアクセスのすべての Cwritesample でトラップを確立するには、オーバーフロー トラップの処理中にパフォーマンス カウンタが Cmax -Cwritesampled に設定されます。書き換えサンプルを選択するときは、トラップ処理のために発生するオーバーヘッドを考慮する必要があります。
5.1.2 書き込みアクセスのトラップ。
最後に書き込まれたメモリ アドレスは、パフォーマンス カウンタ オーバーフローのトラップ処理中に決定できないため、次のメモリ書き込みのターゲット アドレスを追跡するために 2 番目の手法が実装されます。
オーバーフロー トラップの処理中、追跡されたメモリ領域のメモリアクセス許可は読み取り専用に設定されます_。 ARMv8 アーキテクチャでは階層的なメモリ アクセス権限が許可されており、1 ページのテーブル エントリを変更するだけで、1-GB サイズのメモリ領域を読み取り専用に構成できます_。
READ_ONLY 権限があるため、次の書き込みアクセスにより権限違反トラップが発生し、同期割り込みとして処理されます。違反の原因となったアドレスは、専用レジスタ内のトラップ ハンドラで使用でき、書き込み分散近似で対応するカウンタをインクリメントするために使用されます。1
トラップの処理中、アクセス権限は READ_ WRITE に戻されます。2 このメカニズムには厳密には MMU が必要ではないことに注意してください。マイクロコントローラー上の非常に軽量な MPU を使用して実装することもできます。
ただし、MMU が存在する場合、書き込みアクセスのトラップはメモリ ページの特定のサブセットに制限される可能性があります。たとえば、タイミング クリティカルなアプリケーションが高速メモリ アクセスに依存している場合、ウェアレベリングが悪化する代わりに、このアプリケーションに対して書き込みアクセス トラップを無効にすることができます。
5.2 読み取りアクセスのサンプリング
読み取りアクセスの統計的近似を記録するには、前述と同じ 2 つの手順に従います。まず、メモリ バス上の読み取りアクセスをカウントするアーキテクチャ パフォーマンス カウンターを設定します。
カウンタがオーバーフローするたびにパフォーマンス カウンタ値 C を最大値 Cmax =232 − 1 から構成可能なサンプリング レート Creadsample を引いた値に手動で設定すると、Creadsample 読み取りアクセスごとにオーバーフロー トラップが生成されます。
オーバーフローの処理中に、観察されたすべてのメモリ ページのメモリ アクセス許可を NO{0}} に設定しました。これにより、読み取りアクセスと書き込みアクセスでアクセス許可違反のトラップが発生します。{0}この違反トラップは、次のリードアクセスの対象を記録するために利用される。
トラップ処理中に、実行を継続できるようにメモリのアクセス許可が復元されます。結果として、このメカニズムにより、Creadsample 読み取りアクセスごとに現在の読み取りアドレスがサンプリングされます。

私たちのテスト システムでは、読み取り近似は書き込み近似とともに使用されます。その結果、両方のメソッドは後続のメモリ アクセスをトラップするためにメモリ許可システムを使用するため、相互に干渉します。書き込み近似では READ_ONLY 権限のみが使用されるため、読み取りアクセスは続行され、読み取り近似は中断されません。
対照的に、読み取り近似では NO_ アクセス許可が使用されるため、現在書き込み近似のサンプルが記録されるべきでない場合でも、後続の書き込みアクセスによっても許可違反トラップが発生します。
これには、これらの書き込みトラップを無視するために、両方の近似演算子間の緊密な連携が必要です。ただし、読み取りアプロキシメータが読み取りサンプルを記録することを目的としているが、次のメモリ アクセスが書き込みアクセスである場合、実行を継続して最終的に読み取り要求に到達するには、書き込みアクセスが完了する必要があります。書き込みアクセスを完了するには、メモリ アクセス許可が必要です。再度書き込みアクセスを許可するために緩和されました。
次の読み取りアクセスをトラップするために、書き込みアクセスの完了後にメモリ権限を NO{0}} に戻すデバッグ メカニズムを利用します。したがって、書き込み命令の後の命令をブレークポイント命令に置き換えます。3
書き込み命令がプログラム カウンタを操作できない限り 4、後続の命令は実行されることが保証されます。その後、ブレークポイント ハンドラーはブレークポイントを元の命令に置き換え、メモリ許可を NO_ ACCESS にリセットし、実行を継続します。
5.2.1 命令実行のサンプリング。
メイン メモリへの読み取りアクセスを概算する場合、コンパイルされたソース コードへの命令フェッチもメモリ読み取りアクセスであるため、同様にサンプリングする必要があります。
ただし、前述のメカニズムを使用すると、CPU がメモリ許可を変更したトラップ ハンドラーから戻った後に最初に行うのは次の命令のフェッチであるため、命令フェッチのみがキャプチャされることになります。
したがって、テキスト セグメントへのアクセスのみが読み取り近似でキャプチャされます。これを克服するために、読み取り近似のテキスト セクション ページは観察されないため、これらのページのアクセス許可は変更されません。
代わりに、パフォーマンス カウンター ( Creadsample ) のオーバーフローごとにプログラムカウンターの個別のサンプルを取得します。これにより、テキスト セグメントの個別かつ独立した近似が行われます。

5.2.2 近似スケーリング。
前に指摘したように、読み取りおよび書き込みの近似値はメモリ領域の年齢を推定するために使用され、粗粒度のウェアレベリング アルゴリズムにフィードフォワードされます。
経年変化を考慮したウェアレベリング アルゴリズムの品質を維持するには、書き込み近似に従って読み取り近似をスケーリングすることが不可欠です。読み取り近似は、パフォーマンス上の理由から、書き込み近似 Cwritesample とは異なるサンプル レート Creadsample で実行される場合があります。
ただし、ウェアレベリング アルゴリズムは入力として推定セル寿命のみを取得します。これは、非読み取り破壊型 NVM の書き込み近似値と、読み取り破壊型 NVM の読み取り近似値と書き込み近似値の合計です。したがって、読み取りと書き込みの近似は同じ重みを持つ必要があります。
スケーリングされた読み取り近似値は次の方法で計算できます。必要なスケーリング係数 x は、ウェアレベリング アルゴリズムに送信される前に読み取り近似値に乗算する必要があり、式 (1) に従って計算されます。
X=CreadsampleCwritesample(1)
5.3 粗粒度のウェアレベリングアルゴリズム
アクセス分布近似により、任意のエージングを考慮したウェアレベリング アルゴリズムが有効になります。読み取りアクセスには書き込みアクセスと同じ破壊的な影響があるため、アルゴリズムは読み取り破壊的な NVM 上で実行されているかどうかを認識する必要がありません。
したがって、アルゴリズムは、読み取りアクセスと書き込みアクセスの合計から計算される経過時間を入力として受け取ることができます。各ページの古さを推定するアクセス近似値からの指標をアルゴリズムに入力します。近似システムは仮想メモリ上でのみ動作し、物理メモリ ページへのマッピングは考慮されないことに注意してください。これはウェアレベリング アルゴリズム自体によって維持されます。
ウェアレベリング アルゴリズムは、どの仮想メモリ ページを他の物理メモリ ページに再配置するかを決定するため、物理メモリの全体的な寿命が維持されます。ただし、近似システムとウェアレベリング アルゴリズムの間のインターフェイスは明確に定義する必要があります。ウェアレベリング アルゴリズムと近似実装をさらにインターリーブして、冗長に保存されるデータを削減します。
私たちのウェアレベリング アルゴリズムは、赤黒ツリーを使用して、管理されているすべての物理メモリ ページとその推定年齢を維持します [10]。推定年齢はツリー ノード内にすでに存在しているため、これらの値を近似実装にも格納する必要はありません。
ツリーについてはセクション 5.3.1 で説明します。各ページは推定年齢に基づいてツリーに保存されるため、最も若いページの検索と抽出が効率的に可能になります。
近似システムは、仮想メモリ ページごとに一時的な読み書きカウンタを維持し、これらのカウンタの 1 つが特定のしきい値を超えた場合に、経過時間増加アクションでウェアレベリング アルゴリズムに通知します。その結果、ウェアレベリング アルゴリズムは内部年齢値を増加させ、物理メモリの内容を別のページに再配置します。
5.3.1 メモリページの管理。
仮想メモリ ページを別の物理メモリ ページに再配置する必要がある場合は常に、現在の最小値 (つまり、推定年齢が最も低い物理メモリ ページ) がターゲット物理ページとしてツリーから抽出され、それに応じて推定年齢が調整されます。
ウェアレベリングの対象として最も若いページを選択すると、増分ウェアレベリングが行われ、一定の時間が経過すると、すべてのページが最も若いページになります。
オーバーヘッドに関しては、このセットアップでは、メモリ ページを再配置する必要がある場合にのみ、ウェアレベリング アルゴリズムが呼び出されます。ウェアレベリング決定の選択ポリシーに関しては、すべてのページが特定の時点で現在の最小ページになるため、すべての物理ページの推定年齢は時間の経過とともに均等にバランスがとれます。
これにより、ステートレスな増分ウェアレベリングが確立され、メモリはいつでもウェアレベリングされるものとみなされ、ウェアレベリングが維持されます。したがって、システムは電源を入れ直してからの経過時間を保存する必要がありません。
アクセス近似およびウェアレベリング アルゴリズム自体のデータ構造はウェアレベリング自体の対象となる必要があり、これには特別な実装が必要です。
ただし、これらの技術的な詳細は、この作業の範囲外です。最終的に、ウェアレベリング アルゴリズムと近似システムのこの統合により、書き込みカウント近似の時間的および空間的粒度、つまりしきい値レリックに加えて、追加の構成パラメーターがもたらされます。その後、推定数の書き込みまたは読み取りの割り当てを実行する必要があります。

この構成パラメータは、アクセス近似の品質に影響を与えることなく、ページ再配置のオーバーヘッドとウェアレベリング動作の頻度およびその結果の品質との間のトレードオフを提供します。
For more information:1950477648nn@gmail.com
