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

Si j’avais découvert une telle situation, je l’aurais corrigée, c’est bien trop critique. Personnellement, je dirais que non, tu peux vérifier cela toi-même : https://github.com/duniter/duniter/blob/da85e4c3ba8e18a66b0c216335454473e1c205ae/app/modules/prover/lib/proof.ts#L114-L229

D’ailleurs il serait intéressant de sortir cet algo (finalement assez simple et relativement court) afin de le triturer dans un test unitaire.

Tu peux aussi suivre d’autres pistes, il y a déjà eu des cas d’utilisation à 100% du CPU sur ARM : Livrables ARM en attente : Raspberry PI 3 HS

Le problème dans ce cas était ailleurs, dans le gestionnaire de preuve. Une boucle infinie, il me semble.

Du coup maintenant je n’ai que g1-test (profil gt) qui tourne, et il reste à 800%. Il à commencé à atteindre les 800% quand j’ai lancé g1 (default_profile).

Je ne peux pas t’aider plus en l’état, il te faut faire d’autres tests en modifiant la valeur CPU.

Le CPU est un Intel Atom C2750. C’est du ARM ça ?

J’ai lancé duniter tout seul, il utilisait 100% d’un coeur pendant 10 secondes, puis est passé à 800%. dunitest lui n’étais pas lancé. Je vais refaire un reset data et lancer seulement 1 nœud, mais le fait que les 800% arrivent au moment où je lance le 2ème nœud me fait penser que ce n’est pas une coincidence.

Si les deux nœuds tournent à 60% chacun, ça fait donc 120% d’utilisation CPU (sur chaque cœur).

D’où l’intérêt de tester avec une autre valeur de CPU, par exemple 30%.

J’ai reset les 2 noeuds, et config dunitest à 30% du CPU. J’ai lancé uniquement dunitest, et j’ai en moyenne 85% sur chaque cœur. (cœurs logiques, je n’ai que 4 cœurs physiques).

EDIT : Au bout de 1 ou 2 minutes, il ne tourne plus que sur 1 cœur (en changeant à chaque refresh)

EDIT 2 : Après un restart, pas d’utilisation intensive.
EDIT alors que je suis en train d’écrire : Ca recommence : https://i.imgur.com/SME5UDq.png
Mon config.json : https://i.imgur.com/KAFMO4f.png

Peu importe les cœurs physiques ou logiques, Duniter ne regarde qu’en termes de cœurs logiques.

Visiblement il ne s’agit pas d’un ARM, mais possède des caractéristiques identiques : CPU à faible puissance destiné à de l’économie d’énergie. Or, Duniter utilise une règle un peu spécifique pour ARM en divisant la puissance CPU par deux pour atteindre la consigne.

Je te conseille donc d’appliquer cette même règle : si tu veux une utilisation à 30% de CPU pour chaque nœud, alors configure à 15% chaque nœud. Tu auras grosso-modo la bonne consigne.

En attendant, j’ai créé le ticket#1197 pour tracer le problème.

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