La désactivation de VT-d améliore les performances du GPU Intel Arc Linux sur Meteor Lake et les SoC plus récents

La désactivation de VT-d améliore les performances du GPU Intel Arc Linux sur Meteor Lake et les SoC plus récents

Dans cet article, je vais vérifier si la désactivation de la prise en charge de la virtualisation VT-d peut améliorer les performances du GPU Intel Arc dans les SoC Meteor Lake ou Lunar Lake récents en utilisant un kit Khadas Mind Maker avec un processeur Intel Core Ultra 7 258V avec Intel Arc 140V. graphiques exécutant Ubuntu 24.10.

Il y a quelques jours, j’ai lu un article sur Phoronix concernant les astuces de publication Intel pour améliorer les performances des GPU Intel sous Linux :

  • Gardez le système à jour avec les dernières versions du noyau et de Mesa.
  • Assurez-vous que le micrologiciel du SoC est à jour. Ces mises à jour du micrologiciel nécessitent actuellement l’installation du pilote graphique Windows ; mises à jour du micrologiciel via fwupd sont en cours.
  • Utilisez Wayland lorsque cela est possible, car il prend en charge des modificateurs supplémentaires pour de meilleures performances.
  • Pour MTL (Meteor Lake) et les GPU intégrés plus récents, désactivez VT-d si la virtualisation n’est pas nécessaire.
  • Pour les GPU discrets :
    • Activer ReBAR_
    • Activer ASPM_

J’étais particulièrement curieux de connaître la ligne concernant la désactivation de la virtualisation VT-d sur Meteor Lake des processeurs plus récents. J’ai donc décidé de vérifier cette astuce avec le kit Khadas Mind Maker, alias Khadas Mind 2 AI Maker Kit avec un SoC Lunar Lake. J’ai pu installer Ubuntu 24.10 mais sans WiFi, car seul Bluetooth est reconnu depuis le module AX211… Je vérifierai plus tard, et j’ai fini par utiliser un adaptateur USB-C 2,5GbE à la place pour mettre à jour le système d’exploitation avant de tester.

Ubuntu 24.04 Linux Intel Core Ultra 7 258V WaylandJ’ai pu confirmer que Wayland était activé comme c’est généralement le cas dans Ubuntu.

Nous pouvons vérifier si la virtualisation VT-D / IOMMU est activée en recherchant DMAR dans le journal du noyau :

C’est là et la dernière ligne montre même Intel VT-d (Intel Virtualization Technology for Directed I/O). Je vais exécuter quelques benchmarks Unigine et glmark2-wayland. J’ai d’abord exécuté sbc-bench.sh pour optimiser les performances du système et vérifier la limitation au cas où :

Cette commande n’exécute aucun test de performance et surveille uniquement la fréquence, la mémoire et la température du processeur. En tant que tel, il nécessite très peu d’utilisation du processeur (confirmé avec htop) et, en théorie, cela ne devrait pas avoir d’impact sur les résultats, mais d’une manière ou d’une autre, il a battu le score de référence. Voici Unigine Heaven Benchmark 4.0 avec sbc-bench.sh :

Intel Arc Unigine Heaven Benchmark VT-d activé + sbc-bench.sh

Si j’arrête sbc-bench.sh et que j’exécute à nouveau le benchmark :

GPU Intel Arc Unigine Heaven Benchmark 4.0 VT-d activé

Cela a également un impact sur le benchmark Superposition. Je n’arrive pas à comprendre pourquoi, mais j’ai arrêté de l’utiliser pour le reste de l’test. Voici les résultats du benchmark GPU Unigine Superposition v1.1 avec Intel VT-d activé.

Intel Arc GPU Unigine Superposition Benchmark VT-d activé

Enfin, j’ai exécuté glmark2-wayland en mode hors écran :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

jaufranc@Mind-2-AI-Maker-Kit-Raspberryme :~$ glmark2-wayland –off-screen

=================================================== =====

glmark2 2023.01

=================================================== =====

Informations OpenGL

GL_VENDOR : Intel

GL_RENDERER : graphiques Mesa Intel(R) (LNL)

GL_VERSION : 4.6 (Profil de compatibilité) Mesa 24.2.3-1ubuntu1

Configuration de surface : buf=32 r=8 g=8 b=8 a=8 profondeur=24 pochoir=0 échantillons=0

Taille de la surface : 800×600 fenêtré

=================================================== =====

[build] use-vbo=false : FPS : 1785 FrameTime : 0,560 ms

