AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 520231
Accepted
JeffFromOhio
JeffFromOhio
Asked: 2019-05-22 09:26:21 +0800 CST2019-05-22 09:26:21 +0800 CST 2019-05-22 09:26:21 +0800 CST

O que são namespaces nvme? Como eles funcionam?

  • 772

Recentemente, comecei a oferecer suporte ao Linux instalado em dispositivos com nvme ssds integrados. Percebi que os arquivos do dispositivo tinham um número extra, além de um número que identificava o número da unidade e o número da partição. As unidades IDE/SATA/SCSI normalmente têm apenas uma letra de unidade e um número de partição.

Por exemplo: /dev/nvme0n1p2

Fiquei me perguntando o que era a parte n1 e, depois de pesquisar um pouco, parece que identifica um 'namespace' nvme. As definições para isso eram meio vagas: "Um namespace NVMe é uma quantidade de memória não volátil (NVM) que pode ser formatada em blocos lógicos".

Então, isso funciona como uma partição definida no nível do controlador de hardware e não em uma tabela de partição MBR ou GPT? Um namespace pode abranger vários SSDs nvme físicos? Por exemplo, você pode criar um namespace que agrupa o armazenamento de vários ssds em um único namespace lógico, semelhante ao RAID 0?

O que você faria com um namespace NVME que você ainda não pode alcançar usando tabelas de partição ou LVM ou um sistema de arquivos que pode gerenciar vários volumes (como ZFS, Btrfs, etc)?

Além disso, por que parece que a numeração do namespace começa em 1 em vez de 0? Isso é apenas algo a ver com a forma como o NVME rastreia os números de namespace em um nível baixo (por exemplo, as partições também começam em 1, não em 0, porque é assim que o padrão para números de partição foi definido, então o kernel do Linux usa qualquer número de partição que está armazenado no disco é - acho que o nvme funciona da mesma maneira?)

linux devices
  • 2 2 respostas
  • 17562 Views

2 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2019-05-22T11:54:57+08:002019-05-22T11:54:57+08:00

    No NVM Express e padrões relacionados, os controladores dão acesso ao armazenamento dividido em um ou mais namespaces. Os namespaces podem ser criados e excluídos por meio do controlador, desde que haja espaço para eles (ou o armazenamento subjacente suporta provisionamento dinâmico) e vários controladores podem fornecer acesso a um namespace compartilhado. Como o armazenamento subjacente é organizado não é especificado pelo padrão, até onde posso dizer.

    No entanto, os SSDs NVMe típicos não podem ser combinados, pois cada um fornece seu próprio armazenamento e controlador conectado a uma porta PCI Express, e o ponto de acesso é o controlador, acima dos namespaces - portanto, um namespace não pode agrupar vários controladores (vários controladores podem fornecer acesso a um namespace compartilhado). É melhor pensar em namespaces como algo semelhante a SCSI LUNs usados ​​no armazenamento corporativo (SANs etc.).

    A numeração de namespace começa em 1 porque é assim que os identificadores de namespace por controlador funcionam. Os namespaces também têm identificadores mais longos e exclusivos globalmente.

    Os namespaces podem ser manipulados usando o nvmecomando, que fornece suporte para recursos NVMe de baixo nível, incluindo:

    • formatação, que realiza uma formatação de baixo nível e permite a utilização de vários recursos (apagamento seguro, seleção de formato LBA...);
    • anexando e desconectando, que permite que os controladores sejam anexados ou desanexados de um namespace (se eles suportarem e o namespace permitir).

    Anexar e desconectar não é algo que você encontrará em unidades NVMe de laptop ou desktop. Você o usaria com compartimentos de armazenamento NVMe, como os vendidos pela Dell EMC, que substituem as SANs iSCSI do passado.

    Consulte os padrões do NVM Express para obter detalhes (eles são relativamente fáceis de ler) e esta apresentação do tutorial do NVM Express para uma boa introdução.

    • 28
  2. maxschlepzig
    2021-06-06T03:54:47+08:002021-06-06T03:54:47+08:00

    Da boca do cavalo :

    Há muitas razões pelas quais o software host deseja dividir um SSD NVMe em vários namespaces: para isolamento lógico, multilocação, isolamento de segurança (criptografia por namespace), proteção contra gravação de um namespace para fins de recuperação, provisionamento excessivo para melhorar o desempenho e a resistência da gravação e assim por diante.

    Você pode verificar quais recursos um namespace suporta com o nvmecomando, por exemplo, via:

    # nvme id-ns -H /dev/nvme0n1  
    NVME Identify Namespace 1
    [..]
    LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes
                                             - Relative Performance: 0x2 Good (in use)
    LBA Format  1 : Metadata Size: 0   bytes - Data Size: 4096 bytes
                                             - Relative Performance: 0x1 Better
    

    Você pode verificar quantos namespaces seu dispositivo suporta assim:

    # nvme id-ctrl -H /dev/nvme0 | grep nn 
    nn        : 1
    

    Observando a especificação básica NVMe 1.4b , ela define NSIDs válidos como maiores que 0:

    NSIDs válidos são o intervalo de NSIDs possíveis que podem ser usados ​​para fazer referência a namespaces que existem no subsistema NVM. Qualquer NSID é válido, exceto se esse NSID for 0h ou maior que o campo Number of Namespaces relatado na estrutura de dados do Identify Controller (consulte a Figura 251). NSID FFFFFFFFh é um valor de transmissão usado para especificar todos os namespaces. Um NSID inválido é qualquer valor que não seja um NSID válido e também não seja o valor de transmissão.

    (Seção 6.1.2 NSIDs válidos e inválidos)

    Ter 0 como um valor inválido tem a vantagem de poder usar 0 para encerrar uma matriz de IDs de namespace (cf. Seção 4.10 Lista de namespaces).

    • 2

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve