Configuration Matérielle pour faire tourner des noeuds Duniter v2s

@1000i100 a créé un script pour tester les performances matérielles des machines qui font tourner des noeuds Duniter v2s

Je l’ai testé sur mon serveur perso, auto-hebergé derrière une Freebox

Gtest + G1v2 pour tous les noeuds :grin:


Smith et Mirror sur SSD


Archive et Indexeur sur RAID HDD 3To

à vous de jouer :wink:

3 Likes

Mon VPS qui fait tourner Miroir et Smith : :face_with_peeking_eye: beaucoup de rouge …

Le miens, qui contient 2 archives, 2 smiths, 2 indexer:

poka@v2s-poka:~$ curl -fsSL https://tools.pages.duniter.org/g1-srv-qualify/g1-qualify.sh | sh
g1-qualify — Version: 47 (2026-03-10 01:32:40) 0833ff3

=== Performance compared to minimums required by Ğ1 network services ===

  ┌──────────────┬───────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
  │ Type         │ Measured Perf.│⚠Mirror    │✗Archive   │✓Indexer   │⚠Smith     │✗All       │
  ├──────────────┼───────────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
  │ Capacity     │ 2529 tx/bloc  │⚠695       │⚠695       │695        │⚠695       │⚠695       │
  │ ED25519      │ 10856 v/s     │3129       │3129       │3129       │3129       │3129       │
  │ Rnd. read    │ 32924 IOPS    │6249       │6249       │6249       │6249       │6249       │
  │ Free space   │ 134.8 GB      │⚠100.0 GB  │✗400.0 GB  │3.6 GB     │20.0 GB    │✗520.0 GB  │
  │  realistic   │               │1 years    │1 years    │37 years   │1 years    │1 years    │
  │  pessimistic │               │1 days     │1 days     │25 days    │1 days     │1 days     │
  │  optimistic  │               │55 years   │55 years   │1377 years │55 years   │55 years   │
  │ Ping         │ 41.315 ms     │100        │100        │100        │100        │100        │
  │ Upload       │ 3.8 MB/s      │⚠6.2M/s    │⚠6.2M/s    │-          │⚠12.5M/s   │⚠25.0M/s   │
  │ Download     │ 3.9 MB/s      │1.2M/s     │1.2M/s     │-          │2.5M/s     │⚠5.0M/s    │
  │ RAM          │ 20.5 GB       │8.0G       │8.0G       │8.0G       │8.0G       │⚠24G       │
  ├──────────────┴───────────────┴───────────┴───────────┴───────────┴───────────┴───────────┤
  │┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ informative ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈│
  ├──────────────┬───────────────┬───────────┬───────────┬───────────┬───────────┬───────────┤
  │ RAM (speed)  │ 7.9 GiB/s     │3.1        │3.1        │3.1        │3.1        │3.1        │
  │ Seq. write   │ 1959.8 MiB/s  │231.9      │231.9      │231.9      │231.9      │231.9      │
  │ Rnd. write   │ 125.3 MiB/s   │34.1       │34.1       │34.1       │34.1       │34.1       │
  │ SR25519      │ 9607 v/s      │3084       │3084       │3084       │3084       │3084       │
  │ BLAKE2       │ 660.5 MiB/s   │148        │247.0      │247.0      │247.0      │247.0      │
  └──────────────┴───────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘
  ✓ OK   ⚠ borderline   ✗ insufficient
  Smith : https://duniter.org/wiki/

Done — Mon Mar 16 21:57:47 UTC 2026
1 Like

VPS Oracle (gratuit) 4 CPU Ampere:

Je pense que le test de bande passante doit être limité, car la machine à 4Gbps de bande passante (j’ai un résultat similaire chez moi avec 1Gbps DL et 500Mbps UL).

Ce serais intéressant d’avoir les résultats de ce test sur la machine qui a servi de base pour les performances Duniter v2 (un raspberry pi avec disque SSD via USB?) - je ne sais plus qui a réalisé ce benchmark, je pense que c’était @aya ?

Bonsoir,

