Optimisations hardware via setpci

Optimisations hardware via setpci - Hardware - Linux et OS Alternatifs

Marsh Posté le 06-05-2008 à 12:09:03    

Salut,
n'ayant trouvé nulle part sur Internet d'informations équivalentes, je me permets de poster ici le résultat de mes recherches.
 
J'ai longtemps cherché pour Linux un équivalent aux outils Wcpredit et Wcprset sous Windows.
Ces outils permettent de modifier les registres du chipset de la carte mère.
Cela permet par exemple d'effectuer des réglages supportés par la carte mère, mais qui ne sont pas proposés par le Setup du Bios.
 
Pour ma part, j'ai réussi à optimiser de manière très perceptible les performances de ma bonne vieille carte mère Chaintech 7KDD (bi-socket A), à base de chipset AMD 760MPX, en utilisant SETPCI.
 
 
Le script que j'utilise est le suivant. Si vous avez déja écrit des choses équivalentes pour d'autres chipsets, je vous invite à les poster ici.
 
 

Code :
  1. #!/bin/bash
  2. # This script optimizes performances for motherboard with northbridge AMD760/AMD762 MP/MPX
  3. # Informations were gathered from:
  4. #       http://www.neoseeker.com/Articles/ [...] es/amd762/
  5. #       http://forums.2cpu.com/showthread. [...] hlight=mpx
  6. #       http://www.amd.com/fr-fr/Processor [...] 96,00.html
  7. # The SETPCI command
  8. # Northbridge is usually device 00:00.0
  9. SETPCI="setpci -v -s 00:00.0"
  10. # Syntax:
  11. #       Columns are:
  12. #       Offset  Mask.b  Mask.h  Value.b Value.h Description
  13. #
  14. #       Command syntax is:
  15. #       SETPCI OFFSET=VALUE.h:MASK.h
  16. # CHIPSET | Speculative Read Data Movement Enable
  17. # Please note: the left 4 bits are for CPU0, the right 4 bits are for CPU1
  18. # !!! CPU0 and CPU1 *must* be configured equally !!!
  19. #       46      11111111 FF     00000000 00     Disabled
  20. #       46      11111111 FF     00010001 11     Single clock
  21. #       46      11111111 FF     00100010 22     2 clocks
  22. #       ...
  23. #       46      11111111 FF     11111111 FF     15 clocks
  24. #
  25. $SETPCI 46=FF:FF
  26. # MEMORY | ECC | Diagnostics mode
  27. #       49      00010000 10     00000000 00     Disable
  28. #       49      00010000 10     00010000 10     Enable
  29. #
  30. #$SETPCI 49=10:10
  31. # MEMORY | ECC | Configure what what will be checked and corrected
  32. #       49      00001100 0C     00000000 00     Set to 00 if ECC is disabled
  33. #       49      00001100 0C     00000100 04     Check only
  34. #       49      00001100 0C     00001000 08     Check and Correct
  35. #       49      00001100 0C     00001100 0C     Check, Correct, Scrub
  36. #
  37. #$SETPCI 49=08:0C
  38. # MEMORY | PERFORMANCE | TRCD (Ras-to-Cas Delay)
  39. #       54      00000011 03     00000000 00     TRCD = 1
  40. #       54      00000011 03     00000001 01     TRCD = 2 (optimized)
  41. #       54      00000011 03     00000010 02     TRCD = 3 (default ?)
  42. #       54      00000011 03     00000011 03     TRCD = 4
  43. #
  44. $SETPCI 54=01:03
  45. # MEMORY | PERFORMANCE | CAS Latency
  46. # Default value is set by BIOS, depending on the memory modules installed.
  47. #       54      00001100 0C     00000000 00     CAS = 3
  48. #       54      00001100 0C     00000100 04     CAS = 2 (optimized)
  49. #       54      00001100 0C     00001000 08     CAS = 2.5
  50. #
  51. $SETPCI 54=04:0C
  52. # MEMORY | PERFORMANCE | TRAS
  53. #       54      01110000 70     01110000 70     TRAS = 9
  54. #       54      01110000 70     01100000 60     TRAS = 8
  55. #       54      01110000 70     01010000 50     TRAS = 7 (default ?)
  56. #       54      01110000 70     01000000 40     TRAS = 6
  57. #       54      01110000 70     00110000 30     TRAS = 5
  58. #       54      01110000 70     00100000 20     TRAS = 4
  59. #       54      01110000 70     00010000 10     TRAS = 3
  60. #       54      01110000 70     00000000 00     TRAS = 2 (optimized)
  61. #
  62. $SETPCI 54=00:70
  63. # MEMORY | PERFORMANCE | TRP
  64. # Note: this setting uses 2 bits: bit 7 at offset 54 + bit 0 at offset 55
  65. #       54      10000000 80     10000000 80     TRP = 2 (optimized)
  66. #       55      00000001 01     00000000 00     TRP = 2 (optimized)
  67. #       54      10000000 80     00000000 00     TRP = 3 (recommended)
  68. #       55      00000001 01     00000000 00     TRP = 3 (recommended)
  69. #       54      10000000 80     10000000 80     TRP = 4
  70. #       55      00000001 01     00000001 01     TRP = 4
  71. #
  72. $SETPCI 54=80:80,00:01
  73. # MEMORY | PERFORMANCE | TRC
  74. #       55      00001110 0E     00001110 0E     TRC = 10
  75. #       55      00001110 0E     00001100 0C     TRC = 9
  76. #       55      00001110 0E     00001010 0A     TRC = 8 (default)
  77. #       55      00001110 0E     00001000 08     TRC = 7
  78. #       55      00001110 0E     00000110 06     TRC = 6
  79. #       55      00001110 0E     00000100 04     TRC = 5 (optimized)
  80. #       55      00001110 0E     00000010 02     TRC = 4
  81. #       55      00001110 0E     00000000 00     TRC = 3
  82. #
  83. $SETPCI 55=04:0E
  84. # MEMORY | PERFORMANCE | Page Hit Limit
  85. # Not sure what the best setting is ...
  86. #       55      11000000 C0     00000000 00     Page Hit Limit = 1
  87. #       55      11000000 C0     01000000 40     Page Hit Limit = 4
  88. #       55      11000000 C0     10000000 80     Page Hit Limit = 8 (default)
  89. #       55      11000000 C0     11000000 C0     Page Hit Limit = 16 (optimized ??)
  90. #
  91. $SETPCI 55=C0:C0
  92. # MEMORY | PERFORMANCE | Idle Cycle Limit
  93. #       56      00000111 07     00000111 07     Disable
  94. #       56      00000111 07     00000110 06     48 cycles
  95. #       56      00000111 07     00000101 05     32 cycles
  96. #       56      00000111 07     00000100 04     24 cycles
  97. #       56      00000111 07     00000011 03     16 cycles
  98. #       56      00000111 07     00000010 02     12 cycles
  99. #       56      00000111 07     00000001 01     8 cycles (default)
  100. #       56      00000111 07     00000000 00     0 cycles
  101. #
  102. $SETPCI 56=01:07
  103. # MEMORY | PERFORMANCE | TRRD
  104. # I did not try to change this one...
  105. #       56      10000000 80     00000000 00     TRRD = 2
  106. #
  107. # CHIPSET | Write Recovery Time
  108. #       57      00000011 03     00000000 00     1 cycle (optimized)
  109. #       57      00000011 03     00000010 02     2 cycles (default)
  110. #       57      00000011 03     00000011 03     3 cycles
  111. #
  112. $SETPCI 57=00:03
  113. # CHIPSET | Write to Read delay
  114. #       57      00000100 04     00000000 00     1 cycle (optimized)
  115. #       57      00000100 04     00000100 04     2 cycles (default)
  116. #
  117. $SETPCI 57=00:04
  118. # CHIPSET | Use Registered DDR
  119. # I did not try to change this one, since the bios should always set it correctly !
  120. #       57      00001000 08     00001000 08     Enable
  121. #
  122. # CHIPSET | Super Bypass Wait State
  123. # The manual says that with FSB=133 Mhz, this bit MUST be set.
  124. #       57      10000000 80     00000000 00     100 Mhz
  125. #       57      10000000 80     10000000 80     133 Mhz
  126. #
  127. # CHIPSET | Burst Refresh
  128. # The manual states that problems exist with this setting (memory data corruption).
  129. # But it also states that it never happens under Windows (???)
  130. #       5A      00010000 10     00000000 00     No refresh (default)
  131. #       5A      00010000 10     00010000 10     Enable queuing (optimized)
  132. #
  133. $SETPCI 5A=10:10
  134. # CHIPSET | Cycles per Refresh
  135. #       5A      00000011 03     00000000 00     15.36 µs
  136. #       5A      00000011 03     00000001 01     11.52 µs
  137. #       5A      00000011 03     00000010 02     7.68 µs (default)
  138. #       5A      00000011 03     00000011 03     3.84 µs
  139. #
  140. # CHIPSET | Super Bypass Enable
  141. # Enable only if you have 1 CPU (leave disabled on SMP systems).
  142. # Too bad for us SMP users !
  143. #       61      00000010 02     00000000 00     Disable (default)
  144. #       61      00000010 02     00000010 02     Enable
  145. #
  146. # PCI | PCI Pipe
  147. #       71      00000100 04     00000000 00     Disable (default on MP)
  148. #       71      00000100 04     00000100 04     Enable (optimized, default on MPX)
  149. #
  150. $SETPCI 71=04:04
  151. # PCI | PCI Block Write
  152. #       71      00000010 02     00000000 00     Disable (default on MP)
  153. #       71      00000010 02     00000010 02     Enable (optimized, default on MPX)
  154. #
  155. $SETPCI 71=02:02
  156. #  AGP | AGP Prefetch
  157. #       84      00000100 04     00000000 00     Disable (default on MP)
  158. #       84      00000100 04     00000100 04     Enable (optimized, default on MPX)
  159. #
  160. $SETPCI 84=04:04
  161. # PCI | PCI Prefetch
  162. #       84      00000010 02     00000000 00     Disable (default on MP)
  163. #       84      00000010 02     00000010 02     Enable (optimized, default on MPX)
  164. #
  165. $SETPCI 84=02:02
  166. # CPU | CPU1 Multiplier
  167. #       88      00001111 0F     00000000 00     11.0
  168. #       88      00001111 0F     00000001 01     11.5
  169. #       88      00001111 0F     00000010 02     12.0
  170. #       88      00001111 0F     00000011 03     12.5
  171. #       88      00001111 0F     00000100 00     5.0
  172. #       88      00001111 0F     00000101 01     5.5
  173. #       88      00001111 0F     00000110 02     6.0
  174. #       88      00001111 0F     00000111 03     6.5
  175. #       88      00001111 0F     00001000 00     7.0
  176. #       88      00001111 0F     00001001 01     7.5
  177. #       88      00001111 0F     00001010 02     8.0
  178. #       88      00001111 0F     00001011 03     8.5
  179. #       88      00001111 0F     00001100 00     9.0
  180. #       88      00001111 0F     00001101 01     9.5
  181. #       88      00001111 0F     00001110 02     10.0
  182. #       88      00001111 0F     00001111 03     10.5
  183. #
  184. # CPU | CPU2 Multiplier
  185. #       89      00001111 0F     00000000 00     11.0
  186. #       89      00001111 0F     00000001 01     11.5
  187. #       89      00001111 0F     00000010 02     12.0
  188. #       89      00001111 0F     00000011 03     12.5
  189. #       89      00001111 0F     00000100 00     5.0
  190. #       89      00001111 0F     00000101 01     5.5
  191. #       89      00001111 0F     00000110 02     6.0
  192. #       89      00001111 0F     00000111 03     6.5
  193. #       89      00001111 0F     00001000 00     7.0
  194. #       89      00001111 0F     00001001 01     7.5
  195. #       89      00001111 0F     00001010 02     8.0
  196. #       89      00001111 0F     00001011 03     8.5
  197. #       89      00001111 0F     00001100 00     9.0
  198. #       89      00001111 0F     00001101 01     9.5
  199. #       89      00001111 0F     00001110 02     10.0
  200. #       89      00001111 0F     00001111 03     10.5
  201. #
  202. # CPU | AMD Athlon Bus Threshold
  203. #       8B      00000001 01     00000000 00     1.35V-1.9V (default)
  204. #       8B      00000001 01     00000001 01     2.0V-2.2V
  205. #
  206. # AGP | Fast Writes
  207. #       A8      00010000 10     00000000 00     Disable (default)
  208. #       A8      00010000 10     00010000 10     Enable
  209. #
  210. $SETPCI A8=10:10
  211. # AGP | AGP Mode
  212. #       A8      00000111 07     00000001 01     AGP 1x
  213. #       A8      00000111 07     00000011 03     AGP 2x (also supports 1x cards)
  214. #       A8      00000111 07     00000111 07     AGP 4x (also supports 1x, 2x cards)
  215. #
  216. $SETPCI A8=07:07
  217. # AGP | Sideband Addressing
  218. #       A9      00000010 02     00000000 00     Disable (default)
  219. #       A9      00000010 02     00000010 02     Enable
  220. #
  221. $SETPCI A9=02:02
  222. # AGP | Fast Writes Override
  223. #       B9      10000000 80     00000000 00     Disable
  224. #       B9      10000000 80     10000000 80     Enable (default)
  225. #
  226. # AGP | Force AGP 4x
  227. #       B9      01000000 40     00000000 00     Disable
  228. #       B9      01000000 40     01000000 40     Enable (default)
  229. #


