control: summary -1 0 slow to start user ssh session (11 seconds) Hi,
I reopened this bug since the current unstable package isn't good enough and requires some touch up to get accepted for testing. Problem: ======== * The default desktop Debain install is Gnome-wayland. * Some localization tasks pull in im-config (its important) * The testing had im-config=0.39-1 * Im-config=0.39-1 caused major degradation to the ssh login with 11 unresponsive latency under wayland+systemd. * The root cause was the slow script run by im-config during the start of a new process to set its environment variable using the systemd's systemd.environment-generator(7). * this performance degradation of the default system is unacceptable. Bug #925160 back ground: ======================== Many unnoticed performance bugs crept into im-config to cause this bug. * Nov 2011 (version 0.5) -- older than oldstable/jessie Since im-config is ARCH=all package, it used "*" as the path part for the multiarch such as x86_64-linux-gnu --> This should have been "*-*-*" instead of just "*" * Feb 2015 (version 0.27-2) jessie released version * Dec 2016 (version 0.30-1) stretch released version * Bug #905129: im-config: Wrongly run shell scripts with user's shell interpreter, raises error with zsh (Jul 2018) This was really a problem of KDE + sddm. * Aug 2018 (0.37-1) -- during buster development cycle im-config worked around bug #905129 by replacing shell glob with a shell function call which runs script with "find" command. --> This should have been worked around by using the simple one liner: if [ x != x"$ZSH_NAME" ]; then emulate -R sh ; fi * Mar 2019 (version 0.40-1) Patch provided by Y. Yoshino was applied to make im-config useful for Gnome-wayland. Since gnome-session has no easy hook script mechanism like /etc/X11/Xsession.d/* files for X, this patch decided to use systemd.environment-generator(7) to set the user environment. --> This script run the problematic slow code twice which made situation worse. --> This startup code should have been disabled if it finds ibus-daemon just as gnome-session (main.c) does. --> This startup code should run only when it finds XDG_SESSION_TYPE=wayland (ideally -- but can't check it if systemd.environment-generator is used) * Bug #925160 systemd: user session slow to start (11 seconds) (Mar 2019) Since 0.40-1 used systemd.environment-generator, the hook scrip was run even for ssh login and delay of 11 seconds was noticed. ssh with X-session doesn't have this problem for ssh and 11 second during X start up may not be as annoying. How to solve Bug #925160: ========================= * Fix glob to use "*-*-*" * Use "emulate -R sh" trick (not script with "find") for zsh * save environment variables to avoid running the problematic slow code twice * check existence of ibus-daemon and disable systemd.environment-generator script if you find it. Technical reference: ==================== $ cd /usr/lib $ ( ls -1d * ; ls -1d * )|wc -l 734 $ ls -1d *-* |wc -l 74 $ ls -1d *-*-* |wc -l 18 So not running slow glob twice and changing "*" --> "*-*-*" can improve speed 40 times! Shell glob approach is faster than script with "find" Future vision: ============== I see 2 parts of code which may be patched to make cleaner solution * gnome-session ibus related environment variable setting * gnome-shell: ibus starting code But that is for future. im-config's complicated time consuming code may be useless to start with from today's situation since settings such as: GTK_IM_MODULE=xim QT4_IM_MODULE=xim are not good idea . It is usually a source of lost key input etc. It's now better to use settings such as: GTK_IM_MODULE=ibus QT4_IM_MODULE=ibus This simplify code greatly but doing this may be too late for buster under freeze. Osamu