Voici le résultat sur mon serveur Kimsufi 4 (HDD) chez OVH pour des noeuds miroir + smith sur la Ğtest et miroir sur la Ğ1 :

J’ai prévu de modifier mon serveur pour disposer de disques SSD et pour ce faire, il me faudra patienter jusqu’au mois d’avril.

1 Like

J’ai testé pour vous de lancer deux serveurs gtest auto hébergés en ADSL avec débit montant de 1023 Kbps. Même en limitant le débit sortant des deux containers docker à 256 kbps chacun avec tc (traffic control), impossible de naviguer sur Internet ou d’écouter un flux radio…
Je ne peux faire tourner qu’un serveur.

Ce serait bien de lister ici des configurations VPS adaptées aux pré requis, disponibles chez les différents fournisseurs.

1 Like

Je viens de lancer un noeud smith en gtest derriere une connexion 4G pour voir…

Je me demande si le ssd utilisé pour le benchmark “minimal” pour Duniter n’était pas un peu trop performant ? :slight_smile:

Je ne sais pas exactement quel calcul est fait derrière ces chiffres, mais je suis étonné de voir que la machine Oracle qui utilise du SSD sur ses infrastructures à des chiffres relativement plus bas (le boot volume est bien configuré en mode performance et devrait avoir 45,000 IOPS et 360 MB/s Throughput)

C’est ce que je me disais aussi :wink:
On peut comparer mes noeuds smith en g1 et en gtest qui sont 2 modèles identiques (raspi 4B 8Gb RAM) mais avec des disques durs différents…
Je pourrais privilégier le moins performant pour les prochains benchs ?

@aya Est-ce que tu as bien coupé ton autre nœud forgeron avant de n’en avoir qu’un seul sur la gtest ?

Il ne faut jamais avoir deux nœuds forgerons du même membre sur le même réseau : cela perturbe l’algorithme de finalité et peut bloquer la blockchain. Il existe normalement un système d’offenses pour blacklister automatiquement un forgeron qui ferait cela, mais je ne pense pas que ça ait déjà été testé en conditions réelles.

Je ne sais pas encore si c’est réellement lié, mais j’ai fait quelques tests de warp sync en gtest avec une version de dev de Duniter, et certains peers m’envoient des justifications GRANDPA invalides. Ça peut vouloir dire qu’un forgeron a actuellement deux nœuds actifs sous la même identité:

2026-03-18 20:44:43 ⚙️  Syncing 1770.5 bps, target=#2277421 (5 peers), best: #2232097 (0x7d02…dcfe), finalized #2205639 (0xe265…48c5), ⬇ 664.5kiB/s ⬆ 0.9kiB/s    
2026-03-18 20:44:44 💔 Sent block with bad justification to import    
2026-03-18 20:44:47 💔 Invalid justification provided by 12D3KooWRsoY1uWFh5manQ7qjYt6bNiLTfJr9fAgcLz3mxwJY79y for #0xa792…ee1d    
2026-03-18 20:44:47 Report 12D3KooWRsoY1uWFh5manQ7qjYt6bNiLTfJr9fAgcLz3mxwJY79y: -2147483648 to -2147480522. Reason: Invalid justification. Banned, disconnecting.    
2026-03-18 20:44:47 💔 Invalid justification provided by 12D3KooWR8V2sRjR1mkiu9GfaY4wL6yxgZygrvVVeZNQuZhWzjW4 for #0xa792…ee1d    
2026-03-18 20:44:47 Report 12D3KooWR8V2sRjR1mkiu9GfaY4wL6yxgZygrvVVeZNQuZhWzjW4: -2147483648 to -2147480843. Reason: Invalid justification. Banned, disconnecting.    
2026-03-18 20:44:48 ⚙️  Syncing 1120.5 bps, target=#2277422 (2 peers), best: #2237703 (0xb17b…0972), finalized #2205639 (0xe265…48c5), ⬇ 387.4kiB/s ⬆ 0.4kiB/s    
2026-03-18 20:44:51 🔍 Discovered new external address for our node: /ip6/2a01:e0a:107a:d450:1060:cbdf:bead:931c/tcp/30333/ws/p2p/12D3KooWC9erALAgHVBx9BRk5ibsJV1RiFE4sTXugNmYuPAoZqvx    
2026-03-18 20:44:53 ⚙️  Syncing 89.5 bps, target=#2277422 (2 peers), best: #2238151 (0x9da2…d900), finalized #2205639 (0xe265…48c5), ⬇ 35.0kiB/s ⬆ 0.7kiB/s    
2026-03-18 20:44:58 ⚙️  Syncing 140.6 bps, target=#2277423 (2 peers), best: #2238855 (0x5014…9a69), finalized #2205639 (0xe265…48c5), ⬇ 44.0kiB/s ⬆ 1.4kiB/s    
2026-03-18 20:45:03 ⚙️  Syncing 89.5 bps, target=#2277424 (2 peers), best: #2239303 (0x775e…459b), finalized #2205639 (0xe265…48c5), ⬇ 30.3kiB/s ⬆ 0.4kiB/s    
2026-03-18 20:45:08 ⚙️  Syncing 601.2 bps, target=#2277424 (3 peers), best: #2242311 (0x6315…6bb3), finalized #2205639 (0xe265…48c5), ⬇ 244.7kiB/s ⬆ 4.2kiB/s    
2026-03-18 20:45:11 Logic error: Unexpected underflow in reducing provider    
2026-03-18 20:45:12 💔 Invalid justification provided by 12D3KooWA22KZCzXBqttbSrvccUEgtFzjJsVLjSRyC9uzVL4SiJY for #0xa792…ee1d    
2026-03-18 20:45:12 Report 12D3KooWA22KZCzXBqttbSrvccUEgtFzjJsVLjSRyC9uzVL4SiJY: -2147483648 to -2147483648. Reason: Invalid justification. Banned, disconnecting.    