Message édité par [Albator] le 07-05-2008 à 14:02:39
Reply

Marsh Posté le 06-05-2008 à 12:09:03   

Reply

Marsh Posté le 06-05-2008 à 20:56:54    

très intéressant, drapeau.
J'ai pas regardé les liens, mais il semble qu'il faille connaitre l'adresse des registres, non ? Si j'ai bien compris tu trouve cela sur la tech doc d'amd, mais es-ce qu'on peut utiliser cela pour d'autres chipsets ? Je pense notamment à Intel et nvidia.

Reply

Marsh Posté le 07-05-2008 à 01:21:21    

Ca me rappelle des souvenirs tout cela !


---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
Reply

Marsh Posté le 07-05-2008 à 08:35:54    

Je confirme qu'il faut connaître à l'avance les adresses des registres, et donc se palucher les datasheet des constructeurs de chipset.
 
Ou bien faire plus simplement comme je l'ai fait, trouver sur le net un Windowsien qui l'a déja fait pour moi avec Wpcredit, et traduire en script avec setpci :)
 
Pour ma part je cherche maintenant à faire la même chose pour:
- Nvidia Nforce 2
- Sis 746FX
- Intel i865PE (les derniers modèles, ceux sur lesquels le PAT n'est normalement pas activable)

Reply

Marsh Posté le 07-05-2008 à 11:10:10    

super intéressant.
 
sinon à la ligne 211, petite erreur d'innatention ;)
 
sinon c'est possible de forcer les coeffs avec setpci ou ca ne passe pas ? Je suppose que ca doit dépendre du proc (bloquage du coeff), mais peut-être...

Reply

Marsh Posté le 09-05-2008 à 11:02:02    

Bien vu pour la ligne 211 :)
Pour les coefs, je confirme qu'il faut un CPU au coef débloqué pour que ça fonctionne.
 
