estrutura NVME_IDENTIFY_NAMESPACE_DATA (nvme.h)

Contém valores que indicam funcionalidades e configurações específicas para um namespace específico.

Os recursos e as configurações comuns a todos os namespaces estão contidos na estrutura de dados NVME_IDENTIFY_NAMESPACE_DATA para o namespace com o Identificador de Namespace de 0xFFFFFFFF.

O arquivo de cabeçalho nvme.h define a constante NVME_NAMESPACE_ALL com um valor de 0xFFFFFFFF.

Se o controlador der suporte ao Gerenciamento de Namespace e o campo NSID (Identificador de Namespace) da estrutura NVME_COMMAND estiver definido como NVME_NAMESPACE_ALL, o controlador retornará uma estrutura de dados NVME_IDENTIFY_NAMESPACE_DATA que especifica recursos comuns em todos os namespaces.

Sintaxe

typedef struct {
  ULONGLONG                    NSZE;
  ULONGLONG                    NCAP;
  ULONGLONG                    NUSE;
  struct {
    UCHAR ThinProvisioning : 1;
    UCHAR NameSpaceAtomicWriteUnit : 1;
    UCHAR DeallocatedOrUnwrittenError : 1;
    UCHAR SkipReuseUI : 1;
    UCHAR NameSpaceIoOptimization : 1;
    UCHAR Reserved : 3;
  } NSFEAT;
  UCHAR                        NLBAF;
  struct {
    UCHAR LbaFormatIndex : 4;
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR Reserved : 3;
  } FLBAS;
  struct {
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR MetadataInSeparateBuffer : 1;
    UCHAR Reserved : 6;
  } MC;
  struct {
    UCHAR ProtectionInfoType1 : 1;
    UCHAR ProtectionInfoType2 : 1;
    UCHAR ProtectionInfoType3 : 1;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR InfoAtEndOfMetadata : 1;
    UCHAR Reserved : 3;
  } DPC;
  struct {
    UCHAR ProtectionInfoTypeEnabled : 3;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR Reserved : 4;
  } DPS;
  struct {
    UCHAR SharedNameSpace : 1;
    UCHAR Reserved : 7;
  } NMIC;
  NVM_RESERVATION_CAPABILITIES RESCAP;
  struct {
    UCHAR PercentageRemained : 7;
    UCHAR Supported : 1;
  } FPI;
  struct {
    UCHAR ReadBehavior : 3;
    UCHAR WriteZeroes : 1;
    UCHAR GuardFieldWithCRC : 1;
    UCHAR Reserved : 3;
  } DLFEAT;
  USHORT                       NAWUN;
  USHORT                       NAWUPF;
  USHORT                       NACWU;
  USHORT                       NABSN;
  USHORT                       NABO;
  USHORT                       NABSPF;
  USHORT                       NOIOB;
  UCHAR                        NVMCAP[16];
  USHORT                       NPWG;
  USHORT                       NPWA;
  USHORT                       NPDG;
  USHORT                       NPDA;
  USHORT                       NOWS;
  USHORT                       MSSRL;
  ULONG                        MCL;
  UCHAR                        MSRC;
  UCHAR                        Reserved2[11];
  ULONG                        ANAGRPID;
  UCHAR                        Reserved3[3];
  struct {
    UCHAR WriteProtected : 1;
    UCHAR Reserved : 7;
  } NSATTR;
  USHORT                       NVMSETID;
  USHORT                       ENDGID;
  UCHAR                        NGUID[16];
  UCHAR                        EUI64[8];
  NVME_LBA_FORMAT              LBAF[16];
  UCHAR                        Reserved4[192];
  UCHAR                        VS[3712];
} NVME_IDENTIFY_NAMESPACE_DATA, *PNVME_IDENTIFY_NAMESPACE_DATA;

Membros

NSZE

Indica o tamanho total do namespace em blocos lógicos.

Um namespace de tamanho n consiste em LBA (Endereço de Bloco Lógico) 0 por meio (n - 1)de . O número de blocos lógicos é baseado no tamanho de LBA formatado. Esse campo é indefinido antes do namespace ser formatado.

NCAP

Indica o número máximo de blocos lógicos que podem ser alocados no namespace a qualquer momento.

O número de blocos lógicos é baseado no tamanho de LBA formatado. Esse campo é indefinido antes do namespace ser formatado.

O campo NCAP é usado no caso de provisionamento fino e relata um valor menor ou igual ao Tamanho do Namespace (NSZE).

