Arquitetura do computador: os teclados USB são menos responsivos devido à faixa IRQ estreita?

19

Aqui está uma afirmação em que acabei de pensar. Alguém pode me dizer se e por que isso é verdade?

Declaração: Como os teclados USB dependem de um driver e arquitetura genéricos USB que só têm acesso a níveis mais baixos de IRQ, ele não pode conceder ao teclado acesso a um IRQ com a prioridade mais alta que outro controlador (por exemplo, PS2).

Isso (se for verdade) significa que os teclados USB teriam prioridade mais baixa (em termos de disponibilidade mais que velocidade) do que os teclados conectados a outro tipo de porta (como PS2)?

Tomemos, por exemplo, um teclado USB mapeado para um IRQ de prioridade média, em um sistema com defeito preso a outra rotina de interrupção de prioridade média. Devido à sua prioridade relativamente igual, os eventos do teclado seriam ignorados e você não poderá enviar Ctrl-Alt-del ou qualquer outro pressionamento de tecla de emergência. Se o teclado tivesse uma prioridade mais alta, o sistema poderia entrar na rotina de interrupção de pressionamento de tecla.

Ou o controlador USB tem um alcance IRQ suficiente (seja contínuo por prioridade ou não) para dar ao teclado a prioridade necessária (basicamente logo abaixo da falta de energia)?

E os teclados virtuais, mapeados através da conexão de rede em uma sessão de área de trabalho remota?

Edição: Minha pergunta não é muito sobre velocidade (veja comentários): a questão principal é: um teclado PS2 tem mais chances de falar com uma CPU que está presa em algum lugar em uma prioridade de interrupção maior que USB e menor que teclado?

PPC
fonte
2
Gostaria de saber se o mesmo se aplica aos mouses USB. O meu parece que sim depois de mudar a interface (mas não o mouse em si) há alguns meses.
22680 martineau
Se é verdade para o teclado, provavelmente é o mesmo para ratos; mas provavelmente menos importante, uma vez que não há combinações de teclas de emergência para o mouse
PPC
Eu não acho que isso seja algo sensato para se preocupar. Se você fizesse isso e o teclado travasse, as interfaces de rede passariam fome e você não conseguiria controlar o sistema remotamente. Parece que você está apenas trocando um problema por outro.
David Schwartz
1
@DavidSchwartz: É principalmente uma questão teórica, e tirada do ponto de vista de um arquiteto de computadores. Ainda assim, existe um aplicativo do PoV de um usuário: "meu computador está travado, não responde ao Ctrl-Alt-Backspace: devo procurar um teclado PS2 ou esquecê-lo e reinicializá-lo com força"
PPC
2
@PPC: Ctl-alt-del provavelmente não funcionaria de qualquer maneira. O processo de reinicialização é controlado por software de alto nível que encerra programas, libera caches e assim por diante. Com uma tempestade de interrupções, o software de alto nível não funciona.
David Schwartz

Respostas:

17

Não se trata da faixa de IRQ, mas de três fatores principais:

  1. Quantidade de aglomeração de ônibus
  2. Quantidade de dados
  3. Comprimento do caminho dos dados

No passado, teclados e mouses tinham um IRQ dedicado (IRQ1 para teclados, IRQ12 para mouses PS / 2).

Isso significava que, quando uma tecla era pressionada, ela tinha uma linha quase direta com a CPU (via PIC; mas ainda assim, apenas um salto). Isso permitiu que os eventos do teclado fossem processados ​​muito rapidamente no hardware, principalmente porque ele possuía IRQ1. (É claro que isso é tudo sobre o uso normal do teclado e ignora a linha de redefinição que vai do controlador do teclado diretamente para a CPU.)

Por outro lado, os dispositivos USB compartilham o mesmo barramento e o IRQ do controlador USB (que geralmente é um dos direcionadores de IRQ que são compartilhados com outros dispositivos, como placas de rede, placas de vídeo e outros). Assim, com um teclado USB, os eventos vão do controlador do teclado, através do barramento USB para o controlador host USB, de lá para o PIC secundário, depois para o PIC principal e, em seguida, para os drivers no sistema operacional ou no BIOS , depois na CPU. Além disso, há dados de verificação de erros adicionados aos dados transferidos por USB.

