• [^] # Re: Utilité

    Posté par (site web personnel) . En réponse au journal Unicode. Évalué à 3.

    Quand on lance

    LANG=C grep 7 /tmp/out >/dev/null 
    

    au lieu de
    grep 7 /tmp/out >/dev/null 
    
    on fait deux choses qui influent sur les performances du programme: on change la LOCALE, c'est l'effet le plus visible, et on change l'alignement mémoire du programme, c'est l'effet le moins visible mais il est loin d'être anodin. Dans cet article on peut lire:

    We see that something external and orthogonal to the program, i.e., changing the size (in bytes) of an unused environment variable, can dramatically (frequently by about 33% and once by almost 300%) change the performance of our program.

    C'est à dire que l'importante différence de temps d'éxécution est peut-être en partie due à la différence de taille de l'environnement (qui change l'alignement des données du programme). Pour une mesure plus fiable, il faudrait ajouter une variable de padding.
    Avec LANG=C on ajoute 6+1 octets à l'environnement, la sensibilité à l'alignement est probablement liée à l'orgine du bloc de données modulo 32 ou 64 (la taille du bus mémoire). Pour pallier cet effet, on pourrait ajouter 57 octets à l'environnement en ajoutant la liaison

    X=123456789012345678901234567890123456789012345678901234
    
    à l'environnement.

    Autre chose: après l'éxécution de la première ligne de commande le programme grep, ses bibliothèques et le fichier de données sont sûrement en mémoire dans l'ordinateur en le temps que passe l'OS à les chercher n'intervient pas dans la mesure du second temps.

    J'ai testé ton exemple grep chez moi, avec plusieurs tailles de fichier out et les trois dispositions d'environnement discutées, dans observer de tendance favorisant l'une des trois formes d'appel.