Os LBAs sobressalentes não são relatados como parte deste campo. Um valor de 0h para a Capacidade do Namespace (NCAP) indica que a ID do namespace é uma ID de namespace inativa. Um bloco lógico é alocado quando é gravado com um comando Write ou Write Uncorrectable. Um bloco lógico pode ser desalocado usando o comando Gerenciamento de Conjunto de Dados .

NUSE

Indica o número atual de blocos lógicos alocados no namespace.

O valor desse campo é menor ou igual ao valor do campo NCAP de Capacidade do Namespace.

O número de blocos lógicos é baseado no tamanho de LBA formatado. Ao usar o conjunto de comandos NVM: um bloco lógico é alocado quando é gravado com um comando Write ou Write Uncorrectable. Um bloco lógico pode ser desalocado usando o comando Gerenciamento de Conjunto de Dados .

Um controlador pode relatar um valor NUSE igual a um valor NCAP em todos os momentos se o produto não for direcionado para ambientes de provisionamento finos.

NSFEAT

Uma estrutura de Recursos de Namespace (NSFEAT) que contém campos que definem recursos do namespace.

NSFEAT.ThinProvisioning

O bit 0 da estrutura NSFEAT indica se o namespace dá suporte ao provisionamento fino.

Quando esse valor é definido como 1, o namespace dá suporte ao provisionamento fino. Especificamente, a NCAP (Capacidade de Namespace) relatada pode ser menor que o Tamanho do Namespace (NSZE). Quando esse recurso tem suporte e há suporte para o comando Gerenciamento de Conjunto de Dados, a desalocação de LBAs será refletida no campo Utilização de Namespace (NUSE).

Quando esse valor é limpo para 0, ele indica que o provisionamento fino não tem suporte e os campos NSZE e NCAP relatam o mesmo valor.

NSFEAT.NameSpaceAtomicWriteUnit

O bit 1 da estrutura NSFEAT indica se os Parâmetros de Limite Atômico do Namespace são definidos para esse namespace.

Quando esse valor é definido como 1, os campos NAWUN, NAWUPF e NACWU são definidos para esse namespace e devem ser usados pelo host para esse namespace em vez dos campos AWUN, AWUPF e ACWU na estrutura de dados Identificar Controlador .

Quando esse valor é limpo para 0, o controlador não dá suporte aos campos NAWUN, NAWUPF e NACWU para esse namespace. Nesse caso, o host deve usar os campos AWUN, AWUPF e ACWU definidos na estrutura de dados Identificar Controlador .

NSFEAT.DeallocatedOrUnwrittenError

O bit 2 da estrutura NSFEAT indica se o controlador dá suporte ao erro Bloco Lógico Desalocado ou Não Escrito para esse namespace.

Quando esse valor é definido como 1, o controlador dá suporte ao erro Bloco Lógico Desalocado ou Não Escrito (NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK) para esse namespace. Quando esse valor é limpo para 0, o controlador não dá suporte ao erro de NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK para esse namespace.

NSFEAT.SkipReuseUI

O bit 3 da estrutura NSFEAT é uma configuração para o recurso Ignorar Reutilizar interface do usuário.

NSFEAT.NameSpaceIoOptimization

NSFEAT.Reserved

Os bits 4:7 da estrutura NSFEAT são reservados.

NLBAF

Define o número de combinações de tamanho de dados LBA e tamanho de metadados compatíveis com o namespace.

Os formatos LBA são alocados em ordem (começando com 0) e empacotados sequencialmente. Esse é um valor baseado em 0. O número máximo de formatos LBA que podem ser indicados como com suporte é 16.

Os formatos LBA com suporte são indicados no campo LBAF (bytes 128 – 191 dessa estrutura de dados). Os metadados podem ser transferidos como parte do LBA (criando um LBA estendido que é um tamanho LBA maior exposto ao aplicativo) ou podem ser transferidos como um buffer contíguo separado de dados. Os metadados não podem ser divididos entre o LBA e um buffer de metadados separado.

É recomendável que o software e os controladores façam a transição para um tamanho LBA que seja 4KB ou maior para eficiência de ECC no controlador. Se fornecer metadados, é recomendável que pelo menos 8 bytes sejam fornecidos por bloco lógico para habilitar o uso com proteção de dados de ponta a ponta.

FLBAS

Uma estrutura FLBAS (Tamanho de LBA Formatado) que contém campos que indicam o tamanho dos dados LBA e a combinação de tamanho de metadados com a qual o namespace foi formatado.

FLBAS.LbaFormatIndex

