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 1
como , 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 1
como , 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 0
Tipo 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 0
Tipo 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 0
Tipo 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 1
informações de proteção transferidas como os primeiros oito bytes de metadados. Quando esse valor é limpo para , o namespace não dá suporte a 0
informaçõ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 1
como , 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 0
informaçõ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 1
como , 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 |