Hi! SLES Support is working on it, and that support claimed that journalctl would output the journal line-by-line, calling fstat for each journal file for each line to output. So for 100 journal files and 6 million lines of journal, that number would be simply crazy. Most of all I'd wonder what the original programmer did think about it: Modern systems are fast anyway, so any algorithm would do? Disclaimer: I did not inspect the actual code; it's just what support told me.
Kind regards, Ulrich Windl > -----Original Message----- > From: systemd-devel <systemd-devel-boun...@lists.freedesktop.org> On > Behalf Of František Šumšal > Sent: Tuesday, May 6, 2025 4:02 PM > To: systemd-devel@lists.freedesktop.org > Subject: [EXT] Re: [systemd-devel] slowness reading persistent journal > > Hey, > > On 5/6/25 13:54, Windl, Ulrich wrote: > > Hi, > > > > An update: The version I’m using (SLES 15 SP6 systemd-254.24) spends > most of the time in fstat() cals, and I really wonder what’s going on there > (say > there are fewer than 20 files to process): > > You might want to try a newer systemd version (as Vito already suggested), > since there were several improvements in this area, like > https://github.com/systemd/systemd/pull/30209. > > > A perf example: > > > > > > > > 41245567 % time seconds usecs/call calls errors syscall > > > > 41245568 ------ ----------- ----------- --------- --------- ---------------- > > > > 41245569 99.94 64.453476 1 41230003 fstat > > > > 41245570 0.04 0.023192 1 14234 write > > > > 41245571 0.01 0.007399 29 253 munmap > > > > 41245572 0.00 0.002771 6 432 mmap > > > > 41245573 0.00 0.000908 5 166 17 openat > > > > 41245574 0.00 0.000549 2 200 fcntl > > > > 41245575 0.00 0.000528 5 103 fstatfs > > > > 41245576 0.00 0.000262 8 32 mprotect > > > > 41245577 0.00 0.000120 2 49 close > > > > 41245578 0.00 0.000112 3 35 read > > > > 41245579 0.00 0.000033 2 14 getrandom > > > > 41245580 0.00 0.000016 4 4 brk > > > > 41245581 0.00 0.000012 6 2 1 statfs > > > > 41245582 0.00 0.000011 1 6 4 prctl > > > > 41245583 0.00 0.000011 1 6 getdents64 > > > > … > > > > So fstat is called 41 million times. Probably more often than the whole > journal has blocks… > > > > Kind regards, > > > > Ulrich Windl > > > > *From:*systemd-devel <systemd-devel-boun...@lists.freedesktop.org> > *On Behalf Of *Windl, Ulrich > > *Sent:* Wednesday, April 9, 2025 11:48 AM > > *To:* systemd-devel@lists.freedesktop.org > > *Subject:* [EXT] [systemd-devel] slowness reading persistent journal > > > > Hi! > > > > In SLES15 SP6 (systemd-254.24-150600.4.28.1.x86_64) I noticed that > collecting logs took quite long, so I checked. > > > > # time journalctl |wc -l > > > > 2705448 > > > > real 2m23.008s > > > > user 1m25.666s > > > > sys 0m57.389s > > > > The journal is persistent and it’s located on a BtrFS subvolume using a > device that is provided by VMware from a high-performance SSD SAN > storage: > > > > # lsblk > > > > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS > > > > sda 8:0 0 40G 0 disk > > > > ├─sda1 8:1 0 512M 0 part /boot/efi > > > > ├─sda2 8:2 0 21G 0 part /root > > > > │ /srv > > > > │ /usr/local > > > > │ /var > > > > │ /opt > > > > │ /tmp > > > > │ /boot/grub2/x86_64-efi > > > > │ /boot/grub2/i386-pc > > > > │ /.snapshots > > > > │ / > > > > ├─sda3 8:3 0 10.7G 0 part /home > > > > └─sda4 8:4 0 7.8G 0 part [SWAP] > > > > # hdparm -t /dev/sda2 > > > > /dev/sda2: > > > > Timing buffered disk reads: 1680 MB in 3.00 seconds = 559.48 MB/sec > > > > # hdparm -T /dev/sda2 > > > > /dev/sda2: > > > > Timing cached reads: 18612 MB in 2.00 seconds = 9322.49 MB/sec > > > > During boot this statistics had been logged: > > > > System Journal (/var/log/journal/41d6ce7a6cfc467297b777b8d87f071d) is > 2.0G, max 2.1G, 103.1M free. > > > > Obvious question: Why is it so slow? > > > > Kind regards, > > > > Ulrich Windl > > > > > -- > Frantisek Sumsal > GPG key ID: 0xFB738CE27B634E4B