Como desabilitar uma placa gráfica plug-in PCI-e no nível do sistema operacional? [duplicado]

4

Eu tenho um servidor em execução para o qual eu quero ter a possibilidade de acessá-lo com uma tela conectada a VGA (muito raramente, na maioria das vezes é acessado via SSH). Portanto, tenho uma placa gráfica PCI-E conectada e o cabo VGA removido. A placa gráfica é passivamente resfriada e, se eu abrir o estojo e tocar o corpo frio, posso sentir um calor perceptível e concluir que ele está consumindo energia (não há consumidores próximos que possam transmitir a energia térmica de qualquer forma).

Se eu desconectar o cartão (como sugerido em Devo desabilitar uma placa gráfica não utilizada? Eu tenho que construí-lo toda vez que eu quero conectar uma tela. Eu gostaria de evitar isso, assim como o consumo de energia.

A desativação e a reativação precisam ocorrer no nível do sistema operacional (por exemplo, via SSH), porque do contrário eu precisaria de uma tela para configurar o UEFI (ou fazer isso cegamente, o que não é uma alternativa) e correr para um ovo de galinha. problema.

Estou usando o Ubuntu 15.04 com o Linux 4.0.2. A placa gráfica é rotulada como XFX HD 5450 850M e possui um conector VGA, HDMI e D-SUB. A placa principal é uma ASRock X99-Extreme sem gráficos integrados.

EDIT: Após a lista negra utilizada módulos listados em sudo lspci -v (seguindo a resposta promissora do @WhyimsicalWombat abaixo) (no meu caso eu tive que usar o modprobe.blacklist=module_to_blacklist parâmetro do kernel - consulte https://askubuntu.com/questions/110341/how-to-blacklist-kernel-modules para mais detalhes - para radeon e snd_hda_intel ) a placa gráfica PCIe ainda aquece (o cooler passivo tem & gt; 60 graus e não há fonte de calor nas proximidades) e não há módulos listados lspci -v para os dispositivos. A saída de lspci -v para os dispositivos não é

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series] (prog-if 00 [VGA controll
er])
        Subsystem: XFX Pine Group Inc. Device 303e
        Physical Slot: 4
        Flags: bus master, fast devsel, latency 0, IRQ 11
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        Memory at fbe20000 (64-bit, non-prefetchable) [size=128K]
        I/O ports at e000 [size=256]
        Expansion ROM at fbe00000 [disabled] [size=128K]
        Capabilities: [50] Power Management version 3
        Capabilities: [58] Express Legacy Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting

01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300 Series]
        Subsystem: XFX Pine Group Inc. Device aa68
        Physical Slot: 4
        Flags: bus master, fast devsel, latency 0, IRQ 10
        Memory at fbe40000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [50] Power Management version 3
        Capabilities: [58] Express Legacy Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting

EDIT 2: https://askubuntu.com/a/138953/173287 sugere fazer echo 0 > /sys/bus/pci/slots/$N/power e eu tenho um /sys/bus/pci/slots/$N Onde $N é o número do espaço listado em lspci -v, mas não há power Arquivo.

EDIT 3: adicionando as modaliases de /sys/bus/pci/devices/[device]/modalias para modprobe.blacklist= parâmetros do kernel não tem efeito sobre os kernels mainline do Ubuntu http://kernel.ubuntu.com/~kernel-ppa/mainline/ e um costume 4.0.5 construir com make localmodconfig e a ativação de todas as opções de PCI faz com que a tela "Carregando initramfs [versão]" permaneça visível para sempre enquanto a placa gráfica ainda está aquecendo.

