Arch Linux NVIDIA GT218 - hpaluch/hpaluch.github.io GitHub Wiki

Arch Linux NVIDIA GT218

WARNING! It is not yet howto article - but rather attempt to make research how to make old NVIDiA GT218 card usable under Linux.

Here is my experience with NVIDIA GT218 under Arch (and other Linux). It is quite bumpy with lot of questions but very few answers. Why? There are too many standards and too many drivers and libraries and each supports different card series with different maturity. It is really hard...

Some important notes: there are 2 very distinct drivers:

  1. Proprietary binary drivers from NVIDIA (I'm out of luck, because my support for my card was dropped in drivers > 340)
  2. Open source driver Nouveau
  3. Under very old X-Window branches (available under OpenBSD) you can also find xf86-nv driver - coming from NVIDIA(!), that was intentionally crippled in many ways (NVIDIA has only priority: to not reveal how their hardware works). This driver is no longer available under Linux. See https://lwn.net/Articles/380704/

Where to start: install inxi with pacman -S --needed inxi and get basic information about my GPU (under XFCE4 + X11):

$ inxi -G --display

Graphics:
  Device-1: NVIDIA GT218 [GeForce 210] driver: nouveau v: kernel
  Display: server: X.Org v: 21.1.13 driver: X: loaded: nouveau
    unloaded: fbdev,modesetting,vesa dri: nouveau gpu: nouveau
    resolution: 1440x900~60Hz
  API: EGL v: 1.4,1.5 drivers: nouveau,swrast
    platforms: gbm,x11,surfaceless,device
  API: OpenGL v: 4.5 compat-v: 3.3 vendor: mesa v: 24.0.6-arch1.2
    renderer: NVA8

Above example uses xf86-video-nouveau

Now we can find several pages:

To find basic information on my card (GT218, NVA8 codename) we can look at:

  • https://nouveau.freedesktop.org/CodeNames.html
  • NV50 family (Tesla)
  • Has unified shader architecture, can do GPGPU and CUDA, has virtual memory, quite different from previous cards.
  • exact codename: NVA8 (GT218) includes GeForce 8400 GS, ION 2, GeForce 205, 210, G 210M, 305M, 310(M), 405 Quadro FX (380 LP, 380M), NVS (300, 2100M, 3100M)

Now we can find another source of information from Arch wiki:

Here we can find for NV50

2D features NV50
basic 2D (EXA) 11) DONE
fast 2D (XRender) 11) DONE
play videos (Xv2) 2) DONE
video decoding accel (VDPAU/XvMC) EXTFW
3D features NV50
Primitives DONE
Textures DONE
Fixed pipe TCL N/A
Vertex programs DONE7
Fragment programs DONE7
Geometry programs DONE7
Tessellation programs N/A

Other stuff (Output dual-link) omitted - not in my interest

Important footnotes:

  • EXTFW means that the feature is usable, but requires firmware from the binary driver. In my case see Gentoo.
  1. Note Xv, not XvMC. See the "video decoding accel" line for accelerated decoding.
  2. It's slow, because proper power management isn't finished yet.
  3. Use modesetting DDX for 2D acceleration.

X11 Drivers

