Skip to content
This repository has been archived by the owner on Aug 20, 2020. It is now read-only.

[Profnsched] New module (fr) #507

Closed
wants to merge 2 commits into from

Conversation

Coethium
Copy link
Contributor

  • Objectif principal : maintenir le temps d'exécution du pas (step) au
    plus près du tick rate (dedicated_server_step)
  • analyser en temps réel les temps d'execution de certaines fonctions
    de module (actuellement uniquement globalstep et minetest.after)
  • Décaler, de façon adaptative, l'exécution des modules qui
    l'autorisent explicitement en cas de surcharge

... see README for more !

* Objectif principal : maintenir le temps d'exécution du pas (step) au
plus près du tick rate (dedicated_server_step)
* analyser en temps réel les temps d'execution de certaines fonctions
de module (actuellement uniquement globalstep et minetest.after)
* Décaler, de façon adaptative, l'exécution des modules qui
l'autorisent explicitement en cas de surcharge

... see README for more !
@Coethium
Copy link
Contributor Author

Exemple d'output :

2016-08-21 18:19:19: [Server]: [Profnsched] Overload ! 2206.13ms
2016-08-21 18:19:19: [Server]: [Profnsched] 62.714ms (avg: 197.765 ; 75 calls) Internal SERVER & unprofiled
2016-08-21 18:19:19: [Server]: [Profnsched] 0.007ms (avg: 0.02 ; 75 calls) unknown1 unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.006ms (avg: 0.039 ; 150 calls) default unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.331ms (avg: 0.039 ; 150 calls) default unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.007ms (avg: 0.009 ; 75 calls) cozy unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 2142.565ms (avg: 95.137 ; 75 calls) biome_lib unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.085ms (avg: 0.064 ; 75 calls) sprint unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.004ms (avg: 0.009 ; 150 calls) mesecons unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.009ms (avg: 0.009 ; 150 calls) mesecons unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.004ms (avg: 0.006 ; 75 calls) pipeworks unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.005ms (avg: 0.006 ; 75 calls) nature_classic unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.003ms (avg: 0.009 ; 75 calls) riesenpilz unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.013ms (avg: 0.017 ; 75 calls) unified_inventory unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.093ms (avg: 0.169 ; 75 calls) runes unknown(globalstep)
2016-08-21 18:19:19: [Server]: [Profnsched] 0.07ms (avg: 0.038 ; 5 calls) worldedge #22
2016-08-21 18:19:19: [Server]: [Profnsched] 0.04ms (avg: 0.031 ; 2 calls) unified_inventory #30
2016-08-21 18:19:19: [Server]: [Profnsched] 0.042ms (avg: 0.033 ; 12 calls) hudbars #57
2016-08-21 18:19:19: [Server]: [Profnsched] 0.041ms (avg: 0.054 ; 19 calls) item_drop #37
2016-08-21 18:19:19: [Server]: [Profnsched] 0.036ms (avg: 0.053 ; 18 calls) hbarmor #91

@ghost
Copy link

ghost commented Aug 22, 2016

👍

@Lymkwi
Copy link
Member

Lymkwi commented Aug 24, 2016

Nous nous sommes mis d'accord avec @Darcidride sur les modifications suivantes :

  • La PR ajoute l'entrée de profnsched dans le world.mt
  • La sortie de logs devra se faire de la façon suivante :
    • La collecte de statistiques ne se fera qu'à l'appel d'une commande de chat par l'admin
    • Une clef de minetest.conf indiquera la durée de la collecte (par défaut, 5 minutes)
    • Les dumps de statistiques n'auront lieu qu'à la fin de la période
    • Une dernière clef de minetest.conf indique l'état de la collecte : activée ou non
    • Pour des intérêts de modularité, il doit être possible de mettre la période à 0 et de laisser la variable d'activité à true pour garder le comportement actuel (dump permanent)

@BetterToAutomateTheWorld
Copy link
Member

BetterToAutomateTheWorld commented Aug 24, 2016

Comme @LeMagnesium l'explique très bien, je n'ai rien à (r)ajouter, je te laisse voir si nos propositions sont réalisables ou non.

Nous sommes ouvert à des avis si nos propositions ne conviennent pas.

@Coethium
Copy link
Contributor Author

Coethium commented Aug 25, 2016

Hello ! ;)

Je reprends points par point :

La PR ajoute l'entrée de profnsched dans le world.mt

Si je comprends bien le fonctionnement, il s'agit de mettre 'load_mod_profnsched = true' ?

La collecte de statistiques ne se fera qu'à l'appel d'une commande de chat par l'admin

Excellente idée, si l'un de vous sait comment on fait ça je gagnerai un temps fou s'il me mets un bout de code exemple, ou me cite un module qui utilise déjà cette technique.
Attention toutefois, une partie de la collecte des stats va devenir nécessaire pour le fonctionnement du scheduler afin de déterminer le temps d'exécution maximum recommandé de chaque fonction appelée (partie WIP, ne concernera que les fonctions appelées par .asap ou .add).

Une clef de minetest.conf indiquera la durée de la collecte (par défaut, 5 minutes)

Pas de soucis, en tenant compte de la remarque ci-dessus.

Les dumps de statistiques n'auront lieu qu'à la fin de la période.

Lorsque j'ai mis en place les dumps de stats c'est surtout pour visualiser les modules qui à un instant T ont causé un overload ; ainsi on peut déterminer s'ils peuvent être optimisés et/ou modifiés pour utiliser profnsched. Un dump final n'a que peu d'intérêt de ce point de vue là.

