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

4

Eu tenho um servidor em execução para o qual eu quero ter uma possibilidade de acessá-lo com uma tela conectada ao VGA (muito raramente, na maioria das vezes ele é acessado via SSH). Portanto, tenho uma placa gráfica PCI-E conectada e o cabo VGA removido. A placa gráfica é resfriada passivamente 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). / p>

Se eu desconectar o cartão (como sugerido em Devo desabilitar um gráfico não utilizado cartão? ) 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 senão eu precisaria de uma tela para configurar o UEFI (ou fazer isso cegamente, o que não é uma alternativa) e correr para um frango -egg-problem.

Estou usando o Ubuntu 15.04 com o Linux 4.0.2. A placa gráfica é rotulada 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 usar os módulos listados em sudo lspci -v (seguindo a resposta promissora do @WhyimsicalWombat abaixo) (no meu caso eu tive que usar o parâmetro modprobe.blacklist=module_to_blacklist kernel - veja link para mais detalhes - para radeon e snd_hda_intel ) a placa gráfica PCIe ainda aquece (o cooler passivo tem > 60 graus e não há fonte de calor nas proximidades) e não há módulos listados em 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: o link 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 slot listado em lspci -v , mas não há arquivo power .

EDIT 3: adicionando as modalias de /sys/bus/pci/devices/[device]/modalias a modprobe.blacklist= parâmetros do kernel não tem efeito nos kernels principais do Ubuntu de link e uma compilação personalizada 4.0.5 com make localmodconfig e ativação de todas as opções PCI faz com que a tela "Carregando initramfs [versão]" permaneça visível para sempre enquanto a placa gráfica ainda estiver aquecendo.

    
por Karl Richter 14.05.2015 / 17:19

1 resposta

4

A maneira mais fácil é fazer o blacklist e descarregar o módulo do kernel. Você pode ver o módulo atual com o primeiro check-out do número do barramento com sudo lspci |egrep -i (vga|video) anotando o primeiro campo com o 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 subdispositivo como 01: 00.1, que é o dispositivo de áudio HDMI. Lista negra também.

Adicione ambos os arquivos /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 adicionar o modprobe [nome do módulo] para ativá-lo.

Se isso não for suficiente ou se você usar o mesmo módulo para o GPU (adaptador integrado ou segundo) que você realmente usa, ligue o que você 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 for suficiente, se estiver 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 ficará sem drivers compatíveis em breve e deixará o dispositivo sem driver e deverá ser desligado (ou pelo menos baixo).

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

    
por 14.05.2015 / 17:50