• # DBUSquer le problème

    Posté par . En réponse au message Commande su très très lente. Évalué à 2.

    Bonjour,

    Voici mon analyse, pour ce qu'elle vaut:

    Connexion à /var/run/dbus/system_bus_socket

    socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC, 0) = 4 <0.000006>
    connect(4, {sa_family=AF_FILE, path="/var/run/dbus/system_bus_socket"}, 33) = 0 <0.000010>
    

    La négotiation ne prend pas de temps, on envoie et reçoit (le buffer par défaut de strace ne permet pas logguer l'ensemble des messages, on ne voit pas donc pas quelle "ressource" est demandée [ord.freedesktop...]

    La "ressource" demandée n'est pas disponible/ne répond pas:

    0.000047 recvmsg(4, 0x7fff31780700, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable) 
    

    On essaie une foie encore [flag EAGAIN] et on "poll" avec un timeout de 25000ms. Comme rien ne se passe, on ouvre /etc/passwd une fois ces 25s passées:

    0.000038 poll([{fd=4, events=POLLIN}], 1, 25000) = 0 (Timeout) <25.006077>
    25.006150 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 5 <0.000010>
    

    Voilà pour les 25s de perdues. Reste encore les 4 à 5 secondes restantes:

    Après avoir fermé /etc/passwd, on clone le process:

    0.000028 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f434dea89d0) = 3360 <0.000124>
    

    Un peu plus loin, on attend que ce process fils se termine en utilisant wait4(). Cela prend 4.4s

    0.000017 wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED, NULL) = 3360 ****<4.441088>****
    

    Reste à savoir quelle ressource est demandée via dbus et ce que fait le process fils pour qu'il faille attendre encore 4.4s

    Encore du strace en perspective.