Voici quelques réglages pour Nforce2 Ultra 400 (j'ai pas trop testé car ma carte mère propose déja presque tout dans le bios):
 

Code :
  1. #!/bin/bash
  2. # NFORCE 2 ULTRA 400
  3. # http://www.nforcershq.com/forum/1-vt25100.html?start=0
  4. # http://www.diy-street.com/forum//showthread.php?s=fb9f8fc972575469183696a8de88ae64&t=867
  5. ################
  6. # NORTH BRIDGE #
  7. ################
  8. # Vendor ID: 10DE
  9. # Device ID: 01E0
  10. #
  11. SETPCI="setpci -s 00:00.0 -v"
  12. # CPU | S2K Disconnect
  13. # This should lower the CPU temperature
  14. #       6F      00010000 10     00000000 00     Disable (default)
  15. #       6F      00010000 10     00010000 10     Enable
  16. #
  17. $SETPCI 6F=10:10
  18. # CPU | FSB Control
  19. # No information available :'-(
  20. #       E0      11111111 FF
  21. #       F3      11111111 FF
  22. #
  23. # AGP | SideBand Adressing
  24. #       49      00000010 02     00000000 00     Disable
  25. #       49      00000010 02     00000010 02     Enable
  26. #
  27. $SETPCI 49=02:02
  28. # AGP | Aperture size
  29. #       80      00001111 0F     00001111 0F     32M
  30. #       80      00001111 0F     00001110 0E     64M
  31. #       80      00001111 0F     00001100 0C     128M
  32. #       80      00001111 0F     00001000 08     256M
  33. #       80      00001111 0F     00000000 00     512M
  34. #
  35. # MEMORY | DRAM Auto-Precharge
  36. #       87      00000010 02     00000000 00     Disabled
  37. #       87      00000010 02     00000010 02     Enabled (default)
  38. #
  39. # MEMORY | CAS Latency
  40. # Note: this settings uses 3 bits !
  41. #       A0      10000000 80     00000000 00     2.0T
  42. #       A8      01000000 40     00000000 00     2.0T
  43. #       B0      00100000 20     00100000 20     2.0T
  44. #
  45. #       A0      10000000 80     00000000 00     2.5T
  46. #       A8      01000000 40     01000000 40     2.5T
  47. #       B0      00100000 20     00100000 20     2.5T
  48. #
  49. ##################
  50. # AGP CONTROLLER #
  51. ##################
  52. # Vendor ID: 10DE
  53. # Device ID: 01E8
  54. #
  55. SETPCI="setpci -s 00:1e.0 -v"
  56. # AGP | Controller latency
  57. # This setting uses the 8 bits
  58. #       0D      11111111 FF     11111111 FF     255
  59. #       0D      11111111 FF     11100000 E0     224
  60. #       0D      11111111 FF     11000000 C0     192
  61. #       0D      11111111 FF     10100000 A0     160
  62. #       0D      11111111 FF     10000000 80     128
  63. #       0D      11111111 FF     01100000 60     96
  64. #       0D      11111111 FF     01000000 40     64
  65. #       0D      11111111 FF     00100000 20     32 (default)
  66. #
  67. $SETPCI 0D=FF:FF
  68. # AGP | Bus latency
  69. # This setting uses the 8 bits
  70. #       1B      11111111 FF     11111111 FF     255
  71. #       1B      11111111 FF     11100000 E0     224
  72. #       1B      11111111 FF     11000000 C0     192
  73. #       1B      11111111 FF     10100000 A0     160
  74. #       1B      11111111 FF     10000000 80     128
  75. #       1B      11111111 FF     01100000 60     96
  76. #       1B      11111111 FF     01000000 40     64
  77. #       1B      11111111 FF     00100000 20     32 (default)
  78. #
  79. $SETPCI 1B=FF:FF
  80. ##################
  81. # PCI CONTROLLER #
  82. ##################
  83. # Vendor ID: 10DE
  84. # Device ID: 006C
  85. #
  86. SETPCI="setpci -s 00:08.0 -v"
  87. # PCI | Bus latency
  88. # This setting uses the 8 bits
  89. #       1B      11111111 FF     11111111 FF     255
  90. #       1B      11111111 FF     11100000 E0     224
  91. #       1B      11111111 FF     11000000 C0     192
  92. #       1B      11111111 FF     10100000 A0     160
  93. #       1B      11111111 FF     10000000 80     128
  94. #       1B      11111111 FF     01100000 60     96
  95. #       1B      11111111 FF     01000000 40     64
  96. #       1B      11111111 FF     00100000 20     32 (default)
  97. #
  98. #####################
  99. # MEMORY CONTROLLER #
  100. #####################
  101. # Vendor ID: 10DE
  102. # Device ID: 01EC
  103. #
  104. SETPCI="setpci -s 00:00.4 -v"
  105. # Strength and Rate Settings:
  106. #       Bios    Data
  107. #       1       11
  108. #       2       22
  109. #       3       33
  110. #       ...
  111. #       15      FF
  112. # MEMORY | Drive Strength
  113. # This setting uses all 8 bits
  114. # Default: 33,99
  115. #       7D,81   11111111 FF                     DIMM1
  116. #       67,73   11111111 FF                     DIMM2
  117. #       65,71   11111111 FF                     DIMM3
  118. #
  119. # MEMORY | Slew rate Registers
  120. # This settings uses all 8 bits
  121. # Default: AA
  122. #       7C      11111111 FF                     DIMM1
  123. #       66      11111111 FF                     DIMM2
  124. #       64      11111111 FF                     DIMM3
  125. #
  126. # MEMORY | Data Scavaged Rate
  127. #       96      00000001 01     00000000 00     Fast
  128. #       96      00000001 01     00000001 01     Normal (default)
  129. #
  130. $SETPCI 96=01:01
  131. # MEMORY | Super By Pass
  132. #       91      00000001 01     00000000 00     Disable
  133. #       91      00000001 01     00000001 01     Enable (default)
  134. #

Reply

Marsh Posté le 12-01-2009 à 16:33:10    

Je travail actuellement à l'optimisation du bus pci sur une MSI pro266td master LR (ms-9105) pour monter un petit serveur linux, via wpcredit 1.4 et le fichier pour kt266 (impossible de trouver ni fichier ni datasheet pour l'apollo pro 266) afin de créer un script équivalent à celui d'Albator. Grace à ça, j'ai pu passer de 61Mo/s a plus de 90Mo/s de débit mais dans un seul sens, en réception depuis un périphérique pci. Il y'a une asymétrie inexplicable, l'envoi de donnée vers un périphérique pci ne se fait qu'a env. la moitié de la réception, soit env. 45Mo/s une fois optimisé. Si un super pro des "pci configuration registers" passe dans le coin, son aide serai très appréciée.