[build] use-vbo=true : FPS : 2202 FrameTime : 0,454 ms

[texture] texture-filter=le plus proche : FPS : 2022 FrameTime : 0,495 ms

[texture] texture-filter=linéaire : FPS : 2012 FrameTime : 0,497 ms

[texture] texture-filter=mipmap : FPS : 2009 FrameTime : 0,498 ms

[shading] shading=gouraud : FPS : 2012 FrameTime : 0,497 ms

[shading] shading=blinn-phong-inf : FPS : 2023 FrameTime : 0,495 ms

[shading] shading=phong : FPS : 1999 FrameTime : 0,500 ms

[shading] shading=cel : FPS : 1998 FrameTime : 0,501 ms

[bump] bump-render=high-poly : FPS : 1715 FrameTime : 0,583 ms

[bump] bump-render=normals : FPS : 2160 FrameTime : 0,463 ms

[bump] bump-render=hauteur : FPS : 1998 FrameTime : 0,501 ms

[effect2d] noyau = 0,1,0;1,-4,1;0,1,0; : FPS : 1900 FrameTime : 0,526 ms

[effect2d] noyau = 1,1,1,1,1;1,1,1,1,1;1,1,1,1,1; : FPS : 1 358 FrameTime : 0,736 ms

[pulsar] light=false:quads=5:texture=false : FPS : 2054 FrameTime : 0,487 ms

[desktop] Blur-radius=5:effect=blur:passes=1:separable=true:windows=4 : FPS : 992 FrameTime : 1,009 ms

[desktop] effect=shadow:windows=4 : FPS : 1187 FrameTime : 0,843 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1325 FrameTime : 0,755 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata : FPS : 684 FrameTime : 1,463 ms

