20.7. Création d'un espace de noms DAX sur un NVDIMM
Configurez le périphérique NVDIMM connecté à votre système en mode DAX pour prendre en charge le stockage de caractères avec des capacités d'accès direct.
Envisagez les options suivantes :
- Reconfiguration d'un espace de noms existant en mode DAX.
- Création d'un nouvel espace de noms DAX pour les appareils, s'il y a de la place disponible.
20.7.1. NVDIMM en mode d'accès direct au périphérique
L'accès direct aux périphériques (device DAX, devdax
) permet aux applications d'accéder directement au stockage, sans passer par un système de fichiers. L'avantage de device DAX est qu'il fournit une granularité de faute garantie, qui peut être configurée en utilisant l'option --align
de l'utilitaire ndctl
.
Pour les architectures Intel 64 et AMD64, les granularités de défaut suivantes sont prises en charge :
- 4 KiB
- 2 MiB
- 1 GiB
Les nœuds DAX ne prennent en charge que les appels système suivants :
-
open()
-
close()
-
mmap()
Vous pouvez afficher les alignements pris en charge pour votre périphérique NVDIMM à l'aide de la commande ndctl list --human --capabilities
. Par exemple, pour les visualiser pour le périphérique region0, utilisez la commande ndctl list --human --capabilities -r region0
.
Les appels système read()
et write()
ne sont pas pris en charge, car le cas d'utilisation du dispositif DAX est lié au modèle de programmation de la mémoire non volatile de la SNIA.
20.7.2. Reconfiguration d'un espace de noms NVDIMM existant en mode DAX de périphérique
Vous pouvez reconfigurer un espace de noms NVDIMM (Non-Volatile Dual In-line Memory Modules) existant en mode DAX.
La reconfiguration d'un espace de noms supprime les données précédemment stockées dans l'espace de noms.
Conditions préalables
-
L'utilitaire
ndctl
est installé. Pour plus d'informations, voir Installation de ndctl.
Procédure
Liste de tous les espaces de noms de votre système :
# ndctl list --namespaces --idle [ { "dev":"namespace1.0", "mode":"raw", "size":34359738368, "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4" "state":"disabled", "numa_node":1 }, { "dev":"namespace0.0", "mode":"raw", "size":38615912448, "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817", "state":"disabled", "numa_node":0 } ]
Reconfigurer tout espace de noms :
# ndctl create-namespace --force --mode=devdax --reconfig=namespace-ID
Exemple 20.3. Reconfiguration d'un espace de noms en tant que dispositif DAX
La commande suivante reconfigure
namespace0.1
pour le stockage de données prenant en charge DAX. Elle est alignée sur une granularité de panne de 2 Mo afin de garantir que le système d'exploitation effectue des pannes sur des pages de 2 Mo à la fois :# ndctl create-namespace --force --mode=devdax --align=2M --reconfig=namespace0.1 { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.1", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
L'espace de noms est désormais disponible sur le site
/dev/dax0.1
.
Vérification
Vérifiez si les espaces de noms existants sur votre système sont reconfigurés :
# ndctl list --namespace namespace0.1 [ { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "chardev":"dax0.1", "align":2097152 } ]
Ressources supplémentaires
-
La page de manuel
ndctl-create-namespace(1)
20.7.3. Création d'un nouvel espace de noms NVDIMM en mode device DAX
Vous pouvez créer un nouvel espace de noms DAX sur un périphérique NVDIMM (Non-Volatile Dual In-line Memory Modules) s'il y a de l'espace disponible dans la région.
Conditions préalables
-
L'utilitaire
ndctl
est installé. Pour plus d'informations, voir Installation de ndctl. Le périphérique NVDIMM prend en charge les étiquettes permettant de créer plusieurs espaces de noms dans une région. Vous pouvez le vérifier à l'aide de la commande suivante :
# ndctl read-labels nmem0 >/dev/null read 1 nmem
Cela indique qu'il a lu l'étiquette d'un périphérique NVDIMM. Si la valeur est
0
, cela signifie que votre périphérique ne prend pas en charge les étiquettes.
Procédure
Dressez la liste des régions
pmem
de votre système qui ont de l'espace disponible. Dans l'exemple suivant, de l'espace est disponible dans les régions region1 et region0:# ndctl list --regions [ { "dev":"region1", "size":2156073582592, "align":16777216, "available_size":2117418876928, "max_available_extent":2117418876928, "type":"pmem", "iset_id":-9102197055295954944, "badblock_count":1, "persistence_domain":"memory_controller" }, { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2143188680704, "max_available_extent":2143188680704, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller" } ]
Attribuer un ou plusieurs espaces de noms sur l'une des régions disponibles :
# ndctl create-namespace --mode=devdax --region=region_N_ --size=namespace-size
Exemple 20.4. Création d'un espace de noms sur une région
La commande suivante crée un espace de noms DAX de 36 Go sur region0. Il est aligné sur une granularité de panne de 2 Mo afin de garantir que le système d'exploitation effectue des pannes sur des pages de 2 Mo à la fois :
# ndctl create-namespace --mode=devdax --region=region0 --align=2M --size=36G { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.2", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
L'espace de noms est désormais disponible à l'adresse
/dev/dax0.2
.
Vérification
Vérifier si le nouvel espace de noms est créé en mode secteur :
# ndctl list -RN -n namespace0.2 { "regions":[ { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2065879269376, "max_available_extent":2065879269376, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller", "namespaces":[ { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "chardev":"dax0.2", "align":2097152 } ] } ] }
Ressources supplémentaires
-
La page de manuel
ndctl-create-namespace(1)