BITCOIN

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?


A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

Autor | Tecnologia de programação Cosmos

Editor-Chefe | Carol

CSDN Download da Vision China

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

Mecanismo de interrupção

Eu sou o Ah Q do Workshop No. 1 da CPU, estou aqui novamente

Nosso trabalho diário é executar constantemente instruções de código, mas esse trabalho aparentemente simples não é fácil.

Não podemos ficar entediados e não ligamos para a execução de código, precisamos lidar com outras unidades conectadas à placa-mãe. Existem teclados, mouses, discos, sim, e placas de rede com as quais eu mantenho contato. Esse cara recentemente me causou problemas. Falarei sobre isso mais tarde.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Eu pensei que o cara na memória estava lento o suficiente. Eu não esperava me comunicar com os anteriores mais lentamente do que ele. O tempo da nossa fábrica de CPU vale muito dinheiro. Não podemos esperar e atrasar o trabalho. Mais tarde, assim que a fábrica chegou, pensei em um método chamado interrupção.

Um farol foi instalado em nossa oficina. Se essas unidades quiserem entrar em contato conosco, elas nos enviarão um sinal de interrupção primeiro, e o farol acenderá automaticamente. Quando geralmente trabalhamos para executar instruções de código, vamos olhar para cada instrução para ver se os faróis estão acesos. Depois de descobrir que a luz está acesa, deixe de lado o trabalho em mãos e cuide dele.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Temos uma memória ruim, teremos que voltar após o término do processamento e continuar o trabalho original. Para aguardar a recuperação, precisamos verificar os valores dos registros do encadeamento atualmente em execução antes de prosseguirmos. Aguarde até que essas informações sejam salvas na pilha deste encadeamento.

Mas, às vezes, não queremos ser interrompidos por eles quando executamos coisas muito importantes. Então, definimos uma bandeira no registro de eflags na oficina, se for 1, podemos ser interrompidos, se for 0, então não importa se o imperador nos procurar.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

Ah, errado, também há uma NMI de interrupção que não pode ser mascarada e ela entra no canal verde. Mas não espero que esse tipo de coisa aconteça, porque geralmente não há nada bom: a fonte de alimentação está desligada ou a temperatura está muito alta, ou o ônibus tem um erro e outras coisas sérias.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

8259A PIC

Também há um problema: há muitas organizações que trabalham conosco. Temos que distinguir quem é a fonte das notícias e se elas se reúnem para descobrir em que ordem de prioridade também é uma dor de cabeça.

Para isso, foi montada uma subsidiária integral na fábrica, responsável pelo controle de interrupção programável PIC, apelido 8259A. Outras unidades que desejam entrar em contato conosco, todas precisam passar por este PIC, só precisamos realizá-lo. Docking é suficiente.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Atribuímos um número ao escritório, chamado vetor de interrupção. Também preparamos uma tabela chamada tabela de descritores de interrupção IDT, que registra muitas informações, incluindo o endereço da função que lida com esse número de interrupção. Nós encontramos o PIC e obtemos o número e executamos a função de processamento.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Esta tabela é um pouco grande, com 256 entradas. Nossa oficina de CPU tem espaço limitado, então não podemos ajustá-la, então a colocamos na memória. Para encontrar rapidamente essa tabela, adicionamos um registro chamado idtr para apontar para esta tabela.

De fato, além da interrupção, se encontrarmos uma exceção durante a execução de uma instrução, também iremos para esta tabela para executar a função de tratamento de exceção.Os exemplos mais comuns são encontrar um divisor de 0, um erro de endereço de memória e assim por diante.

Nesse caso, precisamos abaixar nossas mãos ativamente para lidar com a exceção, portanto, também dizemos que a exceção é síncrona e a interrupção não sabe quando ocorre, portanto é assíncrona.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

APIC

O 8259A fez um bom trabalho, mas nossa fábrica expandiu sua escala de uma CPU de núcleo único para um núcleo múltiplo, e ele ficou um pouco sobrecarregado.

Finalmente, um dia, uma reunião foi realizada na fábrica, 8259A foi retirada e uma nova subsidiária integral chamada Advanced Programmable Interrupt Controller APIC foi estabelecida.O nome tinha a palavra “avançado” e o trabalho ainda era o mesmo.

