Existe uma maneira simples e segura de acionar um bloqueio de GPU em um computador suscetível?

8

As respostas à minha pergunta anterior, Ubuntu 12.04 congelaram, exigindo powercycle. O que devo procurar / grep nos logs? , levaram-me a suspeitar que meu computador está com um bloqueio intermitente da GPU. Isso acontece uma vez por semana, geralmente quando estou usando o Chrome. Hoje aconteceu quando eu estava criando um diagrama no lucidchart

Eu tenho um Dell Optiplex 755 com um ATI Radeon HD 2400 XT e monitores duplos em execução no modo Xinerama. Estou usando o 12.04 com o driver ATI proprietário instalado.

Quando o computador travar, ainda posso entrar. E eu gostaria de seguir as instruções sobre como reportar isso fornecidas em https://wiki.ubuntu.com/X/Trou Troubleshooting/Freeze

Existe uma maneira (segura) de causar um bloqueio da GPU para que eu possa prosseguir e registrar um erro, em vez de esperar até que isso aconteça novamente?

Abe
fonte

Respostas:

11

Excelente pergunta.

Cargas de trabalho

O diretório / usr / share / xdiagnose / workloads possui um conjunto de cargas de trabalho projetadas para exercitar seu sistema gráfico para acionar travamentos.

$ ls /usr/share/xdiagnose/workloads/
README                       do_monitor_rotation_loop
do_chws_loop*                do_screensaver_loop*
do_cpu_spin_loop             do_video_loop*
do_disk_write_loop           do_vtswitch_loop*
do_glx_loop*                 repro.sh
do_kernel_compile_loop       run_workloads
do_monitor_disable_loop*     youtube-loop.html
do_monitor_resolution_loop*  youtube-reload.html

Note que para executá-los você precisa passar 'run'. Por exemplo:

Execução de $ do_glx_loop

Sem argumentos, os scripts exibirão o uso. Em parte, isso é por segurança (caso as pessoas executem cegamente os scripts), mas principalmente é para manter a API dos scripts organizada.

Os que eu estrelou são provavelmente os melhores para começar. Eu começaria executando apenas um script de cada vez e o deixava passar algumas horas. Se o seu sistema sobreviver bem o suficiente, tente executar dois ou mais simultaneamente.

Note que eu não os testei super pesadamente, então não posso prometer que eles estão livres de erros. Mas são scripts muito curtos e simples, espero que sejam fáceis de consertar, e os patches são muito bem-vindos.

Observe também que eles provavelmente podem desencadear bloqueios não relacionados ao que você está tentando resolver. Os bloqueios de GPU geralmente parecem idênticos aos olhos não treinados, pois apresentam os mesmos sintomas, mais ou menos.

Histórico

Se você usa gráficos Intel, existe um / sys / kernel / debug / dri / 0 / i915_error_state que você deseja. Este é um instantâneo do estado do registro no momento da parada e a parte superior contém alguns códigos de erro. IPEHR, PGTBL_ER, ESR, EIR. Faça a correspondência desses códigos para verificar se você tem o mesmo erro ou erro semelhante.

Se você não está na Intel Graphics (como neste caso, não), ou se não vê os arquivos i915_error_state gerados, então é só olhar no dmesg e /var/log/kern.log. Às vezes, com bloqueios de gpu, eles indicam o que o bloqueio de GPU foi causado por ou dentro.

O driver -ati de código aberto possui o radeontool e o avivotool, que capturam os estados do registro. Estes são principalmente para o opensource -ati, mas as ferramentas também devem funcionar com -fglrx. Eu nunca vi o pedido de um bug -fglrx, mas certamente não pode doer.

Teste

Para todos os drivers, o próximo passo é geralmente começar a testar as versões mais recentes ou mais antigas do driver. Para drivers proprietários, você pode verificar o x-updates ppa, mas provavelmente precisará baixar e instalar manualmente o driver no site do fornecedor (e danificar a embalagem do sistema ao fazê-lo). Para drivers de software livre, como -intel, -nouveau, -ati, isso significa testar os kernels mais recentes ou o mesa mais recente. Nós fornecemos compilações de kernels mais recentes em http://kernel.ubuntu.com/~kernel-ppa/mainline/ . Para o mesa, existem vários PPAs, como o xorg-edgers. Também estou preparando uma atualização 8.0.3 para uma precisão, que acreditamos consertar vários bloqueios para os gráficos da Intel.