Os bits 0:3 da estrutura FLBAS especificam um dos 16 formatos LBA com suporte indicados nessa estrutura de dados.

FLBAS.MetadataInExtendedDataLBA

O bit 4 da estrutura FLBAS indica se os metadados são transferidos no final do LBA de dados, criando um LBA de dados estendido.

Quando esse valor é definido como 1, os metadados são transferidos no final dos dados LBA, criando um LBA de dados estendido. Quando esse valor é limpo para 0, ele indica que todos os metadados de um comando são transferidos como um buffer contíguo separado de dados.

O bit 4 não é aplicável quando não há metadados.

FLBAS.Reserved

Os bits 5:7 da estrutura FLBAS são reservados.

MC

Uma estrutura mc (recursos de metadados) que contém campos que indicam os recursos para metadados.

MC.MetadataInExtendedDataLBA

O bit 0 da estrutura mc indica se o namespace dá suporte aos metadados que estão sendo transferidos como parte de um LBA de dados estendidos.

Quando esse valor é definido 1como , o namespace dá suporte aos metadados que estão sendo transferidos como parte de um LBA de dados estendidos. Quando esse valor é limpo para 0, ele indica que o namespace não dá suporte aos metadados que estão sendo transferidos como parte de um LBA de dados estendidos.

MC.MetadataInSeparateBuffer

O bit 1 da estrutura MC indica se o namespace dá suporte aos metadados que estão sendo transferidos como parte de um buffer separado.

Quando esse valor é definido 1como , o namespace dá suporte aos metadados que estão sendo transferidos como parte de um buffer separado especificado no campo Ponteiro de Metadados (MPTR) da estrutura Comando . Quando esse valor é limpo para 0, o namespace não dá suporte aos metadados que estão sendo transferidos como parte de um buffer separado.

MC.Reserved

Os bits 7:2 da estrutura MC são reservados.

DPC

Uma estrutura DPC (Recursos de Proteção de Dados) de ponta a ponta que contém campos que indicam os recursos para o recurso de proteção de dados de ponta a ponta.

Vários bits podem ser definidos neste campo.

DPC.ProtectionInfoType1

O bit 0 da estrutura DPC indica se o namespace dá suporte ao Tipo de Informação de Proteção 1.

Quando esse valor é definido como 1, o namespace dá suporte ao Tipo de Informações de Proteção 1. Quando esse valor é limpo para , o namespace não dá suporte ao 0Tipo de Informações de Proteção 1.

DPC.ProtectionInfoType2

O bit 1 da estrutura DPC indica se o namespace dá suporte ao Tipo de Informações de Proteção 2.

Quando esse valor é definido como 1, o namespace dá suporte ao Tipo de Informações de Proteção 2. Quando esse valor é limpo para , o namespace não dá suporte ao 0Tipo de Informações de Proteção 2.

DPC.ProtectionInfoType3

O bit 2 da estrutura DPC indica se o namespace dá suporte ao Tipo de Informações de Proteção 3.

Quando esse valor é definido como 1, o namespace dá suporte ao Tipo de Informações de Proteção 3. Quando esse valor é limpo para , o namespace não dá suporte ao 0Tipo de Informações de Proteção 3.

DPC.InfoAtBeginningOfMetadata

O bit 3 da estrutura DPC indica se o namespace dá suporte a informações de proteção transferidas como os primeiros oito bytes de metadados.

Quando esse valor é definido como , o namespace dá suporte a 1informações de proteção transferidas como os primeiros oito bytes de metadados. Quando esse valor é limpo para , o namespace não dá suporte a 0informações de proteção transferidas como os primeiros oito bytes de metadados.

DPC.InfoAtEndOfMetadata

O bit 4 da estrutura DPC indica se o namespace dá suporte a informações de proteção transferidas como os últimos oito bytes de metadados.

Quando esse valor é definido 1como , o namespace dá suporte a informações de proteção transferidas como os últimos oito bytes de metadados. Quando esse valor é limpo para , o namespace não dá suporte a 0informações de proteção transferidas como os últimos oito bytes de metadados.

DPC.Reserved

Os bits 7:5 da estrutura DPC são reservados.

DPS

Uma estrutura DPS (Configurações de Tipo de Proteção de Dados) de ponta a ponta que contém campos que indicam as configurações de Tipo para o recurso de proteção de dados de ponta a ponta.

NVME_PROTECTION_INFORMATION_TYPES

DPS.ProtectionInfoTypeEnabled

