Hello,
après quelques recherches biblio sur NFS et les problèmes de perf, j’ai trouvé cet article intéressant, qui semble pouvoir s’appliquer également à SPIP.
http://tag1consulting.com/blog/nfs-drupal-and-realpath-cache
Le fait est que quasi toutes les inclusions passent par include_once (via include_spip ou find_in_path), et qu’il semble que cela déclenche un lstat sur NFS à chaque fois (y compris en cas d’include multiples sur le même fichier), ce qui semble très mauvais en terme de perf, donc, si par malheur le cache sur le real_path n’est pas assez gros (peut-il l’être dans le cas d’un mutu ? si un hébergeur compétent est dans la salle et nous écoute, réponse bienvenue …).
Un fix semblerait être de spécifier le chemin absolu dans la directive include_once.
Il me semble que dans notre cas, il serait assez trivial d’ajouter 1 ligne dans spip_initialisation_core() :
define(’_CWD’,getcwd());
et de modifier la fonction find_in_path par
if (is_readable($a .= $file)) {
if ($include) include_once $a;
return $files[$dirname][$file] = $files[’’][$dirname . $file] = $a;
}
en
if (is_readable($a .= $file)) {
$a = _CWD . $a;
if ($include) include_once $a;
return $files[$dirname][$file] = $files[’’][$dirname . $file] = $a;
}
ce qui aura de plus l’avantage d’eviter que php ne recherche dans le include_path au moment du include_once.
Les quelques appels directs a include_once pourraient aussi être prefixés de la meme façon, mais c’est anectodique il me semble.
L’autre piste que je vois serais de ne plus effectuer coté script php la recherche dans le path, mais de se reposer sur php lui même et include_path (on peut présumer que cette recherche est plus rapide)
Cela ne permettra cependant de traiter que les cas d’inclusion (je ne suis pas sur que l’on puisse récuperer le chemin du fichier inclus pour le retourner, le cas échéant, donc il est possible que cela ne couvre pas 100% des inclusions).
Dans tous les cas, un site hébérgé en mutu et qui présente des problèmes de lenteur, voire d’erreurs 500 intempestives, serait nécessaire pour valider le patch.
Si un candidat est volontaire, c’est assez simple à essayer !
Cédric