Native Command Queuing
# Native Command Queuing

O enfileiramento de comandos nativo também conhecido como NCQ (do acrônimo do inglês Native Command Queuing), é um protocolo de comando para dispositivos com o padrão SATA que possibilita ter diversos comandos pendentes serem executados em uma ordem internamente determinada pelo dispositivo (disco rígido).
Em termos simples, a funcionalidade do NCQ é um tanto similar a um elevador. O elevador viaja sequencialmente de andar a andar e deixa as pessoas entrarem e saírem. Não segue a sequência que os usuários apertaram os botões de pedido do andar porque significaria uma carga mecânica excessiva e um tempo muito mais longo para esperar ou embarcar.
Para o NCQ ser habilitado, ele precisa ser suportado, e estar ativado, no adaptador de barramento SATA do computador, e também no disco rígido em si. Adicionalmente, o driver apropriado deve estar carregado no sistema operacional, para habilitar o NCQ no adaptador de barramento do computador.

## Desempenho e resistência

NCQ gera benefícios em grandes proporções, especialmente na área de desempenho, produzindo vasto desempenho com alta transição de workloads. O benefício do desempenho pode atingir uma adição de desempenho de um dispositivo de 10K SATA. Adicionalmente, em consequência da sua manipulação de dados e de comandos, NCQ reduz o desgaste mecânico nos dispositivos e melhora sua resistência.

## Como o NCQ trabalha

NCQ compreende três componentes principais de funcionalidade. Dentro de cada um deles inclui as potencialidades que aumentam o desempenho e a duração de movimentações de SATA.
* Comando de enfileiramento: um dispositivo SATA NCQ pode enfileirar comandos e executá-los imediatamente. O dispositivo sabe qual protocolo que deve ser aplicado aos diferentes comandos. Aplica um tag único para os comandos.
* Transferindo dados para cada comando: NCQ deixa o dispositivo ajustar uma operação de "acesso direto à memória" (DMA) para transferência de dados sem intervenção do software do host. O dispositivo controla o motor do "Acesso Direto à Memória", seleciona transferências para minimizar latências, e otimiza o pedido de comando.
* Status de retorno para comandos terminados: O dispositivo retorna um status para comandos terminados. O status do comando é "corrida-livre", que significa que um status para qualquer comando pode ser comunicado em qualquer momento, sem um "handshake" entre o dispositivo e o host. O host e o dispositivo usam um registro de 32-bit para comunicar-se sobre comandos proeminentes, e mantém este registro sempre exato.