Subject: bug#39341: Installer using 100% of a CPU core

From: "pelzflorian (Florian Pelz)" <[email-masked]>
Date: Wed, 28 Apr 2021 09:02:10 +0200

Hi Ludo,

On Tue, Apr 27, 2021 at 11:26:41PM +0200, Ludovic Courtès wrote:
> I tried this in ‘guix system vm gnu/system/install.scm’.  I proceed like
> so:
> 
>   1. after the installer’s welcome screen I choose French layout;
>   2. the next dialog is the host name, which is where I confirm I really
>      got French layout;

At the host name dialog, I still have QWERTY layout, on both my Beebox
and my Macbook.  I can however switch in QEMU on the same Macbook.  Oh
and I just noticed now; the same USB drive does switch layouts on my
fastest machine.  All are UEFI.

>   3. from there I press F1, choose German layout, confirm by typing into
>      the host name dialog that I got German layout;

No effect, I still got QWERTY layout.

>   4. I repeat step #3 with a variety of layouts.

Same.

> Changing layouts there just works and is instantaneous.  (Note that this
> only changes the layout of kmscon, so tty3 & co. are unaffected.)
> 
> The strace log shows this when changing layouts (FD 17 corresponds to
> /tmp/kmscon-165-keymap-update, the FIFO node):
> 
> --8<---------------cut here---------------start------------->8---
> 165   epoll_wait(3, [{EPOLLIN, {u32=17731792, u64=17731792}}, {EPOLLIN|EPOLLHUP, {u32=18285248, u64=18285248}}, {EPOLLIN, {u32=17639536, u64=17639536}}], 32, -1) = 3
> 165   epoll_wait(12, [{EPOLLIN, {u32=17678528, u64=17678528}}], 32, 0) = 1
> 165   read(20, "\33[5;22H\33[44m\33[K\33[6;22H\33[K\33[7;22H"..., 16384) = 1657
> 165   read(20, 0x10f6c28, 16384)        = -1 EAGAIN (Resource temporarily unavailable)
> 165   read(17, "p", 1)                  = 1
> 165   read(17, "c", 1)                  = 1
> 165   read(17, "1", 1)                  = 1
> 165   read(17, "0", 1)                  = 1
> 165   read(17, "5", 1)                  = 1
> 165   read(17, "\0", 1)                 = 1
> 165   read(17, "f", 1)                  = 1
> 165   read(17, "r", 1)                  = 1
> 165   read(17, "\0", 1)                 = 1
> 165   read(17, "\0", 1)                 = 1
> 165   read(17, "\0", 1)                 = 1
> 165   read(17, "", 1)                   = 0
> 165   stat("/gnu/store/m734r6j7g74x9k74sgjb8835pg7dnqbk-libxkbcommon-1.0.3/etc/xkb", 0x7fff179314b0) = -1 ENOENT (No such file or directory)
> 165   stat("/gnu/store/qz3zdrz12rxawlkvah9qjhjyf6fh1v98-xkeyboard-config-2.31/share/X11/xkb", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0

Yes i do have this output too:

231   epoll_wait(3, [{EPOLLIN, {u32=8232720, u64=8232720}}, {EPOLLIN|EPOLLHUP, {u32=8124896, u64=8124896}}], 32, -1) = 2
231   epoll_wait(12, [{EPOLLIN, {u32=8182976, u64=8182976}}], 32, 0) = 1
231   read(29, "\33[5;67H\33[44m\33[K\33[6;67H\33[K\33[7;67H"..., 16384) = 1833
231   read(29, 0x7fc4f8, 16384)         = -1 EAGAIN (Resource temporarily unavailable)
231   read(26, "p", 1)                  = 1
231   read(26, "c", 1)                  = 1
231   read(26, "1", 1)                  = 1
231   read(26, "0", 1)                  = 1
231   read(26, "5", 1)                  = 1
231   read(26, "\0", 1)                 = 1
231   read(26, "f", 1)                  = 1
231   read(26, "r", 1)                  = 1
231   read(26, "\0", 1)                 = 1
231   read(26, "\0", 1)                 = 1
231   read(26, "\0", 1)                 = 1
231   read(26, "", 1)                   = 0
231   stat("/gnu/store/m734r6j7g74x9k74sgjb8835pg7dnqbk-libxkbcommon-1.0.3/etc/xkb", 0x7fff282d66b0) = -1 ENOENT (No such file or directory)
231   stat("/gnu/store/qz3zdrz12rxawlkvah9qjhjyf6fh1v98-xkeyboard-config-2.31/share/X11/xkb", {st_mode=S_IFDIR|0555, st_size=2048, ...}) = 0
231   stat("/gnu/store/qz3zdrz12rxawlkvah9qjhjyf6fh1v98-xkeyboard-config-2.31/share/X11/xkb", {st_mode=S_IFDIR|0555, st_size=2048, ...}) = 0

> 
> [...]
> 
> 165   openat(AT_FDCWD, "/gnu/store/qz3zdrz12rxawlkvah9qjhjyf6fh1v98-xkeyboard-config-2.31/share/X11/xkb/symbols/inet", O_RDONLY) = 22
> 165   fstat(22, {st_mode=S_IFREG|0444, st_size=64040, ...}) = 0
> 165   mmap(NULL, 64040, PROT_READ, MAP_SHARED, 22, 0) = 0x7f50d23b5000
> 165   brk(0x12bb000)                    = 0x12bb000
> 165   munmap(0x7f50d23b5000, 64040)     = 0
> 165   close(22)                         = 0
> 165   epoll_ctl(3, EPOLL_CTL_DEL, 17, NULL) = 0
> 165   close(17)                         = 0
> 165   getpid()                          = 165
> 165   unlink("/tmp/kmscon-165-keymap-update") = 0
> 165   mknod("/tmp/kmscon-165-keymap-update", S_IFIFO|0700) = 0
> 165   openat(AT_FDCWD, "/tmp/kmscon-165-keymap-update", O_RDONLY|O_NONBLOCK) = 17
> 165   epoll_ctl(3, EPOLL_CTL_ADD, 17, {EPOLLIN, {u32=19410896, u64=19410896}}) = 0
> --8<---------------cut here---------------end--------------->8---
> 
> The last lines show that we delete the FIFO from the poll set, close the
> FIFO, recreate it, and re-add it to the poll set.

I got:

231   openat(AT_FDCWD, "/gnu/store/qz3zdrz12rxawlkvah9qjhjyf6fh1v98-xkeyboard-config-2.31/share/X11/xkb/symbols/inet", O_RDONLY) = 31
231   fstat(31, {st_mode=S_IFREG|0444, st_size=64040, ...}) = 0
231   mmap(NULL, 64040, PROT_READ, MAP_SHARED, 31, 0) = 0x7f1b1f5c7000
231   munmap(0x7f1b1f5c7000, 64040)     = 0
231   close(31)                         = 0
231   epoll_ctl(3, EPOLL_CTL_DEL, 26, NULL) = 0
231   close(26)                         = 0
231   getpid()                          = 231
231   unlink("/tmp/kmscon-231-keymap-update") = 0
231   mknod("/tmp/kmscon-231-keymap-update", S_IFIFO|0700) = 0
231   openat(AT_FDCWD, "/tmp/kmscon-231-keymap-update", O_RDONLY|O_NONBLOCK) = 26
231   epoll_ctl(3, EPOLL_CTL_ADD, 26, {EPOLLIN, {u32=9609568, u64=9609568}}) = 0
231   epoll_wait(3, [{EPOLLIN, {u32=8123856, u64=8123856}}], 32, -1) = 1
231   read(14, "\2\0\0\0 \0\0\0000\373{\0\0\0\0\0\326\0\0\0^\335\t\0\347,\0\0]\0\0\0", 1024) = 32
231   ioctl(14, DRM_IOCTL_MODE_PAGE_FLIP, 0x7fff282d6b50) = 0

Slightly different.  This is the next occurrence after the pci05\0fr.

My layout is still QWERTY after waiting for some time; I do not know
how the layout switch was eventually triggered after a while last time.

> 
> So for me it works exactly as intended.
> 
> Do you have a scenario I could follow to try to reproduce the problem?
> 
> Thanks,
> Ludo’.