Subject: TeXlive (specifically LuaLaTeX) has become terribly slow

From: Malte Frank Gerdes <[email-masked]>
Date: Fri, 21 Jul 2023 17:54:05 +0200

Hi,

i'm building a small document with LuaLaTeX, for that i have use the
following manifest

--8<---------------cut here---------------start------------->8---
(specifications->manifest
  (list
    "texlive-amsmath"
    "texlive-todonotes"
    "texlive-xpatch"
    "texlive-collection-luatex"
    "texlive-collection-basic"
    "texlive-latexmk"
    "texlive-scheme-basic"
    "texlive-biber"
    "texlive-booktabs"
    "texlive-microtype"
    "texlive-koma-script"
    "texlive-lipsum"
    "texlive-pgfplots"
    "texlive-biblatex"))
--8<---------------cut here---------------end--------------->8---

This command takes quite a long time
--8<---------------cut here---------------start------------->8---
guix time-machine --commit=21b718f4d6c3ded8ef50d12f6e9ae6474f74620f \
       shell --manifest=guix.scm -- latexmk -lualatex -auxdir=.tex-cache main
--8<---------------cut here---------------end--------------->8---

To be precise:
--8<---------------cut here---------------start------------->8---
        Command being timed: "guix shell -m guix.scm -- latexmk -lualatex -auxdir=.tex-cache main"
        User time (seconds): 14.60
        System time (seconds): 87.58
        Percent of CPU this job got: 99%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 1:43.18
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 179368
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 118914
        Voluntary context switches: 2146
        Involuntary context switches: 3693
        Swaps: 0
        File system inputs: 462280
        File system outputs: 6584
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0
--8<---------------cut here---------------end--------------->8---

Running `latexmk -lualatex -auxdir=.tex-cache main` takes under 10
seconds.  These times are for fresh builds, i.e. the intermediate files
have been removed.  Still even recompilation is many times slower with
guix provided LuaLaTeX than it is on Arch.  I should also note, that
using the modular TeX packages actually helps here, with the full
TeXlive package the compilation time is nearly twice as much.

Another thing i noticed is, that a directory with the following
structure gets created:

--8<---------------cut here---------------start------------->8---
{
└── gnu
    └── store
        └── 3wsicprhgxhcncaf5mv26wwbhhh8p6yj-profile
            └── share
                └── texmf-dist
                    └── luatex-cache
                        └── generic
                            ├── fonts
                            │   └── otl
                            │       ├── lmroman10-italic.lua
                            │       ├── lmroman10-italic.luc
                            │       ├── lmroman10-regular.lua
                            │       ├── lmroman10-regular.luc
                            │       ├── lmroman12-regular.lua
                            │       ├── lmroman12-regular.luc
                            │       ├── lmroman17-regular.lua
                            │       ├── lmroman17-regular.luc
                            │       ├── lmromanslant10-regular.lua
                            │       ├── lmromanslant10-regular.luc
                            │       ├── lmsans10-bold.lua
                            │       ├── lmsans10-bold.luc
                            │       ├── lmsans10-regular.lua
                            │       └── lmsans10-regular.luc
                            └── names
                                ├── luaotfload-lookup-cache.lua
                                ├── luaotfload-lookup-cache.luc
                                ├── luaotfload-names.lua.gz
                                └── luaotfload-names.luc.gz

11 directories, 18 files
--8<---------------cut here---------------end--------------->8---

This is obviously for caching purposes, but (seemingly random) having a
folder named '{' in your working directory certainly is confusing.

mfg