vram como ram

Método permite utilizar parte da memória vram da Placa de Vídeo como se fosse um complemento da memória RAM usando-a como SWAP.


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

Uma placa de vídeo costuma usar uma memória SDRAM GDDR, que por pequena que seja na capacidade de armazenamento, terá melhor velocidade até que uma RAM convencional.

Quem tem pouca memória RAM no computador – máquinas antigas com 1 ou 2 Gbs de RAM – e tenham uma boa placa de vídeo dedicada poderão se beneficiar desse método.

Atenção!

A memória de vídeo é acessada pela GPU, porém a CPU só a acessa através do barramento PCI, o que disponibiliza algo em torno de 256 Mb. Sim, por mais que você tenha 4Gb de Vídeo dedicado, você só terá á mão algo em torno de 256 Mb, com sorte terá 512 Mb disponíveis.

Isso ocorre porque o driver gráfico IIRC usa o motor 3D (Vulkan, DirectX, etc) para mover os blocos da memória de vídeo, poupando o trabalho da CPU.

Teoricamente há métodos de gravar a memória de video total usando drivers gráficos que dão passthrough e quem sabe usar toda a API GEM/TTM, por exemplo, naqueles usados pelos mineradores de criptomoedas. Mas eu nunca vi um driver desses e não sei como elaborar um.

Não posso deixar de acrescentar que isso vai diminuir a quantidade de memória cache disponível para uso da GPU: Em resumo, seu sistema terá mais RAM, porém perderá desempenho nos games! Portanto fique atento a isso e só faça o método aqui ensinado se você não pretende jogar em seu computador, mas sim apenas trabalhar com tarefas que consomem muita RAM.

Finalizando, este tutorial foi escrito seguindo os preceitos básicos do Linux porém não garanto sua plena funcionalidade. Convido os leitores mais experientes (ou corajosos) a experimentarem o método e darem seu feedback. Á medida que chegarem resultados e dicas, editarei a postagem atualizando-a. Aos demais, fica de curiosidade pela possibilidade de suar sua memória de vídeo como extensão da RAM. Grato pela paciência.

2. Funcionamento

Para usar parte da memória de vídeo como RAM, essa área deve ser mapeada pelo kernel. Desde a versão 2.6, o Linux oferece o driver Memory Technology Device (MTD). O que vamos fazer é ativá-lo e habilitá-lo – método válido para todos os sistemas linux.

3. Configurando

3.1 Etapa 1

Primeiro vamos encontrar sua placa de vídeo com este comando:

$ lspci | grep VGA

Exemplo de saída do comando:

02:00.0 VGA compatible controller: ATI Technologies Inc R300 AD [Radeon 9500 Pro]

O que precisamos é do código no começo, que nesse exemplo é 02:00.0.
Copie o código e rode este comando:

$ lspci -vvv -s 02:00.0

O resultado será semelhante a esse:

0000:02:00.0 VGA compatible controller: ATI Technologies Inc R300 AD [Radeon 9500 Pro] (prog-if 00 [VGA])
Subsystem: PC Partner Limited: Unknown device 7c07
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (2000ns min), cache line size 08
Interrupt: pin A routed to IRQ 255
Region 0: Memory at d8000000 (32-bit, prefetchable) [size=128M]
Region 1: I/O ports at b000 [size=256]
Region 2: Memory at e9000000 (32-bit, non-prefetchable) [size=64K]
Expansion ROM at e8000000 [disabled] [size=128K]
Capabilities: [58] AGP version 3.0
Status: RQ=256 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3+ Rate=x4,x8
Command: RQ=1 ArqSz=0 Cal=0 SBA+ AGP- GART64- 64bit- FW- Rate=<none>
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-

Estamos procurando pela prefetchable memory, que está em negrito!
Ela informará quanto de memória disponível você possui para usar como RAM/SWAP.
Em nosso exemplo, ela tem 128 Mb disponíveis.

Além disso, anote a Região e o endereço de memória desse trecho:
Região 0, endereço d8000000.

OBS: Se você usa sistema híbrido, como um notebook gamer, troque VGA por 3D, assim você encontrará a memória da sua GPU AMD/NVIDIA.

OBS2: Considerando no exemplo 126mb, você deve deixar no mínimo 32 Mb livres para o sistema fazer os calculos necessários e comunicação com a GPU. Portanto no exemplo, a memória total disponível é de 94 Mb.
Pouco… Mas num sistema com pouca RAM, é algo que pode salvá-lo na hora do aperto.