Em outras palavras, simplesmente há mais coisas acontecendo com um teclado USB do que com um teclado AT ou PS / 2. O caminho dos dados é mais longo e há mais dados, e pode até ser necessário passar por software . Mesmo que a largura de banda USB seja suficientemente grande, ter outros dispositivos na mesma porta causa colisões e atrasos (você pode adicionar um hub, mas todas as portas nele ainda têm a mesma porta no controlador). Portanto, há muito mais espera acontecendo.

Além disso, ter seu próprio (IRQ significava que um teclado mais antigo poderia interromper o processamento da CPU sempre que necessário. Com USB, o teclado não possui esse mecanismo e só pode enviar alguns dados e esperar / esperar que o controlador USB interrompa a CPU em algum ponto.

Os teclados virtuais são ainda piores porque eles definitivamente passam por software que, obviamente, não pode competir com uma linha de hardware.

Aqui está uma visualização simples da diferença entre um teclado AT ou PS / 2 e um teclado USB:

insira a descrição da imagem aqui

Synetech
fonte
Não gosto tanto da velocidade quanto da prioridade: entendo que um caminho de dados mais longo pode fazer com que o pressionamento de tecla aguarde; mas estou pensando em "chances de que o pressionamento de tecla se perca em um sistema com defeito", que acho que não depende do tamanho do caminho.
PPC
Como o IRQ pode ser processado no software ANTES de atingir a CPU? Os APICs têm seus próprios processadores? Com suas rotinas na memória central? Eles 'emprestam' o tempo da CPU?
PPC
> "chances de a tecla ser perdida em um sistema com defeito" Depende da falha, mas sim, obviamente, um teclado USB tem uma chance muito maior de perder as teclas devido à complexidade extra. > Re: APICs Sim, eles têm um processador com algum nível de processamento, assim como o controlador do teclado possui um processador, as placas de vídeo possuem GPUs, etc. A maioria dos hardwares possui algum tipo de chip que lida com algum processamento.
Synetech
> Como o IRQ pode ser processado no software ANTES de atingir a CPU? Não apenas um teclado USB possui drivers, mas o controlador USB também possui drivers. Os dados do teclado não vão diretamente para a CPU; em vez disso, percorrem o teclado até o controlador USB, o driver, a unidade de teclado e, em seguida, a CPU ou outro software, conforme necessário Ctrl+Alt+Del. t funciona através de uma linha de hardware, mas é processado através de software.
Synetech
Portanto, se eu entendi bem, o fluxo de dados básico do meu pressionamento de tecla seria: controlador USB, APIC, CPU In através de IRQ de baixo preço, USB ISR / IST, IRQ auto-gerado pela CPU (como uma TRAP), teclado ISR / IST? Dessa forma, a prioridade relevante é a do controlador USB ..? Na minha pergunta, pensei que o controlador USB pudesse converter os pacotes USB em IRQ real do teclado.
PPC
14

Resposta curta

Ambos os teclados teriam desempenho absolutamente igual para o código no nível do usuário. Pode haver pequenas diferenças ( nano a microssegundos em um PC moderno) se você escrever drivers de dispositivo. Se o sistema travar, os dois teclados não resolveriam o problema. Vá para reinicialização completa.


Resposta longa TL; DR;

O que é uma interrupção?

Quando o hardware (ou alguma parte crítica do software interno do SO, como o kernel) requer um serviço de processador, ele aciona uma mensagem ou uma interrupção , solicitando que o processador adie o que está fazendo e atenda a essa solicitação.

Como funciona?

Quando o hardware gera uma interrupção (por exemplo, pressionar uma tecla), essa solicitação entra em um controlador de interrupção. O controlador interrompe imediatamente a CPU em uma única linha de seu código de máquina (a CPU ainda executa esta última linha). Quando o processador está pronto para atender a essa solicitação, solicita a um controlador de interrupção uma solicitação de interrupção (IRQ) e uma rotina de manipulação. O controlador de interrupção possui uma estrutura de dados interna - Tabela de Despacho de Interrupção que contém um ponteiro para uma rotina que deveria ser executada pela CPU para um IRQ específico.

Todas as interrupções diferentes correspondem ao nível de solicitação de interrupção (IRQL) limitado bem definido . Por exemplo, em sistemas x86, existem 32 IRQLs e, em x64 e IA64, existem realmente menos - 16 IRQLs. Claramente, existem mais dispositivos de hardware e serviços de software que os IRQLs, o que significa que todos os objetos do sistema compartilham IRQLs.

Tabela IRQLs para x64

    IRQL Descrição
--------------------------------------------
    15 Alto / Perfil
    14 Interrupção do Interprocessador / Potência
    13 Relógio
    12 Sincronizar
    11 Dispositivo N
    .. ...
     3 Dispositivo 1
     2 Despacho / DPC
     1 | APC
     0 Passivo / Baixo

IRQL maior (com número maior) tem prioridade mais alta. Todos os componentes de um sistema tentam manter o IRQL atual de um processador no nível mais baixo possível - 0. Se ocorrer uma interrupção de nível superior, o nível atual de IRQL de um processador é aumentado e as interrupções com nível inferior não serão tratadas até todas as interrupções com níveis mais altos são resolvidas. O IRQ pode ser manipulado em lote se o planejador de IRQ conseguir enfileirar vários IRQs do mesmo nível para execução do processador.

Qual é o ponto?

Tudo isso foi muito bem projetado para separar o usuário final das complexidades do hardware e criar uma arquitetura universal que pode funcionar com muitos tipos de hardware / software.

  1. O código no nível do usuário (ou seja, não no nível do kernel) é executado apenas quando o processador está no IRQL Passivo / Baixo (0). A questão é que você só pode manipular um evento pressionado por tecla em seu aplicativo depois que todos os IRQLs forem manipulados. Portanto, para um teclado, não importa o IRQL atribuído à interrupção do hardware.

  2. IRQL são apenas abstrações de SO e não são definidas . O IRQ e o IRQL correspondentes são armazenados no registro do Windows (por exemplo) e qualquer usuário entusiasmado pode alterá-los manualmente.

Conclusões

Citações da pergunta

Como os teclados USB dependem de um driver e arquitetura genéricos USB que só têm acesso a alguns canais de IRQ, ele não pode conceder ao teclado acesso a um IRQ com a prioridade mais alta que outro controlador (digamos PS2).

Talvez o autor tenha dito um menor IRQL em vez de menos canais de IRQ . De qualquer forma, isso realmente não importa, pois não é visível para o usuário em nenhum PC moderno. As possíveis diferenças são do nível de nano a microssegundos e ocorrem apenas no nível do kernel. Nos dois casos, o código no nível do usuário é bloqueado pelo kernel do SO.

Isso (se for verdade) significa que os teclados USB seriam menos responsivos do que os teclados conectados a outro tipo de porta?

Não é verdade por causa da maneira como o sistema operacional foi projetado. Se o sistema operacional estiver ocupado com algo e for "lento", os dois teclados se comportariam de forma idêntica.

Tomemos, por exemplo, um teclado USB mapeado para um IRQ de prioridade média, em um sistema com defeito que está preso em outra rotina de interrupção de prioridade média

Nesse caso, o sistema terá BSOD, as rotinas de manuseio de IRQ devem ser projetadas de acordo com um determinado padrão (por exemplo, devem ser rápidas, síncronas, sem bloqueio, etc.). Qualquer desvio disso e do kernel será BSOD.

Devido à sua prioridade relativamente igual, os eventos do teclado seriam ignorados e você não poderá enviar Ctrl-Alt-del ou qualquer outro pressionamento de tecla de emergência.

Se o sistema travar, muitas coisas podem dar errado, mas provavelmente o IRQL de pressionamento de tecla será tratado no nível do driver. O problema é que ele não será entregue ao aplicativo que assinou essa notificação, pois o sistema operacional está ocupado fazendo outra coisa.

oleksii
fonte
O aplicativo que estou direcionando é o gerenciador de janelas (caso fácil) ou o próprio sistema operacional. Espero que o meu CPU para soltar seu processamento USB-like-IRQL para receber limpa minha sync-discos-before-I-reinicialização-lo
PPC
>> Isso significa que os kbds USB são menos responsivos: você poderia detalhar sua resposta "não"?
PPC
@PPC se você criar um driver de dispositivo, os kbds USB poderão ser mais lentos por nano a microssegundos. Se você estiver interessado em algum código no nível do usuário, o código permanecerá bloqueado quando qualquer IRQL de nível> 1 estiver sendo tratado. Portanto, não importa se o kbd IRQL é igual ao IRQL mais alto ou ao IRQL médio. O código do usuário está bloqueado.
Oleksii