De qualquer forma, não pare quando encontrar uma versão que funcione. Experimente outras versões entre sua versão de trabalho e a versão quebrada. Se você pode restringir o suporte a duas versões adjacentes, isso pode ser extremamente útil para os desenvolvedores no isolamento de qual patch causou a regressão.

Contribuindo

À medida que você avança na solução de problemas, pode detectar erros ou apresentar melhorias para os scripts ou documentos. Contribuições para qualquer uma delas são muito bem-vindas. Com os documentos da wiki, vá em frente e edite! Eu tento atualizá-los pelo menos uma vez por ano, mas nem sempre entendo isso, e o próximo cara a visitar a página certamente apreciará seu esforço para melhorá-los.

Para alterações nos próprios scripts, também é muito bem-vindo. Envie-me as alterações da maneira que você se sentir confortável - como patches, um ramo bzr ou git, ou mesmo apenas cópias do script. Se você planeja fazer muitas alterações, uma ramificação bzr com uma proposta de mesclagem é a maneira preferida; tutoriais sobre como fazer isso estão disponíveis no code.launchpad.net ou fique à vontade para me encontrar no IRC, se você tiver alguma dúvida.

Ou, se você não estiver pronto para se aprofundar na codificação, mas desejar sinalizar erros ou áreas em que é necessária mais funcionalidade, é possível arquivar relatórios de erros da maneira usual ( ubuntu-bug xdiagnose).

Correções rápidas

Se você não estiver interessado em fazer nenhuma das depurações acima, veja algumas dicas aleatórias:

Para drivers proprietários, tente desinstalar e removê-los completamente do seu sistema e depois reinstalar do zero. Infelizmente, isso "resolve" muitos bugs ...

Para os drivers FOSS, existem várias opções de kernel com as quais você pode brincar. Para bugs em 3D / mesa, também existe o driconf para ajustar várias configurações.

Finalmente

Finalmente, uma solicitação ... por favor, não apresente relatórios de erros ao Launchpad sobre "congelamentos aleatórios" até que você tenha feito pelo menos um pouco de investigação, como descrito acima. Caso contrário, você apenas aumentaria o ruído.

Tentamos pescar relatórios de bugs bem pesquisados; nós achamos que eles dão mais valor ao dinheiro e são muito mais propensos a acabar com uma correção real para a distribuição.

Bryce
fonte
Obrigado por suas respostas. Você é o autor do wiki de congelamento de problemas vinculado ? Parece que os scripts xdiagnose / cargas de trabalho devem ser mencionados lá - eu editaria, mas não tenho certeza se o faria tão bem quanto você. Além disso, você não menciona o uso do radeontool aqui, mas é mencionado no wiki. Ainda devo usar o radeontool no meu caso?
Abe
além disso, seria útil um script que executasse todos os scripts em xdiagnose / cargas de trabalho, iniciando sequencialmente com os que você tinha asterixado? Por fim, onde posso aprender como enviar alterações?
Abe
Aqui está o primeiro bug que encontrei (acho): do_chws_loop e do_glx_loop requer wmctrl, do_glx_loop requer glxgears, mas nenhum script "inclui funcionalidade para testar e instalar o que ele precisa". conforme descrito em README. Provavelmente eu poderia começar a adicionar essa funcionalidade, mas preciso enviar um bug primeiro e depois corrigi-lo? E, está tudo bem se eu levar cinco linhas de se ... mais ...? Ou existe uma 'maneira preferida' ... e isso significa que os scripts devem ser executados como root? ... por que exigir um argumento de "execução"? Desculpe por todas as perguntas, só quero poder ajudar se puder.
Abe
Claro, sem problemas, atualizarei minha resposta para cobrir esses pontos.
Bryce
Quanto ao seu terceiro conjunto de perguntas. Sim, fazer o teste dos scripts para o que eles precisam está na minha lista de tarefas. se ... else blocos são certamente um bom ponto de partida. Por fim, eu gostaria de permitir que os usuários executem os scripts a partir de uma GUI, para que eles "comuniquem" seus requisitos de volta à GUI, para que possam acinzentá-los se o usuário não tiver os requisitos. Mas estou longe de poder fazer isso, portanto, apenas verificações simples da linha de comando são o lugar certo para começar.
Bryce