3.2 Etapa 2

Vamos ativar o módulo MTD da seguinte forma, crie o arquivo /etc/modules-load.d/vramswap.conf como usuário root e adicione estas linhas a ele:

slram
mtdblock

Crie um serviço no SystemD que vai iniciar o serviço de reconhecimento do MTD automaticamente, para isso crie um arquivo /usr/lib/systemd/system/vramswap.service e adicione isto dentro:

[Unit]
Description=Swap on Video RAM

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c “mkswap /dev/mtdblock0 && swapon /dev/mtdblock0 -p 10”
ExecStop=/usr/bin/bash -c “swapoff /dev/mtdblock0”
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Ative os opcionais extras, que irão para /etc/modprobe.d/modprobe.conf com este conteúdo:

options slram map=VRAM,0xStartRange,+0xUsedAmount

Atualize seu initramfs:

$ sudo update-initramfs -u

Adicione estas linhas ao arquivo /etc/X11/xorg.conf.d/vramswap.conf, como root, se for:

AMD:

Section “Device”
Driver “radeon”
VideoRam 32768
#
# coloque aqui, sem as #, quaisquer outras linhas que já existiam no arquivo
#
EndSection

NVIDIA com Nouveau:

Section “Device”
Driver “nouveau”
VideoRam 32768
#
# coloque aqui, sem as #, quaisquer outras linhas que já existiam no arquivo
#
EndSection

NVIDIA com Driver Proprietário:

Section “Device”
Identifier “Device0”
Driver “nvidia”
VideoRam 32768
#
# coloque aqui, sem as #, quaisquer outras linhas que já existiam no arquivo
#
EndSection

Intel:

Section “Device”
Driver “intel”
VideoRam 32768
#
# coloque aqui, sem as #, quaisquer outras linhas que já existiam no arquivo
#
EndSection

OBS: Onde em negrito é a quantidade de memória que será utilizada. Ajustar esse valor vai alterar a quantidade de SWAP mapeada para o sistema e quanto de vídeo estará disponível para o sistema operar normalmente.

OBS 2: Cuidado para não sobrescrever qualquer configuração feita anteriormente para corrigir Screen Tearing em seu sistema!

Reinicie sua máquina.

Use este comando para checar a quantidade de SWAP disponível:

$ swapon -s

Caso não esteja ativo, tente ativar com estes comandos:

$ mkswap /dev/mtdblock0
$ swapon /dev/mtdblock0

E verifique novamente.

4. Extras

Um usuário do GitHub trouxe um script Shell que faz a montagem da memória de video como SWAP após o reinício do sistema porém eu não garanto seu funcionamento! Experimente por usa conta e risco. Tente aqui.

Esta opção não sei especificamente como remover, após configurado. Só tente se for um usuário experiente que saberá como remover depois que for executado.

5. Removendo

Caso algo dê errado ou queira remover as configurações de seu sistema, siga o tutorial do começo, apenas invertendo aonde é para criar os arquivos de configuração ou editar algum deles, apagando os arquivos e/ou linhas de configuração novas.

Os comandos você repete para atualizar, por exemplo, o “sudo update-initramfs -u” você executará novamente para que o sistema saiba que removeu as linhas/arquivos que havia colocado. Portanto basicamente é o mesmo tutorial, apenas apagando/removendo em vez de adicionar coisas.

A exceção á regra fica para o “swapon”, no final da publicação.
Em vez dele, use “swapoff”.

6. Conclusão

Pode não ser uma boa quantidade de memória, uma vez que nos tempos atuais 256 Mb de RAM não fazem muita coisa… Mas considerando sistemas leves e otimizados e/ou máquinas antigas, 256 Mb de RAM podem ser a diferença entre um travamento cabuloso ou um uso fluído. Isso vai de gosto e necessidade.

#UrbanCompassPony

Fontes:
Wiki ArchLinux
ft23.pmenier.net

4 comentários em “vram como ram”

  1. Achei bacana a matéria Nathan. Poderia fazer um adendo e ensinar como também desfazer tudo afinal o cara ainda pode querer jogar de vez em quando no PC. Ou feita essa mudança no PC não tem como mesmo??
    Valeus e o seu site é muito bacana.

    Responder

Deixe um comentário