[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1418 FrameTime : 0,705 ms

[ideas] vitesse=durée : FPS : 1526 FrameTime : 0,655 ms

[jellyfish] : FPS : 1674 FrameTime : 0,598 ms

[terrain] : FPS : 551 FrameTime : 1,816 ms

[shadow] : FPS : 1819 FrameTime : 0,550 ms

[refract] : FPS : 667 FrameTime : 1 500 ms

[conditionals] fragment-steps=0:vertex-steps=0 : FPS : 1980 FrameTime : 0,505 ms

[conditionals] fragment-steps=5:vertex-steps=0 : FPS : 1984 FrameTime : 0,504 ms

[conditionals] fragment-steps=0:vertex-steps=5 : FPS : 1966 FrameTime : 0,509 ms

[function] fragment-complexity=low:fragment-steps=5 : FPS : 1970 FrameTime : 0,508 ms

[function] fragment-complexity=medium:fragment-steps=5 : FPS : 1958 FrameTime : 0,511 ms

[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5 : FPS : 1886 FrameTime : 0,530 ms

[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5 : FPS : 1961 FrameTime : 0,510 ms

[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5 : FPS : 1964 FrameTime : 0,509 ms

=================================================== =====

glmark2 Note : 1718

=================================================== =====

Maintenant que nous avons des résultats de référence avec VT-d activé, j’ai redémarré l’ordinateur pour accéder au BIOS et trouver les paramètres permettant de désactiver VT-d.

Désactiver la technologie de virtualisation Intel VMX VT-d

Je suis d’abord allé dans Avancé-> Configuration du processeur, puis j’ai défini la technologie de virtualisation Intel (VMX) sur Désactivée. Mais cela n’a pas aidé car c’est pour VT-x, et je voulais désactiver VT-d…

Configuration d'Aptio Configuration AMI BIOS VT-d

J’ai finalement trouvé la configuration VT-d dans le menu de configuration Avancé-> Configuration de l’agent système (SA)-> VT-d. Mais ce n’était pas très utile non plus, puisque VT-d Enabled ne peut pas être modifié en Disabled dans le BIOS.

Puisque nous utilisons Linux, j’ai désactivé VT-d avec la ligne suivante dans /etc/default/grub :

GRUB_CMDLINE_LINUX= »intel_iommu=off »

Avant d’exécuter la commande pour mettre à jour grub :

Après un redémarrage, nous pouvons voir qu’IOMMU est désactivé et que VT-d n’apparaît plus dans le journal du noyau :

jaufranc@Mind-2-AI-Maker-Kit-Raspberryme:~$ dmesg | grep -i DMAR

[    0.005303] ACPI : DMAR 0x000000006DA01000 0000C0 (v01 ALASKA AMI 01072009 AMI 01000013)

[    0.005333] ACPI : réservation de la mémoire de la table DMAR à [mem 0x6da01000-0x6da010bf]

[    0.036575] DMAR : IOMMU désactivé

[    0.097931] DMAR : largeur d’adresse d’hôte 38

[    0.097932] DMAR : DRHD base : 0x000000fc800000 drapeaux : 0x0

[    0.097940] DMAR : dmar0 : reg_base_addr fc800000 ver 7:1 cap e9de008cee690402 ecap 1aca9a00f0ef5e

[    0.097947] DMAR : DRHD base : 0x000000fc810000 drapeaux : 0x0

[    0.097950] DMAR : dmar1 : reg_base_addr fc810000 ver 7:1 cap e9de008cee690402 ecap 1aca9a00f0ef5e

[    0.097953] DMAR : DRHD base : 0x000000fc820000 drapeaux : 0x1

[    0.098047] DMAR : dmar2 : reg_base_addr fc820000 ver 7:1 cap e9de008cee690402 ecap 1ac89800f0efda

[    0.098081] DMAR : indicateurs SATC : 0x1

[    0.098083] DMAR-IR : IOAPIC id 2 sous DRHD base 0xfc820000 IOMMU 2

[    0.098084] DMAR-IR : ID HPET 0 sous la base DRHD 0xfc820000

[    0.098085] DMAR-IR : l’invalidation en file d’attente sera activée pour prendre en charge le remapping x2apic et Intr.

[    0.099728] DMAR-IR : activation du remappage IRQ en mode x2apic

Répétons les benchmarks pour tester le GPU Intel Arc sans VT-d.

GPU Intel Arc 140V Unigine Heaven 4.0 VT-d désactivé Linux 6.11

Le FPS est arrivé à 46,4 sans VT-d contre 42,0 avec. Cela représente une petite amélioration de 4,4 FPS, soit un peu plus de 10 pour cent.

Superposition GPU Intel Arc 140V VT-d désactivée Linux 6.11Nous n’avons constaté aucune amélioration dans le benchmark Superposition avec un score légèrement inférieur de 3210 points contre 3286 points, soit une baisse de 2,4%.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

jaufranc@Mind-2-AI-Maker-Kit-Raspberryme :~$ glmark2-wayland –off-screen

=================================================== =====

glmark2 2023.01

=================================================== =====

Informations OpenGL

GL_VENDOR : Intel

GL_RENDERER : graphiques Mesa Intel(R) (LNL)

GL_VERSION : 4.6 (Profil de compatibilité) Mesa 24.2.3-1ubuntu1

Configuration de surface : buf=32 r=8 g=8 b=8 a=8 profondeur=24 pochoir=0 échantillons=0

Taille de la surface : 800×600 fenêtré

=================================================== =====

[build] use-vbo=false : FPS : 1779 FrameTime : 0,562 ms

[build] use-vbo=true : FPS : 2442 FrameTime : 0,410 ms

[texture] texture-filter=le plus proche : FPS : 2274 FrameTime : 0,440 ms

[texture] texture-filter=linéaire : FPS : 2230 FrameTime : 0,448 ms

[texture] texture-filter=mipmap : FPS : 2195 FrameTime : 0,456 ms

[shading] shading=gouraud : FPS : 2175 FrameTime : 0,460 ms

[shading] shading=blinn-phong-inf : FPS : 2212 FrameTime : 0,452 ms

[shading] shading=phong : FPS : 2122 FrameTime : 0,471 ms

[shading] shading=cel : FPS : 2109 FrameTime : 0,474 ms

[bump] bump-render=high-poly : FPS : 1788 FrameTime : 0,559 ms

[bump] bump-render=normals : FPS : 2371 FrameTime : 0,422 ms

[bump] bump-render=hauteur : FPS : 2321 FrameTime : 0,431 ms

[effect2d] noyau = 0,1,0;1,-4,1;0,1,0; : FPS : 1929 FrameTime : 0,518 ms

[effect2d] noyau = 1,1,1,1,1;1,1,1,1,1;1,1,1,1,1; : FPS : 1402 FrameTime : 0,714 ms

[pulsar] light=false:quads=5:texture=false : FPS : 2151 FrameTime : 0,465 ms

[desktop] Blur-radius=5:effect=blur:passes=1:separable=true:windows=4 : FPS : 995 FrameTime : 1,006 ms

[desktop] effect=shadow:windows=4 : FPS : 1401 FrameTime : 0,714 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1170 FrameTime : 0,855 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata : FPS : 490 FrameTime : 2,042 ms

[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1176 FrameTime : 0,851 ms

[ideas] vitesse=durée : FPS : 1511 FrameTime : 0,662 ms

[jellyfish] : FPS : 1744 FrameTime : 0,573 ms

[terrain] : FPS : 385 FrameTime : 2,598 ms

[shadow] : FPS : 1809 FrameTime : 0,553 ms

[refract] : FPS : 681 FrameTime : 1,470 ms

[conditionals] fragment-steps=0:vertex-steps=0 : FPS : 2053 FrameTime : 0,487 ms

[conditionals] fragment-steps=5:vertex-steps=0 : FPS : 2063 FrameTime : 0,485 ms

[conditionals] fragment-steps=0:vertex-steps=5 : FPS : 2048 FrameTime : 0,488 ms

[function] fragment-complexity=low:fragment-steps=5 : FPS : 2087 FrameTime : 0,479 ms

[function] fragment-complexity=medium:fragment-steps=5 : FPS : 2051 FrameTime : 0,488 ms

[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5 : FPS : 2048 FrameTime : 0,488 ms

[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5 : FPS : 2037 FrameTime : 0,491 ms

[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5 : FPS : 2006 FrameTime : 0,499 ms

=================================================== =====

glmark2 Note : 1794

=================================================== =====

Le score glmark2-wayland était légèrement plus élevé (1 794 contre 1 718) avec VT-d désactivé, soit une amélioration de 4,4 %. Il semble donc y avoir un petit avantage à désactiver VT-d sur les SoC Intel Lunar Lake.

Une autre différence était que le score Unigine Heaven sous Windows 11 avec DirectX était beaucoup plus élevé (81,2 FPS / 2 045 points) que sous Linux avec OpenGL. Les scores Linux sont toujours un peu inférieurs dans ce benchmark, mais ici l’écart est assez important. De plus, lorsque j’ai testé le mini PC GEEKOM GT1 avec un SoC Intel Core Ultra 9 185H « Meteor Lake » (graphiques Intel Arc à 2,35 GHz avec 8 cœurs Xe) dans Ubuntu 24.10, il a également obtenu un score beaucoup plus élevé (77,6 FPS / 1 956 points). . L’Intel Arc Graphics 140V trouvé dans le SoC Core Ultra 7 258V comporte également 8 cœurs Xe mais seulement cadencés jusqu’à 1,95 GHz, ce qui signifie que le score devrait être légèrement inférieur, mais pas tant que ça. Les processeurs Lunar Lake sont très récents, j’ai donc décidé de mettre à niveau le noyau Linux vers Linux 6.13-rc1 fourni par Canonical pour voir si je pouvais voir des améliorations :

wget https://kernel.ubuntu.com/mainline/v6.13-rc1/amd64/linux-headers-6.13.0-061300rc1-generic_6.13.0-061300rc1.202412012327_amd64.deb

wget https://kernel.ubuntu.com/mainline/v6.13-rc1/amd64/linux-headers-6.13.0-061300rc1_6.13.0-061300rc1.202412012327_all.deb

wget https://kernel.ubuntu.com/mainline/v6.13-rc1/amd64/linux-image-unsigned-6.13.0-061300rc1-generic_6.13.0-061300rc1.202412012327_amd64.deb

wget https://kernel.ubuntu.com/mainline/v6.13-rc1/amd64/linux-modules-6.13.0-061300rc1-generic_6.13.0-061300rc1.202412012327_amd64.deb

sudo dpkg -i *.deb

J’ai également dû désactiver Secure Boot dans le BIOS pour démarrer le système avec un noyau non signé, sinon il ne démarrerait pas avec l’erreur « bad shim signature ».

Intel Arc 140V Unigine Heaven Benchmark VT-d désactivé Linux 6.13

Cela s’améliore à 48 FPS dans Unigine Heaven Benchmark 4.0 même si l’écart est encore important. La mise à niveau vers Linux 6.13 et la désactivation de VT-d nous ont permis de gagner 6,2 FPS, soit une amélioration presque respectable de 15 % de la fréquence d’images.

Intel Arc 140V Unigine Superposition Benchmark VT-d désactivé Linux 6.13Le benchmark Superposition reste inchangé…

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

jaufranc@Mind-2-AI-Maker-Kit-Raspberryme :~$ glmark2-wayland –off-screen

=================================================== =====

glmark2 2023.01

=================================================== =====

Informations OpenGL

GL_VENDOR : Intel

GL_RENDERER : graphiques Mesa Intel(R) (LNL)

GL_VERSION : 4.6 (Profil de compatibilité) Mesa 24.2.3-1ubuntu1

Configuration de surface : buf=32 r=8 g=8 b=8 a=8 profondeur=24 pochoir=0 échantillons=0

Taille de la surface : 800×600 fenêtré

=================================================== =====

[build] use-vbo=false : FPS : 2002 FrameTime : 0,500 ms

[build] use-vbo=true : FPS : 2546 FrameTime : 0,393 ms

[texture] texture-filter=le plus proche : FPS : 2387 FrameTime : 0,419 ms

[texture] texture-filter=linéaire : FPS : 2278 FrameTime : 0,439 ms

[texture] texture-filter=mipmap : FPS : 2305 FrameTime : 0,434 ms

[shading] shading=gouraud : FPS : 2302 FrameTime : 0,435 ms

[shading] shading=blinn-phong-inf : FPS : 2283 FrameTime : 0,438 ms

[shading] shading=phong : FPS : 2223 FrameTime : 0,450 ms

[shading] shading=cel : FPS : 2236 FrameTime : 0,447 ms

[bump] bump-render=high-poly : FPS : 1906 FrameTime : 0,525 ms

[bump] bump-render=normals : FPS : 2480 FrameTime : 0,403 ms

[bump] bump-render=hauteur : FPS : 2421 FrameTime : 0,413 ms

[effect2d] noyau = 0,1,0;1,-4,1;0,1,0; : FPS : 2007 FrameTime : 0,498 ms

[effect2d] noyau = 1,1,1,1,1;1,1,1,1,1;1,1,1,1,1; : FPS : 1435 FrameTime : 0,697 ms

[pulsar] light=false:quads=5:texture=false : FPS : 2276 FrameTime : 0,439 ms

[desktop] Blur-radius=5:effect=blur:passes=1:separable=true:windows=4 : FPS : 1037 FrameTime : 0,964 ms

[desktop] effect=shadow:windows=4 : FPS : 1456 FrameTime : 0,687 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1393 FrameTime : 0,718 ms

[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata : FPS : 714 FrameTime : 1,401 ms

[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map : FPS : 1536 FrameTime : 0,651 ms

[ideas] vitesse=durée : FPS : 1630 FrameTime : 0,614 ms

[jellyfish] : FPS : 1874 FrameTime : 0,534 ms

[terrain] : FPS : 511 FrameTime : 1,958 ms

[shadow] : FPS : 2074 FrameTime : 0,482 ms

[refract] : FPS : 691 FrameTime : 1,448 ms

[conditionals] fragment-steps=0:vertex-steps=0 : FPS : 2119 FrameTime : 0,472 ms

[conditionals] fragment-steps=5:vertex-steps=0 : FPS : 2110 FrameTime : 0,474 ms

[conditionals] fragment-steps=0:vertex-steps=5 : FPS : 2105 FrameTime : 0,475 ms

[function] fragment-complexity=low:fragment-steps=5 : FPS : 2104 FrameTime : 0,475 ms

[function] fragment-complexity=medium:fragment-steps=5 : FPS : 2096 FrameTime : 0,477 ms

[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5 : FPS : 2062 FrameTime : 0,485 ms

[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5 : FPS : 2100 FrameTime : 0,476 ms

[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5 : FPS : 2077 FrameTime : 0,482 ms

=================================================== =====

glmark2 Note : 1901

=================================================== =====

Le score de glmark2-wayland s’est encore amélioré à 1 901 points, soit une amélioration de 10,7 % par rapport à l’activation de Linux 6.11 et VT-d.

Ce que nous avons appris ici, c’est que la désactivation de VT-d peut effectivement entraîner une amélioration des performances du GPU sous Linux, mais cela dépend de la charge de travail. La mise à niveau du noyau Linux s’est également avérée présenter certains avantages puisque le Intel Core Ultra 7 258V Lunar Lake est assez récent et que certaines optimisations logicielles sont encore possibles. Le BIOS du kit Khadas Mind Maker ne nous permet pas de désactiver VT-d, je n’ai donc pas testé cela sous Windows, mais certains Redditors ont découvert que la désactivation de VT-d améliorait les performances/la fréquence d’images de certains jeux Windows, tandis que d’autres n’y ai vu aucun avantage.

Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

YouTube video

  • Obotsnoi Kit de conversion complet permettant le processeur graphique SXM2 Form Factor V100 via PCIe Passthrough avec câble et carte hôte inclus