Os bits 2:0 da estrutura DPS são um valor NVME_PROTECTION_INFORMATION_TYPES que indica se as Informações de Proteção estão habilitadas e o tipo de Informações de Proteção habilitadas.

DPS.InfoAtBeginningOfMetadata

O bit 3 da estrutura DPS indica se as informações de proteção, se habilitadas, são transferidas como os primeiros oito bytes de metadados.

Quando esse valor é definido 1como , as informações de proteção, se habilitadas, são transferidas como os primeiros oito bytes de metadados. Quando esse valor é limpo para 0, as informações de proteção, se habilitadas, são transferidas como os últimos oito bytes de metadados.

DPS.Reserved

Os bits 7:4 da estrutura DPS são reservados.

NMIC

Uma estrutura de E/S de Vários Caminhos de Namespace e NMIC (Recursos de Compartilhamento de Namespace) que contém campos que especificam as funcionalidades de E/S de vários caminhos e de compartilhamento de namespace do namespace.

NMIC.SharedNameSpace

O bit 0 da estrutura NMIC indica se o namespace pode ser um namespace compartilhado.

Quando esse valor é definido como 1, o namespace pode estar acessível por dois ou mais controladores no subsistema NVM. Quando esse valor é limpo para 0, o namespace é um namespace privado e só pode ser acessado pelo controlador que retornou essa estrutura de dados de namespace.

NMIC.Reserved

Os bits 7:1 da estrutura NMIC são reservados.

RESCAP

Uma estrutura RESCAP (Recursos de Reserva) que contém campos que especificam os recursos de reserva do namespace.

Um valor de 00h neste campo indica que as reservas não são compatíveis com esse namespace.

FPI

Uma estrutura de FPI (Indicador de Progresso de Formato) que contém campos que indicam a porcentagem do namespace que permanece a ser formatado quando uma operação de formato está em andamento.

FPI.PercentageRemained

Os bits 0:6 da estrutura FPI indicam a porcentagem do namespace que ainda está para ser formatado. Por exemplo, um valor de 25 indica que 75% do namespace foi formatado e 25% ainda está para ser formatado.

Um valor de 0 indica que o namespace é formatado com o formato especificado pelos campos FLBAS e DPS nessa estrutura de dados.

FPI.Supported

O bit 7 da estrutura FPI indica se o namespace dá suporte ao Indicador de Progresso do Formato definido pelo FPI. Campo PercentageRemained .

Quando esse valor é definido como 1, o namespace dá suporte ao Indicador de Progresso de Formato definido pelo FPI. Campo PercentageRemained . Quando esse valor é limpo para 0, o namespace não dá suporte ao Indicador de Progresso do Formato e ao FPI. O campo PercentageRemained será limpo para 0h.

DLFEAT

DLFEAT.ReadBehavior

DLFEAT.WriteZeroes

DLFEAT.GuardFieldWithCRC

DLFEAT.Reserved

NAWUN

Indica o tamanho específico do namespace da operação de gravação com garantia de ser gravado atomicamente na NVM durante a operação normal.

Um valor de 0h indica que o tamanho desse namespace tem o mesmo tamanho que o relatado no campo AWUN da estrutura de dados Identificar Controlador . Todos os outros valores especificam um tamanho em termos de blocos lógicos usando a mesma codificação que o campo AWUN .

NAWUPF

Indica o tamanho específico do namespace da operação de gravação com garantia de ser gravado atomicamente na NVM durante uma falha de energia ou condição de erro.

Um valor de 0h indica que o tamanho desse namespace tem o mesmo tamanho que o relatado no campo AWUPF da estrutura de dados Identifi Controller . Todos os outros valores especificam um tamanho em termos de blocos lógicos usando a mesma codificação que o campo AWUPF .

NACWU

Indica o tamanho específico do namespace da operação de gravação com garantia de ser gravado atomicamente na NVM para um comando fusido Compare e Write.

Um valor de 0h indica que o tamanho desse namespace tem o mesmo tamanho que o relatado no campo ACWU da estrutura de dados Identificar Controlador . Todos os outros valores especificam um tamanho em termos de blocos lógicos usando a mesma codificação que o campo ACWU .

NABSN

Indica o tamanho do limite atômico para esse namespace para o valor NAWUN .

Esse campo é especificado em blocos lógicos. As gravações nesse namespace que cruzam limites atômicos não têm garantia de serem atômicas para a NVM em relação a outros comandos de leitura ou gravação.

Um valor de 0h indica que não há limites atômicos para operações de gravação normais. Todos os outros valores especificam um tamanho em termos de blocos lógicos usando a mesma codificação que o campo AWUN .