Reply

Marsh Posté le 13-01-2009 à 13:20:44    

maxxximatoze a écrit :

Je travail actuellement à l'optimisation du bus pci sur une MSI pro266td master LR (ms-9105) pour monter un petit serveur linux, via wpcredit 1.4 et le fichier pour kt266 (impossible de trouver ni fichier ni datasheet pour l'apollo pro 266) afin de créer un script équivalent à celui d'Albator. Grace à ça, j'ai pu passer de 61Mo/s a plus de 90Mo/s de débit mais dans un seul sens, en réception depuis un périphérique pci. Il y'a une asymétrie inexplicable, l'envoi de donnée vers un périphérique pci ne se fait qu'a env. la moitié de la réception, soit env. 45Mo/s une fois optimisé. Si un super pro des "pci configuration registers" passe dans le coin, son aide serai très appréciée.


 
Je ne suis pas un super pro, mais de mémoire, c'est la même chose avec l'AGP, il y a un sens qui est plus efficace que l'autre


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 18-01-2009 à 20:45:52    

Oui mais pour l'agp c'est normal, l'envoi vers la carte se fait à pleine vitesse mais si la carte doit envoyer des données en mémoire c'est bcp plus lent, ce problème n'existe plus en pcie (full duplex symétrique). La norme pci donne une bande passante unique de 132MB/s (en base 10, 125 en base 2) à partager entre tous les périphériques présents sur le bus et dans les deux sens, doux mon étonnement avec ce débit asymétrique (un seul transfert à la fois bien sur). Je n'est pas de réponse pour le moment mais je cherche dans les registres le moyen d'améliorer ça, mais je pense pas pouvoir y faire grand chose. Par mais petits tweaks du pci m'ont permit d'augmenter de 50% le débit du bus, et je taquine les 100MB/s donc ca me parait plus convenable comme débit.
 

Mjules a écrit :


 
Je ne suis pas un super pro, mais de mémoire, c'est la même chose avec l'AGP, il y a un sens qui est plus efficace que l'autre


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed