Etapas Para Eliminar O Tempo Limite De Pmap_flush_tlbs Relacionado Ao Kernel Panic

Nos últimos dias, vários leitores incluíram o relato de kernel panic sobre o tempo limite de pmap_flush_tlbs.

Não deixe seu PC travar novamente. Baixe Reimage agora!

Recentemente, corri para consertar um problema em que as máquinas virtuais macOS em um servidor Proxmox sobrecarregado (constantemente acima de 100% da CPU, carga> 100) entraram em pânico e reinicializaram a cada 12 minutos ou mais. Todas as VMs na parte superior do sistema eram cargas de trabalho CI contínuas, então Proxmox era na verdade um enorme teste de tortura faça-você-mesmo da CPU, muito parecido com o círculo fechado do Chrome. No entanto, apenas o macOS convidado foi considerado atingido pelo kernel panic.

Como várias máquinas virtuais estavam se conectando simultaneamente com alta utilização da CPU e, além disso, os núcleos do host estavam superlotados, naquele ponto havia uma competição feroz por provedores de computação na Internet, de modo que todas as áreas de estacionamento para visitantes estavam familiarizadas com a latência alta e fatorial. Isso não foi visto apenas como um obstáculo porque o produto executado não era um trabalho de pedido interativo e, portanto, o rendimento era muito mais importante do que a latência.

Agora eu coletei 5 registros de atividades de surto do macOS no kernel e coloquei ao lado deles. Você foi muito consistente, a maior parte da reclamação principal ainda será do tipo 3, este aqui:

kernel panic pmap_flush_tlbs timeout

 Panic (precioso tempo de CPU 12345678910): NMIPI para CPU menos competente: TLB flush timeout, TLB stature: 0x0 

Os rastreamentos de pilha sempre foram um pouco multidimensionais, mas encontrei um rastreamento específico que continha sua chamada para _panic:

 pânico e ansiedade (cpu 7, chamador 0x ....): "Modelo (s) ininterrupto (s): Bitmap CPU: 0x800, NMIPI 0x0, acks: agora: 0x1, Prazo é igual a xxx "@ / AppleInternal / BuildRoot and Library / Caches /com.apple.xbs/Sources/xnu/xnu-6153.121.2/osfmk/x86_64/pmap.c:2696mach_kernel: _panic_trap_to_debugger + 0x277mach_kernel: _panik + 0x54mach_kernel: _pmap_flush + 0x4a6mach_kernel: _vm_page_sleep + 0x9e2mach_kernel: _vm_map_msync + 0x18cmach_kernel: _madvise + 0xcemach_kernel: _unix_syscall64 + 0x287mach_kernel: _hndl_unix_scall64 + 0x16 

Não sofra mais com os erros do PC.

