24 永続的なメモリ #
この章では、1つ以上のNVDIMMで構成される「永続的なメモリ」とも呼ばれる不揮発性メインメモリとSUSE Linux Enterprise Serverの使用に関する追加情報を記載します。
24.1 はじめに #
永続的なメモリとは、新しいタイプのコンピュータストレージで、標準の動的RAM (DRAM)に近い速度を発揮し、RAMのバイト単位のアドレス指定、およびソリッドステートディスク(SSD)のパフォーマンスを併せ持ちます。
従来のRAMと同様に、マザーボードのメモリスロットに直接設置されます。そのため、RAM、DIMMと同じ物理フォームファクタで提供されます。これらは、NVDIMM、不揮発性デュアルインラインメモリモジュールとして知られています。
ただし、永続的なメモリはいくつかの点においてRAMとは異なり、フラッシュベースのSSDに類似しています。これらは両方ともソリッドステートメモリ回路の形態に基づいていますが、それにもかかわらず、両方とも不揮発性ストレージを提供し、システムの電源がオフにされたり、再起動されてもそのコンテンツは保持されます。両方の形態のメディアについて、データの書き込みは読み取りよりも低速で、両方とも限定された回数のリライトサイクルをサポートしています。また、SSDと同様に、特定の用途でより適している場合には、永続的なメモリへのセクタレベルのアクセスが可能です。
モデルごとに、Intel 3D XPointや、NANDフラッシュとDRAMを組み合わせるなど、さまざまな形態の電子ストレージメディアを使用します。新たな形態の不揮発性RAMも開発中です。つまり、NVDIMMのさまざまなベンダーおよびモデルで、さまざまなパフォーマンスや耐久性特性が提供されることを意味しています。
含まれるストレージテクノロジーは開発の初期段階であるため、さまざまなベンダーのハードウェアに異なった制限が与えられる場合があります。この一般的な内容は次のとおりです。
永続的なメモリはDRAMより最大10倍低速ですが、フラッシュストレージより約1000倍高速です。フラッシュメモリの全セクタの消去およびリライトプロセスではなく、バイト単位でリライト可能です。つまり、リライトサイクルは限定されていますが、ほとんどの形態の永続的なメモリが、フラッシュストレージの数千サイクルと比較すると、何百万サイクルのリライトを処理することができます。
ただし、この結果次の2つの制約を受けます。
現在のテクノロジーでは、永続的なメモリのみを使用してシステムを実行し、不揮発性メインメモリを完全に得ることはできません。従来のRAMとNVDIMM両方の混在したものを使用する必要があります。オペレーティングシステムおよびアプリケーションは、非常に高速な追加のストレージを提供するNVDIMMとともに、従来のRAMで実行されます。
さまざまなベンダーの永続的なメモリのパフォーマンス特性は、使われているNVDIMM数、および装着に適したメモリスロットなど、特定のサーバのNVDIMMのハードウェア仕様をプログラマが認識している必要があるということを示しています。これは、ハイパーバイザーの使用、異なるホストマシン間のソフトウェアのマイグレーションなどに明白に影響します。
この新しいストレージサブシステムはACPI標準のバージョン6で定義されています。ただし、libnvdimm
はプレ標準のNVDIMMをサポートし、同様に使用することができます。
24.2 用語 #
- 領域
「領域」とは1つ以上の「ネームスペース」に分けることが可能な永続的なメモリのブロックです。領域の永続的なメモリにアクセスするには、まず、その領域をネームスペースに割り当てる必要があります。
- ネームスペース
NVM Express SSDネームスペース、またはSCSI論理ユニット番号(LUN)と比較可能な、不揮発性ストレージの単一の連続アドレス指定範囲。ネームスペースはサーバの
/dev
ディレクトリに個別のブロックデバイスとして表示されます。要求されるアクセス方法に従って、ネームスペースは複数のNVDIMMから大きなボリュームにストレージを混合したり、より小さなボリュームにパーティショニングしたりできます。- モード
各ネームスペースには、そのネームスペースに対して有効化されるNVDIMM機能を定義する「モード」があります。同じ親領域の兄弟ネームスペースは常に同じタイプですが、異なるモードに設定することもできます。ネームスペースのモードは次のとおりです。
- raw
メモリディスク。DAXをサポートしません。他のオペレーティングシステムと互換性があります。
- sector
メタデータのチェックサムを実行しないレガシーファイルシステム用。小さなブートボリュームに適しています。他のオペレーティングシステムと互換性があります。
- fsdax
File system-DAXモード。他のモードが指定されない場合のデフォルトです。ブロックデバイス(
/dev/pmemX [.Y]
)を作成します。これはext4
またはXFS
用のDAXをサポートします。- devdax
Device-DAXモード。単一文字のデバイスファイルを作成します(
/dev/daxX.Y
)。ファイルシステムの作成は必要「ありません」。
- タイプ
各ネームスペースおよび領域には、そのネームスペースまたは領域に関連付けられた永続的なメモリへのアクセス方法を定義する「タイプ」があります。ネームスペースは常に親領域と同じタイプを持ちます。2つの異なるタイプ(永続的なメモリとブロックモード)があります。
- 永続的なメモリ(PMEM)
PMEMストレージはRAMのようにバイトレベルのアクセスを提供します。これにより、カーネルのページキャッシュを迂回して、メディアに直接移動するメモリにアクセスすることを意味する、直接アクセス(DAX)が有効になります。さらに、PMEMを使用すると、単一ネームスペースに複数のインターリーブされたNVDIMMを含めることができ、すべてに単一デバイスとしてアクセスできます。
- ブロックモード(BLK)
BLKアクセスは、定義されているアクセスウィンドウ「aperture」を介し、通常512バイトのセクタ内です。この動作はむしろ従来のディスクドライブのようです。これは、読み取りと書き込みの両方がカーネルによってキャッシュされることも意味します。BLKアクセスでは、各NVDIMMに別個のネームスペースとしてアクセスできます。
一部のデバイスでは、PMEMとBLKモードの両方をサポートしています。また、一部のデバイスではストレージを別個のネームスペースに分割することができるため、一部はPMEM、BLKをそれぞれ使用してアクセスできます。
devdax
ネームスペースは別として、他のすべてのタイプは、従来のドライブと同様に、ext2
、ext4
、XFS
などのファイルシステムでフォーマットされる必要があります。- 直接アクセス(DAX)
DAXでは、たとえば
mmap
システムコールを使用して、永続的なメモリをプロセスのアドレススペースに直接マップすることができます。これは、追加のRAMを使用することなく大容量のPMEMに直接アクセスしたり、RDMA用のPMEMのブロックを登録したり、それを仮想マシンに直接割り当てたりすることに適しています。- DIMM物理アドレス(DPA)
単一DIMMメモリへのオフセットとしてのメモリアドレス。つまりそのDIMM上で最も小さいアドレス指定可能なバイトとして0から開始します。
- ラベル
ネームスペース定義など、NVDIMMに保存されるメタデータ。これにはDSMを使用してアクセスできます。
- デバイス固有のメソッド(DSM)
NVDIMM上のファームウェアにアクセスするためのACPIメソッド。
24.3 使用例 #
24.3.1 DAXを使用したPMEM #
この形態のメモリアクセスはトランザクションが「可能ではない」ことに注意することが重要です。電源異常などのシステム障害が発生する場合には、データがストレージに完全に書き込まれない場合があります。PMEMストレージはアプリケーションが部分的に書き込まれたデータの状態を処理できる場合にのみ適しています。
24.3.1.1 バイトアドレス指定可能なストレージの大容量を活用するアプリケーション。 #
サーバがバイト単位の大容量高速ストレージを直接使用可能なアプリケーションをホストする場合、プログラマはmmap
システムコールを使用して、追加のシステムRAMを使用せずに、永続的なメモリのブロックをアプリケーションのアドレススペースに直接配置することができます。
24.3.1.2 カーネルページキャッシュの使用を避ける #
ページキャッシュ用のRAMの使用を節約し、代わりにそれを使用するアプリケーションに指定したい場合。たとえば、不揮発性メモリを仮想マシン(VM)イメージの保持専用にすることができます。これらはキャッシュされませんが、ホスト上のキャッシュ使用率を削減し、ホストごとのVMを増やすことができます。
24.3.2 BTTを使用したPMEM #
高速ストレージのディスクのようなプールとしてNVDIMMのセットに永続的なメモリを使用したい場合に役立ちます。
アプリケーションに対して、このようなデバイスは高速SSDとして認識され、他のストレージデバイスのように使用できます。たとえば、LVMは不揮発性ストレージの上部に階層化することができ、通常のように動作します。
BTTの利点は、セクタ書き込みの原子性が保証されるため、データ整合性に依存する高度なアプリケーションでも機能し続けるという点です。メディアエラーレポートは標準のエラーレポーティングチャネルを介して機能します。
24.3.3 BLKストレージ #
単一のデバイスの障害に対してより堅牢ですが、各NVDIMMが別個のデバイスとして表示されるため、追加の管理が必要です。したがって、BTTを使用したPMEMが一般的に推奨されます。
BLKストレージは非推奨であり、SUSE Linux Enterprise Serverの最新バージョンではサポートされていません。
24.4 永続的なメモリを管理するためのツール #
永続的なメモリを管理するには、ndctl
パッケージをインストールする必要があります。これをインストールすることにより、NVDIMMを設定するためのユーザスペースライブラリのセットを提供するlibndctl
パッケージもインストールされます。
これらのツールは、3タイプのNVDIMMをサポートする、libnvdimm
ライブラリを介して機能します。
PMEM
BLK
同時のPMEMとBLK
ndctl
ユーティリティには、次のコマンドを使用してアクセス可能な、便利なman
ページセットがあります。
ndctl help subcommand
使用可能なサブコマンドのリストを表示するには、次を使用します。
ndctl --list-cmds
使用可能なサブコマンドには次のものがあります。
- version
NVDIMMサポートツールの現在のバージョンを表示します。
- enable-namespace
指定されたネームスペースを使用できるようにします。
- disable-namespace
指定されたネームスペースが使用されないようにします。
- create-namespace
指定されたストレージデバイスから新しいネームスペースを作成します。
- destroy-namespace
指定されたネームスペースを削除します。
- enable-region
指定された領域を使用できるようにします。
- disable-region
指定された領域が使用されないようにします。
- zero-labels
デバイスからメタデータを消去します。
- read-labels
指定されたデバイスのメタデータを取得します。
- list
使用可能なデバイスを表示します。
- help
ツールの使用に関する情報を表示します。
24.5 永続的なメモリのセットアップ #
24.5.1 使用可能なNVDIMMストレージの表示 #
ndctl
list
コマンドを使用して、システム内で使用可能なすべてのNVDIMMを一覧表示できます。
次の例では、システムにトリプルチャネルでインターリーブされた単一セットの3個のNVDIMMがあります。
root #
ndctl list --dimms
[ { "dev":"nmem2", "id":"8089-00-0000-12325476" }, { "dev":"nmem1", "id":"8089-00-0000-11325476" }, { "dev":"nmem0", "id":"8089-00-0000-10325476" } ]
別のパラメータ、ndctl
list
を使用して、使用可能な領域を一覧表示することもできます。
領域は番号順に表示されない場合があります。
3つのNVDIMMしかありませんが、4つの領域として表示されることに注意してください。
root #
ndctl list --regions
[ { "dev":"region1", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region3", "size":202937204736, "available_size":202937204736, "type":"pmem", "iset_id":5903239628671731251 }, { "dev":"region0", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region2", "size":68182605824, "available_size":68182605824, "type":"blk" } ]
スペースは次の2つの異なる形態で利用できます: BLKタイプの3つの個別の64GB領域として、または3つがインターリーブされたNVDIMM上にすべてのスペースを提供するPMEMタイプの1つに結合された189GB領域を単一のボリュームとして。
available_size
に表示される値は、size
の値と同じであることに注意してください。これは、スペースのどれもまだ割り当てられていないということを意味します。
24.5.2 DAXを使用した単一のPMEMネームスペースとしてストレージを設定する #
最初の例として、直接アクセス(DAX)を使用した単一のPMEMネームスペースに3つのNVDIMMを設定します。
最初のステップは、新しいネームスペースを作成することです。
root #
ndctl create-namespace --type=pmem --mode=fsdax --map=memory
{ "dev":"namespace3.0", "mode":"memory", "size":199764213760, "uuid":"dc8ebb84-c564-4248-9e8d-e18543c39b69", "blockdev":"pmem3" }
これにより、DAXをサポートする、ブロックデバイス/dev/pmem3
が作成されます。デバイス名の3
(この場合はregion3
)は、親地域番号から継承されます。
--map=memory
オプションにより、NVDIMM上にPMEMストレージスペースの一部が置かれ、これはstruct pages
と呼ばれる内部カーネルデータ構造を割り当てるために使用できます。これにより、新しいPMEMネームスペースがO_DIRECT I/O
やRDMA
などの機能で使用できるようになります。
カーネルデータ構造用に一部の永続的なメモリを予約するのは、生成されるPMEMネームスペースの容量がPMEM親領域よりも小さいためです。
次に、新しいブロックデバイスがオペレーティングシステムで利用可能であることを確認します。
root #
fdisk -l /dev/pmem3
Disk /dev/pmem3: 186 GiB, 199764213760 bytes, 390164480 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes
使用する前に、他のドライブのように、フォーマットする必要があります。この例では、XFSを使用してフォーマットします。
root #
mkfs.xfs /dev/pmem3
meta-data=/dev/pmem3 isize=256 agcount=4, agsize=12192640 blks = sectsz=4096 attr=2, projid32bit=1 = crc=0 finobt=0, sparse=0 data = bsize=4096 blocks=48770560, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=23813, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
次に、新しいドライブを特定のディレクトリにマウントできます。
root #
mount -o dax /dev/pmem3 /mnt/pmem3
ここで、DAX対応デバイスがあることを確認できます。
root #
mount | grep dax
/dev/pmem3 on /mnt/pmem3 type xfs (rw,relatime,attr2,dax,inode64,noquota)
これで、XFSファイルシステムでフォーマットされ、DAXでマウントされたPMEMネームスペースが設定されます。
mmap()
は、ファイルに呼び出しを行い、ファイルシステムはNVDIMM上の永続的なメモリに直接マップする仮想アドレスを返し、ページキャッシュを完全にバイパスします。
そのファイルシステム内のファイルに対するfsync
またはmsync
呼び出しが行われても、変更されたデータは完全にNVDIMMに書き込まれています。これらの呼び出しはmmap
マッピングを介してユーザスペースで変更されているページに関連付けられているプロセッサキャッシュラインをフラッシュします。
24.5.2.1 ネームスペースの削除 #
同じストレージを使用する他のボリュームタイプを作成する前に、このPMEMボリュームをアンマウントしてから削除する必要があります。
まず、このボリュームをアンマウントします。
root #
umount /mnt/pmem3
次にネームスペースを無効にします。
root #
ndctl disable-namespace namespace3.0
disabled 1 namespace
そして削除します。
root #
ndctl destroy-namespace namespace3.0
destroyed 1 namespace
24.5.3 BTTを使用したPMEMネームスペースの作成 #
次の例では、BTTを使用するPMEMネームスペースを作成します。
root #
ndctl create-namespace --type=pmem --mode=sector
{ "dev":"namespace3.0", "mode":"sector", "uuid":"51ab652d-7f20-44ea-b51d-5670454f8b9b", "sector_size":4096, "blockdev":"pmem3s" }
次に、新しいデバイスが存在することを確認します。
root #
fdisk -l /dev/pmem3s
Disk /dev/pmem3s: 188.8 GiB, 202738135040 bytes, 49496615 sectors Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes
以前に設定したDAX対応PMEMネームスペースと同様に、このBTT対応PMEMネームスペースはNVDIMM上で使用可能なすべてのストレージを消費します。
デバイス名の最後のs
(/dev/pmem3s
)は、sector
を表し、BTTを使用するように設定されるPMEMとBLKネームスペースを簡単に区別するために使用されます。
ボリュームは前の例と同様に、フォーマットし、マウントできます。
ここに表示されるPMEMネームスペースはDAXを使用することはできません。その代わりに、BTTを使用して、「セクタ書き込みの原子性」を提供します。PMEMブロックドライバからのセクタ書き込みが行われるたびに、BTTは新しいセクタを割り当てて新しいデータを受け取ります。BTT原子性により、新しいデータが完全に書き込まれた後で、その内部マッピング構造をアップデートし、新しく書き込まれたデータがアプリケーションで利用できるようにします。このプロセス中に任意のポイントで電源障害が発生した場合、書き込みは完全に消失しますが、アプリケーションはまだ存在する古いデータにアクセスできます。これにより、「tornセクタ」と呼ばれる状況が回避されます。
このBTT対応PMEMネームスペースは他の標準ブロックデバイスのようにファイルシステムでフォーマットして使用できます。DAXと併用することはできません。ただし、このブロックデバイス上のファイルのmmap
マッピングはページキャッシュを使用します。
これらの両方の例で、すべてのNVDIMMからのスペースは単一ボリュームに結合されます。非冗長ディスクアレイと同様に、これは個々のNVDIMMでエラーが発生した場合に、ボリューム全体のコンテンツが失われる可能性があることを意味します。NVDIMMがボリューム内に含まれれば含まれるほど、このようなエラーの機会は多くなります。
24.5.3.1 PMEMボリュームの削除 #
前の例と同様ですが、スペースを再割り当てする前に、まずボリュームとネームスペースを削除する必要があります。
root #
ndctl disable-namespace namespace3.0
disabled 1 namespaceroot #
ndctl destroy-namespace namespace3.0
destroyed 1 namespace
24.5.4 BLKネームスペースの作成 #
この例では、3つの個別のBLKデバイスをNVDIMMごとに1つ作成します。
このアプローチの1つのメリットは、個々のNVDIMMで障害が発生した場合に、他のボリュームに影響しないということです。
ネームスペースごとにコマンドを繰り返す必要があります。
root #
ndctl create-namespace --type=blk --mode=sector
{ "dev":"namespace1.0", "mode":"sector", "uuid":"fed466bd-90f6-460b-ac81-ad1f08716602", "sector_size":4096, "blockdev":"ndblk1.0s" }root #
ndctl create-namespace --type=blk --mode=sector { "dev":"namespace0.0", "mode":"sector", "uuid":"12a29b6f-b951-4d08-8dbc-8dea1a2bb32d", "sector_size":4096, "blockdev":"ndblk0.0s" }root #
ndctl create-namespace --type=blk --mode=sector
{ "dev":"namespace2.0", "mode":"sector", "uuid":"7c84dab5-cc08-452a-b18d-53e430bf8833", "sector_size":4096, "blockdev":"ndblk2.0s" }
次に、新しいデバイスが存在していることを確認することができます。
root #
fdisk -l /dev/ndblk*
Disk /dev/ndblk0.0s: 63.4 GiB, 68115001344 bytes, 16629639 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/ndblk1.0s: 63.4 GiB, 68115001344 bytes, 16629639 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/ndblk2.0s: 63.4 GiB, 68115001344 bytes, 16629639 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
BLKネームスペース用に生成されたブロックデバイスは、/dev/ndblkX.Y
という名前が付けられます。ここで、Xは親領域番号で、Yはその領域内の固有のネームスペース番号です。したがって、/dev/ndblk2.0s
は領域2の子ネームスペース番号0です。
前の例と同様に、末尾のs
はこのネームスペースが(セクタベースのアクセス用に) BTTを使用するように設定されていることを意味します。block window
を介してアクセスされるため、プログラムはDAXを使用できないが、アクセスはキャッシュされます。
以前と同様に、これらのデバイスはすべてフォーマットされ、マウントされてから、使用する必要があります。
24.6 トラブルシューティング #
永続的なメモリはSSDストレージよりも耐久性に優れているが、摩耗する可能性があります。NVDIMMで障害が発生した場合、故障した個々のモジュールを孤立させる必要があるため、残りのデータは回復され、ハードウェアを交換することができます。次の3つの情報を検出する必要があります。
どのNVDIMMモジュールで障害が発生したか: 故障モジュールの物理的な場所。
どのネームスペース(
/dev/pmemX
)に現在不良ブロックが含まれているか。他のどのネームスペースまたは領域でその物理モジュールを使用するか。
故障モジュールとともに、それを使用するネームスペースおよび領域が決定された後で、他の影響を受けないネームスペースのデータはバックアップすることができ、サーバをシャットダウンして、NVDMMを交換することができます。
24.6.1 故障モジュールの検索 #
NVDIMMのセットはサーバのマザーボード上のDIMMスロットで検索されます。
結果のスペースで、オペレーティングシステムによってregion0
などの1つ以上のネームスペースが作成されます。
次に、これらの領域内で、特定のネームスペース(例: /dev/pmem1
や/dev/dax0
)が定義されます。
たとえば、3つのネームスペースとして設定されている3つのNVDIMMのスペースで構成される1つの領域があるとします。
NVDIMM 0 |
region0 |
/dev/pmem1 | |
NVDIMM 1 |
[X] |
/dev/pmem2s | |
NVDIMM 2 |
/dev/dax0 |
この例では、[X]とラベル付けされたregion0
の部分が破損しているか、故障しています。
次の作業が必要です。
影響を受ける領域を含むNVDIMMモジュールを特定します。
その領域が複数のNVDIMM間でインターリーブされている場合にはこれは特に重要です。
影響を受けるNVDIMM上の他のネームスペースのコンテンツをバックアップします。
この例では、
/dev/pmem2s
のコンテンツをバックアップする必要があります。NVDIMMのネームスペースと(マザーボードのメモリスロットが配置されている)物理的な位置との関係を特定します。
サーバをシャットダウンし、そのカバーを取り外し、欠陥モジュールを検出、取り外し、交換する必要があります。
24.6.2 永続的なメモリのテスト #
テストする場合は、nfit_test
カーネルモジュールが必要です。
テストの手順は、GitHub pageのndctl
コマンドにある「Unit test
」セクションのステップ1~4に詳しく説明されています。この章の最後の24.7項 「その他の情報」を参照してください。
パラメータ
list -RM
を指定してndctl
コマンドを実行します。これは不良ブロックのリストを示しています。
tux >
sudo
ndctl list -RM : : { "dev":"region5", "size":33554432, "available_size":33554432, "type":"pmem", "iset_id":4676476994879183020, "badblock_count":8, "badblocks":[ { "offset":32768, "length":8, "dimms":[ "nmem1" 1 ] } ] }, :特定のNVDIMMがここで特定されています。
パラメータ
list -Du
を指定してndctl
コマンドを実行します。これはDIMMの「処理」を示しています。
tux >
sudo
ndctl list -Du { "dev":"nmem1", "id":"cdab-0a-07e0-feffffff", "handle":"0x1", 1 "phys_id":"0x1" }, : :これはNVDIMMの処理です。
パラメータ
list --d DIMMM名
を指定して、ndctl
コマンドを実行します。tux >
sudo
ndctl list -R -d nmem1 [ { "dev":"region5", "size":33554432, "available_size":33554432, "type":"pmem", "iset_id":4676476994879183020, "badblock_count":8 }, : :
24.7 その他の情報 #
このトピックの詳細については、次のリストを参照してください。
NVDIMMシステムを構成するための手順、テストに関する情報、およびNVDIMMの有効化に関連する仕様へのリンクが記載されています。LinuxのNVDIMMサポートは現在開発中のため、このサイトも構築中です。
Linuxおよび他のオペレーティングシステムの下で、不揮発性メモリを搭載したシステムを設定、使用、およびプログラミングする方法に関する情報。ユーザスペースの永続的なメモリをプログラミングするために役立つAPIを提供することを目的とした、NVMライブラリ(NVML)について説明しています。
これは、カーネル開発者を対象としており、現在のLinuxカーネルツリーのドキュメントフォルダの一部です。NVDIMM有効化に含まれている異なるカーネルモジュール、カーネル実装のテクニカル詳細、
ndctl
ツールによって使用されるカーネルへのsysfs
インタフェースについて説明しています。Linuxカーネルの
libnvdimm
サブシステムを管理するためのユーティリティライブラリ。ユーザスペースライブラリ、ユニットテスト、およびマニュアルも含まれます。