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

From: Ludovic Courtès <[email-masked]>
Date: Tue, 27 Apr 2021 23:26:41 +0200

Hi,

"pelzflorian (Florian Pelz)" <[email-masked]> skribis:

> On Tue, Apr 27, 2021 at 12:38:23PM +0200, Ludovic Courtès wrote:
>> What do you mean by “fails on real hardware”?  That the keyboard layout
>> is unchanged?
>
> Yes.
>
>
>> Is there anything in /var/log/messages
>
> No, nothing out of the ordinary, only the installer pages I went
> through.
>
>> or wherever kmscon
>> writes its logs?
>
> I try with
>
> diff --git a/gnu/services/base.scm b/gnu/services/base.scm
> index 24b3ea785b..0eff24828c 100644
> --- a/gnu/services/base.scm
> +++ b/gnu/services/base.scm
> @@ -2330,6 +2330,7 @@ This service is not part of @var{%base-services}."
>  
>         (define kmscon-command
>           #~(list
> +            #$(file-append strace "/bin/strace") "-o" "/var/log/kmscon-out" "-f"
>              #$(file-append kmscon "/bin/kmscon") "--login"
>              "--vt" #$virtual-terminal
>              "--no-switchvt" ;Prevent a switch to the virtual terminal.

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;
  3. from there I press F1, choose German layout, confirm by typing into
     the host name dialog that I got German layout;
  4. I repeat step #3 with a variety of layouts.

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

[...]

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.

So for me it works exactly as intended.

Do you have a scenario I could follow to try to reproduce the problem?

Thanks,
Ludo’.