Mas não diga, essas duas palavras não são realmente para se gabar, não sei onde é maior que 8259A.

Assim que essa nova empresa da APIC chegou ao poder, foram criados dois departamentos, um chamado I / O APIC, responsável por receber as unidades que procuravam nossos serviços, e um chamado Local APIC, que foi terceirizado para trabalhar em várias oficinas da minha CPU. , Como fica próximo ao nosso escritório, o nome é Local.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Depois que o APIC de E / S recebe o sinal de interrupção, ele é distribuído para o APIC local correspondente, de acordo com sua própria estratégia.Nossas oito oficinas podem se concentrar no processamento, economizando muitas coisas.

Além disso, por meio dessa equipe de terceirização, nossas oito oficinas também podem iniciar solicitações de interrupção entre si, chamamos isso de Inter-Processor Interrupt, ou IPI, para abreviar.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

Afinidade de interrupção

Sempre que um pacote chega à rede, o cara na placa de rede envia uma mensagem de interrupção e nos diz para lidar com isso.

No entanto, não sei o que aconteceu recentemente, e a quantidade de dados na Internet aumentou bastante. Obviamente, existem oito oficinas em nossa fábrica, que precisava continuar nos enviando notícias, e o trabalho era sempre interrompido e ele estava muito ocupado.

Por fim, não pude evitar, e fui até o cara com a placa de rede para fazer uma teoria. No entanto, ele me disse que isso não pode ser responsabilizado por ele, que será distribuído para lidar com isso, ou seja, a APIC é responsável.

Pense também: voltei à APIC e pedi para compartilhar com outras oficinas.

A APIC disse que não pode tomar a decisão e precisa deixar a fábrica decidir.

Poucos dias depois, uma reunião foi realizada na fábrica, com representantes de várias oficinas e o responsável pela APIC, além de convidados do sistema operacional.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Na reunião, todos discutiram sobre o assunto.

Huzi no Workshop 2: “Ah, quem o chama de Bootstrap Processor no Workshop 1, você precisa trabalhar mais”

Representante do workshop nº 3: “Você não quer dizer isso. Todo mundo é uma equipe. Se você quer ajudar um ao outro, é assim. Como existem tantas unidades para entrar em contato conosco, dividiremos o trabalho. Por exemplo, o workshop nº 1 é responsável pela placa de rede e o nº 2 é responsável. Disco, nosso número três é responsável pelo teclado e assim por diante “

Representante da oficina nº 5: “O que você acha bonito. Quantas interrupções o teclado pode enviar por dia e quantas interrupções a placa de rede deve enviar por dia. Você pode fazer isso facilmente. Então, vamos usar a distribuição aleatória para balanceamento de carga. O que você acha?” ? “

Representante da oficina nº 8: “Que aleatório, quão problemático, na minha opinião, nos revezaremos em 8 oficinas”

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Nesse momento, o líder perguntou ao representante do sistema operacional se havia alguma sugestão.

Esse representante levantou-se, empurrou os óculos e disse: “Você já ouviu falar da afinidade da CPU por threads?”

Todo mundo balançou a cabeça e perguntou: “O que isso significa?”

“Isso significa que alguns encadeamentos desejam vincular a um de seus núcleos para execução, não desejam executar nesse núcleo por um tempo e executá-lo por um tempo”

Eu tomei as palavras dele: “Parece que existe isso. Já o encontrei antes, e um tópico foi atribuído ao nosso workshop número 1, mas não nos importamos com isso. Quem não está fazendo o trabalho para nós Tudo o mesmo”

O representante balançou a cabeça: “Ah, isso não é o mesmo. Os caches de primeiro e segundo nível de cada um de seus núcleos são gerenciados por você. Se você mudar para outro núcleo, esse cache será praticamente inútil e será necessário recriá-lo. Não é apenas um atraso cego? Eles não se importam com threads comuns, mas se alguns threads executam muito acesso à memória e processamento de cálculos e têm requisitos de alto desempenho, ficam muito preocupados com esse problema. ”

Todos nós de repente percebemos que assentimos um após o outro.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Hu Zi levantou-se e perguntou: “Como você consegue essa afinidade? O que isso tem a ver com a nossa reunião hoje?”