C’est pas moi je ne forgeais plus en gtest :slight_smile:

EDIT: par contre 12D3KooWR8V2sRjR1mkiu9GfaY4wL6yxgZygrvVVeZNQuZhWzjW4 c’est bien moi…
RE EDIT: Ah bein non, l’adresse me rappelait qqcse en commencant par 12d3KooW mais c’est pas moi finalement, je suis 12D3KooWFFXqHR41XXsL9bNK6yvBo6fnWxePBbVoUKN7tVcnyqot

Il semblerait que ce soit la clé de gtest.axiom-team.fr… qui s’annoncerait sur le reseau g1…

aya@AyMac gcli-v2s % ./target/release/g1cli network peer list
Network: g1  —  Last scan: 7d ago

 Peer MultiAddr (p2p endpoint)                                                                 Statut  Ping
 /dns/g1.pini.fr/tcp/30333/p2p/12D3KooWHVbZcJnktG5od4uZLLnDHJgCw815qXUw584wkrRUXSs3            ✓       21ms
 /dns/g1.asycn.io/tcp/30333/p2p/12D3KooWT2CtCqXE9pokgYCLh9HodSb4EQgfiv4LUvavu85qa2be           ✓       26ms
 /dns/g1.1000i100.fr/tcp/30333/p2p/12D3KooWKg6XoiHHArDYL6XDu7MPU44MvnfZugRxKuVR5vXV6Jip        ✓       26ms
 /dns/gtest.axiom-team.fr/tcp/30333/p2p/12D3KooWRsoY1uWFh5manQ7qjYt6bNiLTfJr9fAgcLz3mxwJY79y   ✓       32ms
 /dns/g1v2archive.syoul.fr/tcp/30337/p2p/12D3KooWEJvEPbkbnFkCwic6933PjShrckrspx4fkabtySjMBwBP  ✓       34ms
 /dns/rpc.duniter.org/tcp/30333/p2p/12D3KooWLWtNMwgRZY7sX6DMbz55pH98L2Mi3JCBSytQuaggDhyH       ✓       46ms
 /dns/g1.p2p.legal/tcp/30336/p2p/12D3KooWLqDSbiyiz8Dj4Mdnss5ZeUmxF3BRqohDDnEkL6oZJ8S5          ✗       —
 /dns/g1.coinduf.eu/tcp/30333/p2p/12D3KooWPbEg2WvkaCrPGCTe8BA8u9m6iH3dEZKS3UN7pfRQXidp         ✗       —
 /dns/g1.axiom-team.fr/tcp/30333/p2p/12D3KooWAQdLdSScMu5uPRLAyKenAWRhwho517qf8bfN2hkbzteE      ✗       —
