Duniter powCluster.js utilise mes 8 cœurs à 100%

Avec cpu: 0.15 j’ai en moyenne 40% sur mes cœurs. Est-ce qu’il y a moyen de configurer sur combien de coeurs/threads le PoW est lancé ?

Tu peux modifier le fichier /opt/duniter/app/modules/prover/lib/constants.js, ligne 4 :

CORES_MAXIMUM_USE_IN_PARALLEL: 8,

Je relance mes 2 nœuds, et je te tiendrais au courant de la situation dans quelques heures.

Ca serait bien de l’ajouter dans config.json :slight_smile:

Fais-donc un ticket, sinon ce n’est pas tracé ! :slight_smile:

En fait je pense qu’il est possible de mettre le paramètre nbCores dans le fichier ~/.config/duniter/duniter_default/conf.json :

{
  "nbCores": 3
}

Je fais déjà cela dans les tests automatisés, donc ça devrait passer.

Mais le ticket est quand même important pour rajouter cette option en ligne de commande.

Pourrais-tu lancer cette commande sur ton serveur et me donner le retour ?

node -e "console.log(os.arch())"
node -e "console.log(os.arch())"
x64

Je pense pas que ça va t’aider beaucoup .:confused:

Ce n’est donc pas de l’ARM. C’est de l’Intel-compatible (pas étonnant pour un atom en fait).

@nanocryk peut tu éxécuter la commande :

 node -e "console.log(os.cpus())"

Il y a peut être moyen de matcher le double threading dans la description des cpu :wink:

% node -e "console.log(os.cpus())"
[ { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 4244256400,
       nice: 1200,
       sys: 118874500,
       idle: 72356771200,
       irq: 300 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 4313752200,
       nice: 21700,
       sys: 203913800,
       idle: 72205374100,
       irq: 200 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 4120180700,
       nice: 1300,
       sys: 105132700,
       idle: 72507560900,
       irq: 200 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 4186114700,
       nice: 29000,
       sys: 185290800,
       idle: 72368000900,
       irq: 200 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 3966887700,
       nice: 600,
       sys: 83798400,
       idle: 72691702800,
       irq: 100 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 4043385300,
       nice: 19100,
       sys: 187729300,
       idle: 72515661000,
       irq: 300 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 3920415700,
       nice: 800,
       sys: 74641400,
       idle: 72747534800,
       irq: 200 } },
  { model: 'Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz',
    speed: 2393,
    times:
     { user: 3986452700,
       nice: 21700,
       sys: 161913800,
       idle: 72599255400,
       irq: 300 } } ]
1 Like

Merci, bon on peut matcher Atom mais il faudrais être sur que tout les Atom font du double threading, et puis si ça se trouve d’autres config le font aussi, je vais faire quelques recherches :slight_smile:

1 Like

Bon je n’ai pas trouver, alors on matchera juste Atom et ARM pour le moment !

Tu crois que c’est en fait une histoire de double threading pour ARM, et ici aussi pour Atom ? (je ne m’y connais absolument pas en technos CPU)

Si c’est le cas, ma division par deux était une heuristique heureuse !

Je ne suis pas spécialiste hardware mon truc c’est plus le software mais il me semble qu’Intel propose une techno un peu spéciale de cœurs avec deux threads ce qui fausse la donne sur le nombre de cœurs (1 seul cœur en vaut alors 2), mais est ce lié au problème rencontré ici ? peu être pas !

C’est l’Hyperthreading, avec 2 cœurs logiques par cœur physique. Les performances sont meilleures avec 2 cœurs logique qu’un seul, mais inférieures à 2 cœurs physiques.

2 Likes

Cela dit j’ai moi-même 8 cœurs logiques pour 4 physiques, et je n’ai pas besoin de l’astuce de la division par deux. Donc c’est sûrement autre chose.

Voilà donc Duniter utilise chaque cœur physique en double ce qui sature le cpu, diviser par deux n’est pas idiot mais ça empêche peut-être de profiter de l’Hyperthreading pour la pow… hum choix cornélien :grinning:

Pourquoi utiliser plusieurs threads en premier lieu alors qu’il n’y a pas de course à la puissance ? Utiliser plusieurs threads pour faire plus de calculs, je comprend dans le cas où il le faut, hors là ce n’est pas le cas. On veut juste faire des calculs, et la difficulté personnalisée fait qu’on a la même probabilité que les autres de “miner” un bloc.

Une autre question en appel une autre. Quelle thread utiliser? Il ne faudrait pas que cela soit toujours le même pour repartir la charge équitablement sur les cœurs du CPU

Justement pour moi tu le fais tourner que sur 1 cœur, et tu laisses les autres tranquille pour les autres programmes.