O representante continuou respondendo e disse: “Responderei sua primeira pergunta primeiro. O agendamento de encadeamentos é o trabalho realizado pelo nosso sistema operacional. Fornecemos interfaces de API. Os encadeamentos chamam essas interfaces para indicar que desejam ser compatíveis. Estamos agendando Então você pode atribuir threads para você executar de acordo com os desejos deles “.

O representante tomou um gole de água e disse: “Eu responderei sua segunda pergunta novamente. Como os threads podem ter afinidade, as interrupções também podem ser distribuídas de acordo com essa idéia. A APIC tem um conjunto de estratégias de distribuição por padrão, mas também fornece afinidade. Você pode especificar quem e com que núcleo lidar, para não precisar corrigir as regras e ser flexível. Não seria melhor? “

Acabado de terminar, um garoto apareceu de repente na porta da sala de conferências e acenou para o representante do sistema operacional.

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?  Em seguida, discutimos a viabilidade desse esquema em detalhes.No final, todos decidiram por unanimidade fazer isso.Juntamos algo chamado afinidade de interrupção.O sistema operacional fornece uma entrada configurável smp_affinity. Ao definir a máscara de cada núcleo do processador para decidir quem cuidará da interrupção, a APIC será responsável pelo suporte ao pouso.

Com esse conjunto de planos, quando encontrarmos novamente o pico da rede, a pressão em nossa oficina nº 1 poderá ser aliviada.

Acabamos de chegar a um acordo. O representante do sistema operacional voltou à sala de conferências e disse solenemente: “Desculpe a todos, há algo no sistema operacional que precisa ser levado de volta para lidar com isso. Vamos dar um passo primeiro”

Continua…

Ovos de pascoa

Com a interrupção da placa de rede, um novo pacote de dados chegou a este país.

Os recém-chegados jovens do Departamento de Rede do Império claramente não perceberam a vinda do perigo …

Preveja o futuro, preste atenção ao acompanhamento maravilhoso …

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

** Recomendações mais emocionantes **

☞ Entrevista | Vice-presidente “Smartbi” Xu Jing: No futuro, o BI se tornará um tomador de decisão Zhuge Liang

[☞加密货币界“女杀手”,破译世上最安全加密货币系统,获 771 万奖金](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650757593&idx=1&sn=2cccf4bc367d01948dc34531da60520f&chksm=bea7280a89d0a11c621632f2bacfa15cd8

[☞](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650750309&idx=2&sn=e6772d93425a7a23a9d53c793274b9bd&chksm=bea74cb689d0c5a0a5958ae[他被称为 ” 中国第一程序员 “,一人之力单挑微软,如今拜入武当修道](http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=2651021126&idx=1&sn=1a22d3847fd59daea65028c6a3dd5c2b&chksm=8badecb1bcda65a48efdaa0998148

[☞](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650750309&idx=2&sn=e6772d93425a7a23a9d53c793274b9bd&chksm=bea74cb689d0c5a0a5958ae[高文、张钹、杨强隔空论道:AI 精度与隐私的博弈](http://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247519512&idx=1&sn=fcba907ddbcd498d968ae35235a0d1c3&chksm=e99ebee1dee937f73fcddddbdbdbfffd

[☞](http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650746260&idx=1&sn=ec250a1510b9cf57c8ba19578decefb1&chksm=bea75c4789d0d551e794c0b0d0d0d551e79fcbbb72379790cbbb7d7b0dd[带你从零入门 Serverless | 一文详解 Serverless 架构模式](http://mp.weixin.qq.com/s?__biz=MzA3MjY1MTQwNQ 🙂

☞[中央银行数字货币的总体框架](http://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg=

A CPU obviamente possui 8 núcleos; por que a placa de rede lança desesperadamente o núcleo n ° 1?

Seu “Compartilhar”, “Curtir”, “Observar” é o maior incentivo para nós

Link de origem:mp.weixin.qq.com

Isenção de responsabilidade: O conteúdo acima é coletado da Internet. Os direitos autorais do trabalho pertencem ao autor original. Todo o conteúdo é destinado a transmitir informações. Isso não significa que este site concorda com suas opiniões e não serve como orientação de investimento. O círculo monetário é arriscado e o investimento precisa ser cauteloso