aya@AyMac gcli-v2s % ./target/release/g1cli --network gtest network peer list
Network: gtest  —  Last scan: 7d ago

 Peer MultiAddr (p2p endpoint)                                                                           Statut  Ping
 /dns/gtest.asycn.io/tcp/30333/p2p/12D3KooWKAwutpAv7um6kiMWjqgV7aAeaCvBpcNXit5TAPXLhtmb                  ✓       25ms
 /dns/gtest.1000i100.fr/tcp/30333/p2p/12D3KooWKg6XoiHHArDYL6XDu7MPU44MvnfZugRxKuVR5vXV6Jip               ✓       26ms
 /dns/gt.p2p.legal/tcp/30333/p2p/12D3KooWCM15K6f14AF5zFmPkeA9C4UPgToZSPHSPeH2b5W5Aprt                    ✓       29ms
 /dns/g1v2mirroir.syoul.fr/tcp/30333/p2p/12D3KooWANuCrJMbPJ1R9Zex28kdBUtjwnjV1noEZZyfSFe155BZ            ✓       32ms
 /dns/mirror.gtest-bn.brussels.ovh/tcp/443/wss/p2p/12D3KooWD1mp5M1CsZnVuPWQBHs5PhGZfhSEtm6gh6UvypcVrpjh  ✗       —

Les logs du serveur gtest.axiom-team.fr correspondent bien à la gtest, le

2026-03-18 21:25:18 🏆 Imported #2277803 (0x0ccd…d725 → 0x8750…30c2)
2026-03-18 21:25:18 maintain txs=(0, 0) a=1 i=3 views=[(2277803, 0, 0)] event=NewBestBlock { hash: 0x8750bbe63500b474b76e1f294333555354089295d8cd1b2702fa874b350530c2, tree_route: None } du
ration=2.631912ms
2026-03-18 21:25:19 💤 Idle (21 peers), best: #2277803 (0x8750…30c2), finalized #2277800 (0xe075…8b17), ⬇ 7.8kiB/s ⬆ 11.6kiB/s
2026-03-18 21:25:19 maintain txs=(0, 0) a=1 i=2 views=[(2277803, 0, 0)] event=Finalized { hash: 0xfba263fcf8c595c64e4823dc2e957189ed92cc3e0bd9c4acfda800e3097a2e0b, tree_route: [] } duratio
n=560.254µs
2026-03-18 21:25:24 💤 Idle (21 peers), best: #2277803 (0x8750…30c2), finalized #2277801 (0xfba2…2e0b), ⬇ 8.6kiB/s ⬆ 9.2kiB/s
2026-03-18 21:25:24 🏆 Imported #2277804 (0x8750…30c2 → 0x1923…5d15)
2026-03-18 21:25:24 maintain txs=(0, 0) a=1 i=3 views=[(2277804, 0, 0)] event=NewBestBlock { hash: 0x19233a62437bb143e4a96569eb17d474a77006cb6471493787192cba8b7d5d15, tree_route: None } du
ration=1.985407ms
2026-03-18 21:25:25 maintain txs=(0, 0) a=1 i=2 views=[(2277804, 0, 0)] event=Finalized { hash: 0x0ccd68cd49f71073d51590678cc14580fe5d023be47ebbb8c807ea814c3cd725, tree_route: [] } duratio
n=613.753µs
2026-03-18 21:25:29 💤 Idle (21 peers), best: #2277804 (0x1923…5d15), finalized #2277802 (0x0ccd…d725), ⬇ 8.0kiB/s ⬆ 9.2kiB/s
2026-03-18 21:25:30 🏆 Imported #2277805 (0x1923…5d15 → 0x9da0…fd87)
2026-03-18 21:25:30 maintain txs=(0, 0) a=1 i=3 views=[(2277805, 0, 0)] event=NewBestBlock { hash: 0x9da07ae20c349ffa07e2d93b7f8a649123a69d5df6f4df79becb4fe5ed49fd87, tree_route: None } du
ration=1.596594ms
2026-03-18 21:25:31 maintain txs=(0, 0) a=1 i=2 views=[(2277805, 0, 0)] event=Finalized { hash: 0x8750bbe63500b474b76e1f294333555354089295d8cd1b2702fa874b350530c2, tree_route: [] } duratio
n=2.278475ms
2026-03-18 21:25:34 💤 Idle (21 peers), best: #2277805 (0x9da0…fd87), finalized #2277803 (0x8750…30c2), ⬇ 11.6kiB/s ⬆ 10.3kiB/s
2026-03-18 21:25:36 maintain txs=(0, 0) a=1 i=3 views=[(2277806, 0, 0)] event=NewBestBlock { hash: 0x38c045333ef3c85ce684f1f71e271e7b283a73efec9c5aa45505d069b6b0352a, tree_route: None } duration=2.30335ms
2026-03-18 21:25:36 🏆 Imported #2277806 (0x9da0…fd87 → 0x38c0…352a)