Karl Richter
fonte
Você usa a energia da placa gráfica em algum momento? Programas intensivos de GPU ou VM's?
Ctrl-alt-dlt
Como posso monitorar isso? Eu não instalei nenhum driver adicional. O Linux fornece essa funcionalidade pronta para uso?
Karl Richter
1
Não tenho certeza de qual GPU você instalou, mas talvez esteja interessado em Economias de energia ZeroCore
MonkeyZeus
1
Já que descarregar não corta, você está perdendo power arquivo em /sys/bus/* mesmo com drivers do kernel carregados? Você pode querer verificar isso com o opensource radeon e com os drivers fglrx da AMD. Se não tiver sorte, experimente o fórum da AMD para obter informações mais precisas sobre o gerenciamento de energia da placa. O pior cenário é tirá-lo ou atualizá-lo para algo como 7730 (que suporta zerocore) ou equivalente a NV. Ou se você quiser realmente entender isso, as especificações PCI-e estão disponíveis em PCI-SIG se você quiser tentar forçar o cartão no estado de baixa energia. Coisas divertidas se você tiver tempo
WhimsicalWombat

Respostas:

4

A maneira mais fácil é fazer uma lista negra e descarregar o módulo do kernel. Você pode ver o seu módulo atual com o primeiro check-out do número do ônibus com sudo lspci |egrep -i (vga|video) anotando o primeiro campo com número como 01: 00.0. Então sudo lspci -vs 01:00 |grep modules exibe o módulo em uso. Para dispositivos habilitados para HDMI, geralmente há um dispositivo como 01: 00.1, que é o dispositivo de áudio HDMI. Blacklist isso também.

Adicione os dois /etc/modprobe.d/blacklist ou blacklist.conf precedidos pelo comando blacklist. Por exemplo, "blacklist radeon" e "blacklist" snd-hda-intel "etc.

Se você quiser usar o dispositivo, basta sudo modprobe [nome do módulo] para ativá-lo.

Se isso não for suficiente ou se você usar o mesmo módulo para a GPU (adaptador integrado ou segundo) que você realmente usa, ligue o que deseja desativar ao driver pci-stub. A melhor maneira de fazer isso é a partir da linha de comando do kernel na inicialização. Basta adicionar pcistub="pci-stub.ids=..." seguido pelos códigos vendorID: deviceID que você pode encontrar com lcpci -nns (your bus number from above) pcistub="pci-stub.ids=1002:6718,1002:aa80"

Se você quiser usar isso depois de vinculá-lo ao pcistub, você pode desvinculá-lo via sysfs e vinculá-lo ao driver de sua escolha ou (mais simples) reiniciar e inicializar sem a linha de comando.

Eu tentaria primeiro se apenas desabilitar o carregamento automático do módulo fosse suficiente se isso estivesse disponível.

EDITAR:

É possível que o kernel tente o próximo driver disponível se você colocar uma na lista negra. Se assim for, você pode colocar isso na lista negra, a menos que você precise. Ele vai ficar sem drivers compatíveis em breve e deixar o dispositivo sem driver e deve ser desligado (ou pelo menos baixo).

Se estiver esquentando mesmo sem um driver de kernel em uso, atualize a postagem. Eu ficaria muito interessado em ouvir isso.

WhimsicalWombat
fonte
Eu tentei sua solução. Eu aprendi muito e parece promissor, obrigado. No entanto, o caso de o dispositivo ainda aquecer sem nenhum driver em uso acontece agora.
Karl Richter
@KarlRichter Obrigado pela atualização. Eu não sei como evitar o consumo de energia (ou se de fato pode ser evitado). É possível que as placas mais antigas não tenham modos de energia mais baixos. O ZeroCore da AMD foi introduzido no Southern Islands (o que reduz o consumo de energia ao mínimo), mas eu esperava que deixar o cartão sem driver fosse criar algo similar.
WhimsicalWombat
O driver zerocore parece uma boa solução, mas ainda consome ~ 3 W e é preciso descobrir a instalação do driver, que só funciona para um conjunto específico de placas gráficas AMD (possivelmente novas ou caras apenas). Inicialmente eu estava pensando que é bastante trivial ligar / desligar um slot PCIe no nível do sistema operacional e, assim, um grande conjunto de consumidores de energia.
Karl Richter
@KarlRichter ZeroCore é utilizável apenas nas GPUs do GCN 1.0 (ou 1.1) ie. Série 7000 em diante. 7730 foi 50ish bucks novo par de anos atrás, então não seria caro agora, especialmente usado. Mas ainda assim, eu tentaria mexer com os drivers radeon e fglrx primeiro para ver se você pode persuadir seu dispositivo atual a um estado de suspensão mais profundo.
WhimsicalWombat
Eu só fui capaz de blacklist radeon Correndo sudo update-initramfs -u para reconstruir o kernel (conforme detalhado aqui: askubuntu.com/a/938663/115620 ). A não inclusão da lista negra não exigiu outra reconstrução do kernel.
Chris Gregg