Yes, it is no typo - there are 2 X11 drivers for open-source Nouveau: (see https://wiki.archlinux.org/title/nouveau#Installation):

  1. xf86-video-nouveau - driver where major part is in X server
  2. modesetting (when xf86-video-nouveau is not installed) - driver in kernel (I expect that it is also most similar to Wayland, but have no way to verify it)

There are 2 pointers from above Arch article:

Video playback acceleration

There is central page: https://wiki.archlinux.org/title/Hardware_video_acceleration

Following packages are suggested to install:

sudo pacman -S --needed  libva-mesa-driver mesa-vdpau

Still have only one scenario where Video Acceleration really worked:

  • on Gentoo having installed both mesa and old mesa-amber
  • it is not possible to use this on Arch because these two packages are conflicting (and amber causes extremely slow rendering of all XFCE4 and components)

But even on Gentoo it causes trouble - for example eglinfo will simply crash with signal 11, when mesa-amber is installed.

Power management

According to: https://github.com/ventureoo/nouveau-reclocking

  • normal NVIDIA card starts in Power-save mode utilizing only 10% of card performance
  • there is tip that it should work on Tesla G94-GT218 (and Fermi?) GPUs

Here is what can I see following https://wiki.archlinux.org/title/nouveau#Installation (must be run as root)

cat /sys/kernel/debug/dri/0/pstate 
03: core 135 MHz shader 270 MHz memory 135 MHz
07: core 405 MHz shader 810 MHz memory 405 MHz
0f: core 520 MHz shader 1238 MHz memory 533 MHz
AC: core 405 MHz shader 810 MHz memory 405 MHz

WARNING! Any attempt to change it ended really badly:

echo 7 > /sys/kernel/debug/dri/0/pstate
dmesg -t

BUG: scheduling while atomic: kworker/0:0/8/0x00000002
Modules linked in: snd_seq_dummy snd_hrtimer nf_conntrack_netbios_ns nf_conntrack_broadcast nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib rfkill nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 ppdev nft_reject nf_log_syslog nft_log nft_ct nft_chain_nat nf_nat nf_conntrack nouveau nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables edac_mce_amd kvm_amd ccp mxm_wmi snd_hda_codec_realtek drm_gpuvm snd_hda_codec_generic snd_hda_codec_hdmi kvm drm_exec snd_hda_intel gpu_sched snd_intel_dspcfg snd_intel_sdw_acpi i2c_algo_bit snd_hda_codec drm_ttm_helper ttm drm_display_helper snd_seq snd_hda_core cec video irqbypass snd_seq_device snd_hwdep pcspkr wmi k8temp snd_pcm snd_timer snd soundcore sunrpc i2c_nforce2 parport_pc parport binfmt_misc pktcdvd loop nfnetlink dm_thin_pool dm_persistent_data dm_bio_prison firewire_ohci firewire_core ata_generic pata_acpi forcedeth crc_itu_t sata_nv pata_amd nv_tco serio_raw ip6_tables ip_tables fuse
CPU: 0 PID: 8 Comm: kworker/0:0 Not tainted 6.8.9-300.fc40.x86_64 #1
Hardware name: MSI MS-7250/MS-7250, BIOS V1.11 04/07/2008
Workqueue: events nvkm_pstate_work [nouveau]
Call Trace:
 <TASK>
 dump_stack_lvl+0x6a/0x90
 __schedule_bug+0x56/0x70
 __schedule+0x1109/0x1710
 schedule+0x32/0xd0
 gt215_pmu_send+0x263/0x2e0 [nouveau]
 ? __pfx_autoremove_wake_function+0x10/0x10
 nvkm_memx_init+0x4a/0x130 [nouveau]
 gt215_ram_calc+0x238/0x3ab0 [nouveau]
 gt215_link_train.isra.0+0x156/0x1130 [nouveau]
 ? psi_group_change+0x243/0x4f0
 gt215_ram_calc+0x428/0x3ab0 [nouveau]
 nvkm_pstate_work+0x147/0x720 [nouveau]
 process_one_work+0x172/0x330
 worker_thread+0x273/0x3c0
 ? __pfx_worker_thread+0x10/0x10
 kthread+0xe8/0x120
 ? __pfx_kthread+0x10/0x10
 ret_from_fork+0x34/0x50
 ? __pfx_kthread+0x10/0x10
 ret_from_fork_asm+0x1b/0x30
 </TASK>

Other ways is to use kernel module parameters: https://nouveau.freedesktop.org/KernelModuleParameters.html

There is other way pointed out on https://github.com/polkaulfield/nouveau-reclocking-guide, but even using lowest possible value (3) I got corrupted screen. Added on grub:

nouveau.config=NvClkMode=3

Tips

Found this warning:

$ grep acpid ~/.local/share/xorg/Xorg.0.log
[    76.632] (WW) Open ACPI failed (/var/run/acpid.socket) (No such file or directory)

Can be fixed with:

sudo pacman -S --needed acpid
sudo systemctl enable --now acpid

ACPId is also very useful when your computer freezes - you can try to shortly push Power button - if it is only console/gpu issue you should be able to safely shutdown your machine...

⚠️ **GitHub.com Fallback** ⚠️