Par contre j’ai lancé duniter à la main en lui précisant le chainspec de la gtest :

/home/duniter/.local/bin/duniter --chain /home/duniter/.local/share/duniter/chains/gtest/gtest-raw.json --name axiomteam-gtest-archive --listen-addr /ip4/0.0.0.0/tcp/30333 --rpc-cors all --state-pruning archive --base-path /home/duniter/.local/share/duniter --rpc-rate-limit-trust-proxy-headers --public-addr /dns/gtest.axiom-team.fr/tcp/443/wss --public-rpc wss://gtest.axiom-team.fr/ --public-squid https://gt-squid.axiom-team.fr/

J’ai poursuivi mes investigations, et une autre hypothèse de plus en plus crédible est qu’il s’agit d’un bug supplémentaire du côté du Polkadot SDK. J’ai déjà corrigé un premier bug dans le Polkadot SDK pour tenter de rétablir la warp sync (qui ne fonctionne plus sur gtest depuis qu’on a forcé la finalité), mais il semblerait qu’il y ait encore un autre bug… À croire que cette fonctionnalité de warp sync n’est pas vraiment utilisée en production

Il suffit qu’un seul nœud mal configuré mélange ses ports sur une machine qui héberge deux nœuds (gtest et g1) pour que ça mette le bazar. Normalement, le Polkadot SDK (anciennement Substrate) identifie qu’il ne s’agit pas du même réseau et coupe la connexion. Donc, une clé peer ID provenant d’un autre réseau ne devrait pas se retrouver dans ce type de logs.
Je ne suis pas certain de la manière dont le Polkadot SDK gère cela, mais il semble que cette partie ne soit pas aussi bien gérée que je ne le pensais :confused:

3 Likes

Les noeuds g1 et gtest sont sur 2 serveurs différents par contre j’ai peut être utilisé le binaire de la g1 avec les chainspecs de la gtest.

En tout cas un nouveau scan effectué avec g1cli ne remonte plus le noeud gtest.axiom-team.fr sur le réseau g1, c’est étrange. Le scan précédent montre qu’il utilisait des données d’il y a 7j.