Mantenha seu PC funcionando como novo com o Restoro � o melhor software de resolução de erros do Windows. Não há mais telas azuis temidas, não há mais aplicativos travando � apenas uma experiência de PC suave e eficiente. Com a resolução fácil de um clique de problemas comuns do Windows, o Restoro é o aplicativo obrigatório para quem deseja manter seu computador nas melhores condições.

  • 1. Baixe e instale o software Reimage
  • 2. Inicie o programa e selecione seu idioma
  • 3. Siga as instruções na tela para iniciar uma verificação de problemas em seu computador

  • O núcleo do XNU é o ponto de partida aberto, então pude escolher um olhar mais atento sobre a entrega do pânico _pmap_flush que vive em pmap.c.

    Esta função limpa o TLB do kernel atual, sinais entre todos os outros kernels para serem geralmente os mesmos, e então espera que as pessoas os satisfaçam. Se a maioria das pessoas não entender, este erro definitivamente irá disparar o usuário:

     if (cpus_to_respond && (mach_absolute_time ()> Prazo)) 
    nos casos em que (machine_timeout_suspended ())
    continua;

    sempre que (TLBTimeOut == 0)
    além if (is_timeout_traced)
    continuar;


    PMAP_TRACE_CONSTANT (PMAP_CODE (PMAP__FLUSH_TLBS_TO),


    NULL, cpus_to_signal, cpus_to_respond);

    is_timeout_traced é igual a TRUE;




    orig_acks significa que NMIPI_acks;
    NMIPI_panic (cpus_to_respond, TLB_FLUSH_TIMEOUT);
    panic ("Processador (es) ininterrupto (s): bitmap de CPU: 0x% llx, NMIPI acks: 0x% lx, agora: 0x% lx, prazo:% llu",
    cpus_to_respond, orig_acks, NMIPI_acks, termo extremo) ;

    Presumi que o sortimento, também conhecido como CPU emulada, simplesmente não desligou e o tempo limite específico foi provavelmente causado por uma sobrecarga no computador remoto que fez com que muitos encadeamentos convidados que não fossem agendados. alvo final, tempo par. Então, talvez eu pudesse desligar precisamente o tlbtimeout para que normalmente entre em pânico? Você pode ver estratégias quando se trata de alterar essa configuração em machine_routines.c:

    / * * TLBTimeOut é o ciclo menstrual após o tempo limite tlb. o anterior é o padrão * LockTimeOut pode ser substituído separadamente. Em particular * O valor zero geralmente inibe o tempo limite de pânico e, em vez disso, interrompe a consulta de evento * - veja pmap_flush_tlbs (). 6 /if (PE_parse_boot_argn ("tlbto_us", & slto, sizeof (slto)))default_timeout_ns significa slto * NSEC_PER_USEC;nanossegundos_to_absolutetime (default_timeout_ns, & abstime);TLBTimeOut é igual a (uint32_t) abstime; tipicamente =tlbtimeout LockTimeOut;

    Então, eu adicionei recentemente tlbto_us = 0 para ajudá-lo a carregar os kernels do OpenCore para reduzir muito mais o pânico de tempo limite de despejo de TLB. Isso corrigiu essa falha! Mas o que existe anteriormente é que o kernel precisa cometer alguns erros contra vários spinlocks extras :(.

     Pânico (CPU 11, tempo 12345678910): NMIPI spinlock para tempo limite de coleta de material, spinlock: 0xffffff12345678 ... 

    Ficou claro que decidiu fazer sentido aumentar o tempo limite de segurança globalmente para manter o kernel mais do que feliz. Felizmente, percebi que o kernel da ideia é bastante comum:

      virtualizado ((cpuid_features () & CPUID_FEATURE_VMM)! significa 0);if (virtualizado)int vti;if (! PE_parse_boot_argn ("vti", & vti, sizeof (vti)))vti é 6;printf ("Limites de tempo de virtualização ajustados (<<% d)  n", vti);kprintf ("Limites de tempo de virtualização alterados (<<% d):  n", vti);VIRTUAL_TIMEOUT_INFLATE32 (LockTimeOutUsec);VIRTUAL_TIMEOUT_INFLATE64 (LockTimeOut);VIRTUAL_TIMEOUT_INFLATE64 (LockTimeOutTSC);VIRTUAL_TIMEOUT_INFLATE64 (TLBTimeOut);VIRTUAL_TIMEOUT_INFLATE64 (MutexSpin);VIRTUAL_TIMEOUT_INFLATE64 (reportphyreaddelayabs); 

    O objetivo significativo desse procedimento era ser capaz de aumentar o tempo limite do kernel quando o macOS estivesse sendo executado como uma máquina virtual, até isso incluir TLBTimeOut e, consequentemente, o tempo limite. genéricos que foram inventados na hora de receber o twistlock!

    Presumi que o número de identificação pessoal da CPU "VMM" já era reconhecido profissionalmente pelo convidado, o que fez com que os tempos limites se desviassem para a esquerda de todos os valores em vti "" Inflação do tempo limite de virtualização "você mantém o problema no nível 6. Em outras palavras e phraases, os tempos limite do kernel foram definitivamente dois ou três ^ 6 = 64 vezes mais longos em contraste com o macOS em bare metal.

     keepyms = # 1  tlbto_us = 0  vti implica 9 

    Você pode verificar as informações sobre como o kernel do macOS reconheceu sua melhoria ou aplicou um novo valor com nosso conhecimento de vti verificando o log do kernel do macOS para o dia recente como segue :

     # wood show --predicate "processID == 0" --get going on $ (date "+% Y-% m-% d") --debug | grep "timeouts ajustados"Limites de tempo de virtualização ajustados (<< 9) 

    Isso resolveu totalmente o problema do kernel panic! No final das contas, alguns desses tipos de lavadoras virtuais serão reprojetados se você tiver hosts diferentes ou os núcleos de um indivíduo serão reduzidos no número interno para reduzir o agrupamento geral em seu Proxmox. Isso ajudará a reduzir a latência experimentada pelo mrrcanisme virtual para o que eles esperam de qualquer tipo de máquina sem um sistema operacional. No entanto, essa configuração de detalhes de inicialização do macOS é uma fórmula mágica excelente e simples para melhorar a estabilidade da máquina virtual do macOS ao coletar um pico de carga em um bom host específico.

    Seu computador está lento? Não espere mais para resgatá-lo. Baixe nossa ferramenta de reparo do Windows e volte aos trilhos com apenas alguns cliques!

    Steps To Eliminate Pmap_flush_tlbs Timeout On Kernel Panic
    Schritte Zum Ausschließen Des Pmap_flush_tlbs-Timeouts Bei Kernel-Panik
    Действия по устранению тайм-аута Pmap_flush_tlbs для паники ядра
    Steg För Att Eliminera Pmap_flush_tlbs Timeout Vid Kärnpanik
    Stappen Om Pmap_flush_tlbs Time-out Bij Kernel Panic Te Elimineren
    Passaggi Per Eliminare Il Timeout Di Pmap_flush_tlbs Durante Il Panico Del Kernel
    Étapes Pour éliminer Le Délai D'expiration De Pmap_flush_tlbs Concernant La Panique Du Noyau
    커널 패닉 시 Pmap_flush_tlbs 시간 초과를 제거하는 단계
    Kroki, Aby Faktycznie Wyeliminować Limit Czasu Pmap_flush_tlbs W Panice Jądra
    Pasos Para Eliminar El Tiempo De Espera De Pmap_flush_tlbs Relacionado Con El Pánico Del Kernel