NABO

Indica o LBA (Endereço de Bloco Lógico) nesse namespace em que o primeiro limite atômico é iniciado.

Se os campos NABSN e NABSPF forem limpos para 0h, o campo NABO será limpo para 0h. O valor de NABO deve ser menor ou igual a NABSN e NABSPF.

NABSPF

Indica o tamanho do limite atômico para esse namespace específico ao valor de Falha de Energia da Unidade de Gravação Atômica do Namespace.

Esse campo é especificado em blocos lógicos. As gravações nesse namespace que ultrapassam limites atômicos não têm garantia de serem atômicas em relação a outros comandos de leitura ou gravação e não há garantia de dados retornados nas leituras subsequentes dos blocos lógicos associados.

Um valor de 0h indica que não há limites atômicos para falha de energia ou condições de erro. Todos os outros valores especificam um tamanho em termos de blocos lógicos usando a mesma codificação que o campo AWUPF .

NOIOB

Indica o limite de E/S ideal do namespace (NOIOB).

NVMCAP[16]

Indica o tamanho total da NVM alocada para esse namespace.

O valor desse campo está em bytes. Esse campo terá suporte se houver suporte para os comandos Gerenciamento de Namespace e Anexo de Namespace.

Observação: esse campo pode não corresponder ao tamanho do bloco lógico multiplicado pelo campo Tamanho do Namespace (NSZE). Devido ao provisionamento fino ou a outras configurações (como resistência), esse campo pode ser maior ou menor do que o NSZE relatado.

NPWG

NPWA

NPDG

NPDA

NOWS

MSSRL

MCL

MSRC

Reserved2[11]

Um campo reservado.

ANAGRPID

Reserved3[3]

Bytes 192:383A são reservados.

NSATTR

NSATTR.WriteProtected

NSATTR.Reserved

NVMSETID

Indica o NVM Set Identifier (NVMSETID) associado.

ENDGID

Indica o ENDGID (Identificador de Grupo de Resistência) associado.

NGUID[16]

Contém um valor de 128 bits que é globalmente exclusivo e atribuído ao namespace quando o namespace é criado.

O campo NGUID (Identificador Global exclusivo do namespace) permanece fixo durante toda a vida útil do namespace e é preservado entre operações de namespace e controlador (como redefinição do controlador e formato de namespace).

Esse campo usa o formato de designador de 16 bytes baseado em EUI-64.

  • Os bytes 114:112 contêm o valor de company_id de 24 bits atribuído pela Autoridade de Registro do IEEE.
  • Os bytes 119:115 contêm um identifer de extensão atribuído pela organização correspondente.
  • Os bytes 111:104 contêm o identificador de extensão específico do fornecedor atribuído pela organização correspondente.

Confira as diretrizes do IEEE EUI-64 para obter mais informações. O controlador deve especificar um identificador de namespace globalmente exclusivo neste campo ou no campo EUI64 quando o namespace for criado.

EUI64[8]

Contém um IDENTIFICADOR Exclusivo Estendido IEEE de 64 bits (EUI-64) que é globalmente exclusivo e atribuído ao namespace quando o namespace é criado.

O campo EUI64 permanece fixo durante toda a vida útil do namespace e é preservado entre operações de namespace e controlador (como redefinição do controlador e formato de namespace).

O EUI-64 é uma concatenação de um valor de company_id de 24 bits ou 36 bits atribuído pela Autoridade de Registro do IEEE e um identificador de extensão atribuído pela organização correspondente. Confira as diretrizes do IEEE EUI-64 para obter mais informações.

O controlador deve especificar um identificador de namespace globalmente exclusivo neste campo ou no campo NGUID quando o namespace é criado. Se o controlador não conseguir alocar um identificador global exclusivo de 64 bits, esse campo será limpo para 0h.

LBAF[16]

Contém uma matriz de 16 estruturas de NVME_LBA_FORMAT . Cada estrutura na matriz especifica um Formato LBA e indica que ela é compatível com o controlador.

A posição baseada em zero de uma estrutura na matriz corresponde ao nome do Formato LBA, de modo que LBA Format 0 (LBAF0) está na posição 0, LBA Format 1 (LBAF1) está na posição 1 e assim por diante, até LBA Formato 15 (LBAF15) na posição 15.

Reserved4[192]

VS[3712]

Esse intervalo de bytes (384:4095) é alocado para uso específico do fornecedor (VS).

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Cabeçalho nvme.h