aya@AyMac gcli-v2s % ./target/release/g1cli network peer scan                
Scanning RPC endpoints for peer info...
Testing P2P reachability for 11 peers...
Network: g1  —  Last scan: now

 Peer MultiAddr (p2p endpoint)                                                                        Statut  Ping
 /dns/g1.axiom-team.fr/tcp/30333/p2p/12D3KooWAQdLdSScMu5uPRLAyKenAWRhwho517qf8bfN2hkbzteE             ✓       65ms
 /dns/g1.coinduf.eu/tcp/30333/p2p/12D3KooWPbEg2WvkaCrPGCTe8BA8u9m6iH3dEZKS3UN7pfRQXidp                ✓       77ms
 /dns/g1.asycn.io/tcp/30333/p2p/12D3KooWT2CtCqXE9pokgYCLh9HodSb4EQgfiv4LUvavu85qa2be                  ✓       90ms
 /dns/g1v2archive.syoul.fr/tcp/30337/p2p/12D3KooWEJvEPbkbnFkCwic6933PjShrckrspx4fkabtySjMBwBP         ✓       96ms
 /dns/g1.1000i100.fr/tcp/30333/p2p/12D3KooWKg6XoiHHArDYL6XDu7MPU44MvnfZugRxKuVR5vXV6Jip               ✓       96ms
 /dns/g1.p2p.legal/tcp/30333/p2p/12D3KooWLqDSbiyiz8Dj4Mdnss5ZeUmxF3BRqohDDnEkL6oZJ8S5                 ~       96ms
 /dns/rpc.duniter.org/tcp/30333/p2p/12D3KooWLWtNMwgRZY7sX6DMbz55pH98L2Mi3JCBSytQuaggDhyH              ~       101ms
 /dns/g1.gyroi.de/tcp/30344/p2p/12D3KooWPbs2bm2UjLfWPg1F65UiTWTPsZsao7YocyZ5miKd39mw                  ✗       Seen now
 /dns/archive-rpc.g1.brussels.ovh/tcp/30333/p2p/12D3KooWC4zHqXVWuVYFNfuHBKtTpnMZ4YbfLq81VmgFf9n9Tdzn  ✗       Seen now
 /dns/g1.rendall.fr/tcp/30343/p2p/12D3KooWHevPPkUxrheiJWXL58KwCb2JTTMF22rpD3Q2odZbkuQz                ✗       Seen now
 /dns/g1.pini.fr/tcp/30333/p2p/12D3KooWHVbZcJnktG5od4uZLLnDHJgCw815qXUw584wkrRUXSs3                   ✗       Seen now
aya@AyMac gcli-v2s % ./target/release/g1cli -n gtest network peer scan
Scanning RPC endpoints for peer info...
Testing P2P reachability for 5 peers...
Network: gtest  —  Last scan: now

 Peer MultiAddr (p2p endpoint)                                                                             Statut  Ping
 /dns/g1v2mirroir.syoul.fr/tcp/30333/p2p/12D3KooWANuCrJMbPJ1R9Zex28kdBUtjwnjV1noEZZyfSFe155BZ              ✓       93ms
 /dns/gtest.1000i100.fr/tcp/30333/p2p/12D3KooWJoEWX5F8MEfh9dbKJFa8k6dbLtCHy7jdjKszuebAfEwK                 ~       81ms
 /dns/gtest.asycn.io/tcp/30333/p2p/12D3KooWKAwutpAv7um6kiMWjqgV7aAeaCvBpcNXit5TAPXLhtmb                    ~       87ms
 /dns/gt.p2p.legal/tcp/30333/p2p/12D3KooWCM15K6f14AF5zFmPkeA9C4UPgToZSPHSPeH2b5W5Aprt                      ~       87ms
 /dns/mirror-rpc.gtest-bn.brussels.ovh/tcp/30333/p2p/12D3KooWD1mp5M1CsZnVuPWQBHs5PhGZfhSEtm6gh6UvypcVrpjh  ✗       Seen now
1 Like

Sur la ĞTest, il y a le nœud de @1000i100 qui est en v2.0.2. Version qui est compatible qu’avec la Ğ1, n’est-ce pas ?

1 Like

La version 2.0.2 a été compilée pour la Ğ1 et doit être utilisée exclusivement sur la Ğ1. C’est marqué dans le nom de l’image, qui commence par duniter-g1 ou duniter-gtest selon la version.

Je suis même surpris que le nœud se lance sans broncher : cela devrait échouer immédiatement avec une erreur explicite afin d’éviter tout problème. Je viens de créer le ticket #465

3 Likes

Je ne vois pas de problème à ça : le client substrate est générique et peut exécuter tout runtime wasm. La seule particularité de réseau est le genesis et les bootnodes mais ils ne sont utilisés que quand la db est vierge, non ? Donc quand une db existe déjà, il se content de reprendre là où il en était.