Une dernière clef de minetest.conf indique l'état de la collecte : activée ou non

Pas de soucis, en tenant compte de la première remarque. Et pas de dump lorsque c'est non activé.

Pour des intérêts de modularité, il doit être possible de mettre la période à 0 et de laisser la variable d'activité à true pour garder le comportement actuel (dump permanent)

En tenant compte des remarques ci-dessus, il semble que cette option devient caduque.

En résumé et avec vos propositions je vois les choses ainsi :

  • Une option (minetest.conf) pour activer la collecte permanente des stats pour les fonctions qui n'utilisent pas profnsched (les fonctions qui l'utilisent nécessitent une collecte)
  • Cette même option implique le dump en cas d'overload (cas actuel)
  • Si l'option est à false, on peut activer la collecte/dump manuellement par une commande de chat, avec une durée par défaut de 5mn. Cette durée peut être configurée dans minetest.conf.

Qu'en pensez-vous ?

@Lymkwi
Copy link
Member

Lymkwi commented Aug 25, 2016

Si je comprends bien le fonctionnement, il s'agit de mettre 'load_mod_profnsched = true' ?

Correct. Ça nous épargnera un commit juste pour ça.

Excellente idée, si l'un de vous sait comment on fait ça je gagnerai un temps fou s'il me mets un bout de code exemple, ou me cite un module qui utilise déjà cette technique.
Attention toutefois, une partie de la collecte des stats va devenir nécessaire pour le fonctionnement du scheduler afin de déterminer le temps d'exécution maximum recommandé de chaque fonction appelée (partie WIP, ne concernera que les fonctions appelées par .asap ou .add)

Si la collecte est si importante, alors elle peut être continue, mais pas le dump de données.

Ta proposition me semble bien, mais voilà comment est-ce qu'on pourrait faire simple en respectant les besoins de profnsched et les requêtes :

  • Les collectes sont permanentes. Seuls les dumps sont controllés
  • La clef d'activité dans minetest.conf ne contrôle que le dump. Si false, pas de dump, si true, dump à interval 'time'
  • La clef 'time' détermine l'interval de dump une fois la variable d'activitée mise à true, et est inutile lorsque cette dernière est à false. Si la variable 'time' est à 0 et l'activité à true, le dump est permanent comme maintenant
  • Autrement qu'en activant la variable d'activité il n'y aura aucun dump, cependant la collecte est permanente. La variable d'activité est donc activée par une commande et désactivée après l'occurrence de l'interval 'time'.

@Coethium
Copy link
Contributor Author

ça marche, on part là dessus !

@Coethium
Copy link
Contributor Author

Vous auriez le nom d'un mod qui s'active par commande chat afin que je regarde comment ça fonctionne ? Merci :)

@BetterToAutomateTheWorld
Copy link
Member

Malheureusement je n'en ai pas en tête, @LeMagnesium ou @Crabman77 en ont peut être en tête ?

@ghost
Copy link

ghost commented Aug 29, 2016

je ne sais pas si c'est de ça que tu parles mais fishing active un truc par chatcommand ou formspec, ça lance un tick (enfin de mémoire), après je suis peut être à coté de la plaque 🐰

@Lymkwi
Copy link
Member

Lymkwi commented Sep 1, 2016

Vous auriez le nom d'un mod qui s'active par commande chat afin que je regarde comment ça fonctionne ? Merci :)

minetest/builtin/game/chatcommands.lua te donne des exemples de commandes. Sinon, grep "register_chatcommand" dans ta copie du repo et cherche un exemple simple, comme celui de news.

@Lymkwi
Copy link
Member

Lymkwi commented Sep 7, 2016

À l'heure actuelle les dumps d'overload continuent encore de remplir les logs.. Il faudrait que cela soit sous le même régime... Ou il faut augmenter le niveau de considération d'overload.
Apparemment git fetch --all n'est pas capable d'aller pêcher toutes les nouvelles références...
Tout fonctionne. 👍
J'attends deux autres revues du code pour un merge. @Darcidride

@BetterToAutomateTheWorld
Copy link
Member

BetterToAutomateTheWorld commented Sep 8, 2016

TDL avant merge

Prêt à être merge pour moi 👍

@Lymkwi
Copy link
Member

Lymkwi commented Sep 16, 2016

Je merge! On verra ensemble au moment de la mise à jour des serveurs @Darcidride.
EDIT: Juste, il faudrait rebase ta branche @Coethium. Je le fais, ça ne me gène pas, mais tu peux aussi y penser la prochaine fois, ça facilite le boulot de test.

Lymkwi pushed a commit that referenced this pull request Sep 16, 2016
@Lymkwi
Copy link
Member

Lymkwi commented Sep 16, 2016

d2b7196
0baa0ea

@Lymkwi Lymkwi closed this Sep 16, 2016
@BetterToAutomateTheWorld
Copy link
Member

BetterToAutomateTheWorld commented Sep 16, 2016

Merci tout le monde pour votre travail sur cette PR 👯

@Coethium
Copy link
Contributor Author

Yop je repasse un peu après la guerre, la rentrée s'avère quelque peu chronophage.
Je vois que ça a été mergé, donc il va devenir possible d'optimiser certains modules en fonction des stats :)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Modding Priority: Low Attention not required
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants