Différences entre les versions de « MediaWikiFarm static analysis »
(+explanations) |
(mistake in getMediaWikiConfig) |
||
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 384 : | Ligne 384 : | ||
| style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{read}}</span><span class="cache-default-show hide-when-cache-no hide-when-cache-empty void">{{-}}</span> | | style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{read}}</span><span class="cache-default-show hide-when-cache-no hide-when-cache-empty void">{{-}}</span> | ||
| style="text-align:center;" | {{-}} | | style="text-align:center;" | {{-}} | ||
| style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{ | | style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{read}}</span><span class="cache-default-show hide-when-cache-no hide-when-cache-empty void">{{-}}</span> | ||
| style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{ | | style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{read}}</span><span class="cache-default-show hide-when-cache-no hide-when-cache-empty void">{{-}}</span> | ||
| style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{ | | style="text-align:center;" | <span class="cache-default-hide show-when-cache-no show-when-cache-empty">{{read}}</span><span class="cache-default-show hide-when-cache-no hide-when-cache-empty void">{{-}}</span> | ||
| style="text-align:center;" | {{-}} | | style="text-align:center;" | {{-}} | ||
| style="text-align:center;" | {{-}} | | style="text-align:center;" | {{-}} | ||
Ligne 651 : | Ligne 651 : | ||
* {{-}}: the property is neither read or set in the method. | * {{-}}: the property is neither read or set in the method. | ||
In my previous <s>games</s> works on static analysis, I created [[:mw:File:Call graph of extension MediaWikiFarm.svg|the call graph]] with an external software. But, to be more exact, this call graph is only [[:wikipedia:Call graph|an overapproximation]] since the exact (dynamic) call graph is a subset of this one: in a run, possibly some paths are not executed since it depends on the context. | In my previous <s>games</s> works on static analysis of this software, I created [[:mw:File:Call graph of extension MediaWikiFarm.svg|the call graph]] with an external software. But, to be more exact, this call graph is only [[:wikipedia:Call graph|an overapproximation]] since the exact (dynamic) call graph is a subset of this one: in a run, possibly some paths are not executed since it depends on the context. | ||
Here, this is the "data graph", and there are different contexts: on the top left, you can choose the various main contexts in which the software can run. This depends mainly from the environment and the configuration, and the possibilities are only the main ones. | Here, this is the "data graph", and there are different contexts: on the top left, you can choose the various main contexts in which the software can run. This depends mainly from the environment and the configuration, and the possibilities listed here are only the main ones. | ||
The main result coming from this representation is: "the cache drastically reduces the processing". In fact this is not a surprise, it was designed for it, but such a sparse matrix is encouraging and help to visualise the inter-relations. When benchmarking the software, a no-cache run takes 10-15 milliseconds, and a with-cache run takes 85 microseconds (roughly 130 times less). | The main result coming from this representation is: "the cache drastically reduces the processing". In fact this is not a surprise, it was designed for it, but such a sparse matrix is encouraging and help to visualise the inter-relations. When benchmarking the software, a no-cache run takes 10-15 milliseconds, and a with-cache run takes 85 microseconds (roughly 130 times less). | ||
== Explications (français) == | == Explications (français) == | ||
Ceci est une matrice créée à la main qui décrit quels fonctions lisent ou modifient quelles données internes pour le logiciel [https://phabricator.wikimedia.org/diffusion/EMWF/ MediaWikiFarm], une "extension" MediaWiki pour gérer des fermes de wikis. | |||
Ceci représente la classe [https://phabricator.wikimedia.org/diffusion/EMWF/browse/master/src/MediaWikiFarm.php MediaWikiFarm] qui se trouve être la classe principale contenant presque toute la logique. Chaque ligne est une méthode (grossièrement ordonnées par ordre chronologique lors d’une exécution classique) et chaque colonne est une des propriétés de la classe (toutes sont protégées). Dans chaque cellule, il y a soit : | |||
* {{read}} : la propriété est (seulement) lue par la méthode ; | |||
* {{set}} : la propriété est modifiée par la méthode (et possiblement lue) ; | |||
* {{-}} : la propriété n’est ni lue ni modifiée par la méthode. | |||
Dans mes précédents <s>jeux</s> travaux sur l’analyse statique de ce logiciel, j’avais créé [[:mw:File:Call graph of extension MediaWikiFarm.svg|le graphe d’appels]] à l’aide d’un programme externe. Mais, pour être exact, ce graphe d’appels n’est qu’[[:wikipedia:Call graph|une sur-estimation]] puisque le graphe d’appels (dynamique) est un sous-ensemble de celui-ci : lors d’une exécution, certains chemins peuvent ne pas être exécutés en fonction du contexte. | |||
Ici, nous avons le "graphe des données" et il y a différents contextes : en haut à gauche, vous pouvez choisir les différents contextes principaux dans lesquels le programme peut s’exécuter. Cela dépend principalement de l’environnement et de la configuration, et les possibilités listées ici ne sont que les principales. | |||
Le principal résultat obtenu grâce à cette représentation est : « le cache diminue drastiquement le traitement ». En fait, cela n’est pas une surprise, le programme a été conçu dans ce but, mais une telle matrice creuse est encourageante et aide à visualiser les inter-relations. Lors de tests de performance, une exécution sans cache prend 10-15 millisecondes, et une exécution avec cache prend 85 microsecondes (environ 130 fois moins). |
Version actuelle datée du 21 novembre 2016 à 09:39
(explanation below - explications ci-dessous)
Time ↧ Monoversion / Multiversion |
Properties | Files | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
farmDir | configDir | codeDir | cacheDir | params | farmConfig | variables | configuration | farms.yml | variable.yml | config.yml | versions.yml | deployments.php | (cache) versions.php | (cache) config.php | (cache) LocalSettings.php | main.php | ||||||||||
'EntryPoint' | 'ExtensionRegistry' | 'variables' | 'coreconfig' | 'config' | Other | '$CODE' | '$VERSION' | Other | 'settings' / 'arrays' | 'extensions' / 'skins' | 'execFiles' | |||||||||||||||
Existence | load
|
- | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
↳ __construct
|
set | set | set | set | set | set | set | read | set | set | read | read | set | - | - | - | - | - | - | - | - | read | - | - | - | |
| ↳ selectFarm
|
- | read | - | - | - | - | - | set | - | - | - | - | - | - | - | - | read | - | - | - | - | - | - | - | - | |
↳ checkExistence
|
- | - | - | read | - | - | - | read | read | - | read | read | read | - | - | - | - | - | - | - | - | set | - | - | - | |
| ↳ checkHostVariables
|
- | read | read | - | - | - | read | set | - | - | - | set | read | - | - | - | - | read | - | - | - | - | - | - | - | |
| ↳ setVersion
|
- | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| ↳ setOtherVariables
|
- | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
↳ getConfigFile
|
read | - | - | read | - | - | - | - | - | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | |
setVariable
|
- | - | - | - | - | - | - | - | - | read | - | - | set | - | - | - | - | - | - | - | - | - | - | - | - | |
updateVersionAfterMaintenance
|
- | - | - | - | - | - | - | - | - | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | |
updateVersion
|
- | - | - | - | - | - | - | - | - | - | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | |
Configuration | loadMediaWikiConfig
|
read | - | read | - | - | read | - | - | - | - | - | - | - | read | read | read | - | - | - | - | - | - | - | - | - |
↳ getMediaWikiConfig
|
- | - | - | read | - | - | - | - | - | - | - | read | - | read | read | read | - | - | - | - | - | - | set | set | - | |
↳ populateSettings
|
- | read | - | - | - | - | - | - | read | - | - | - | read | set | set | set | - | - | read | - | - | - | - | - | - | |
↳ extractSkinsAndExtensions
|
- | - | - | - | - | set | - | - | - | - | - | - | - | set | set | - | - | - | - | - | - | - | - | - | - | |
| ↳ detectLoadingMechanism
|
- | - | - | - | - | read | - | - | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
↳ createLocalSettings
|
read | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
Utility | isLocalSettingsFresh
|
- | read | - | read | - | - | - | - | read | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - |
replaceVariable
|
- | - | - | - | - | - | - | - | - | - | read | read | read | - | - | - | - | - | - | - | - | - | - | - | - | |
readFile
|
- | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
cacheFile
|
- | - | - | read | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
(MediaWiki) | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | read | - |
Explanations (English)
This is a hand-made matrix describing what function read or modify what internal data for the software MediaWikiFarm, a MediaWiki "extension" to manage MediaWiki farms of wikis.
This represents the class MediaWikiFarm, which is the main class containing almost all logic. Each row is a method (roughly sorted by chronological order in a typical run) and each column is a class property (all are protected). In each cell, there is either:
- read: the property is (only) read in the method;
- set: the property is set in the method (and possibly read);
- -: the property is neither read or set in the method.
In my previous games works on static analysis of this software, I created the call graph with an external software. But, to be more exact, this call graph is only an overapproximation since the exact (dynamic) call graph is a subset of this one: in a run, possibly some paths are not executed since it depends on the context.
Here, this is the "data graph", and there are different contexts: on the top left, you can choose the various main contexts in which the software can run. This depends mainly from the environment and the configuration, and the possibilities listed here are only the main ones.
The main result coming from this representation is: "the cache drastically reduces the processing". In fact this is not a surprise, it was designed for it, but such a sparse matrix is encouraging and help to visualise the inter-relations. When benchmarking the software, a no-cache run takes 10-15 milliseconds, and a with-cache run takes 85 microseconds (roughly 130 times less).
Explications (français)
Ceci est une matrice créée à la main qui décrit quels fonctions lisent ou modifient quelles données internes pour le logiciel MediaWikiFarm, une "extension" MediaWiki pour gérer des fermes de wikis.
Ceci représente la classe MediaWikiFarm qui se trouve être la classe principale contenant presque toute la logique. Chaque ligne est une méthode (grossièrement ordonnées par ordre chronologique lors d’une exécution classique) et chaque colonne est une des propriétés de la classe (toutes sont protégées). Dans chaque cellule, il y a soit :
- read : la propriété est (seulement) lue par la méthode ;
- set : la propriété est modifiée par la méthode (et possiblement lue) ;
- - : la propriété n’est ni lue ni modifiée par la méthode.
Dans mes précédents jeux travaux sur l’analyse statique de ce logiciel, j’avais créé le graphe d’appels à l’aide d’un programme externe. Mais, pour être exact, ce graphe d’appels n’est qu’une sur-estimation puisque le graphe d’appels (dynamique) est un sous-ensemble de celui-ci : lors d’une exécution, certains chemins peuvent ne pas être exécutés en fonction du contexte.
Ici, nous avons le "graphe des données" et il y a différents contextes : en haut à gauche, vous pouvez choisir les différents contextes principaux dans lesquels le programme peut s’exécuter. Cela dépend principalement de l’environnement et de la configuration, et les possibilités listées ici ne sont que les principales.
Le principal résultat obtenu grâce à cette représentation est : « le cache diminue drastiquement le traitement ». En fait, cela n’est pas une surprise, le programme a été conçu dans ce but, mais une telle matrice creuse est encourageante et aide à visualiser les inter-relations. Lors de tests de performance, une exécution sans cache prend 10-15 millisecondes, et une exécution avec cache prend 85 microsecondes (environ 130 fois moins).