[systemd-devel] Slow startup of systemd-journal on BTRFS
Kai Krakow
hurikhan77 at gmail.com
Sat Jun 14 07:31:22 PDT 2014
Goffredo Baroncelli <kreijack at libero.it> schrieb:
>> First, I've set the journal directories nocow.
>
> If you use nocow, you lost the btrfs ability to rebuild a RAID array
> discarding the wrong sector. With the systemd journal checksum, you can
> say that a data is wrong, but BTRFS with its checksum (when used in raid
> mode) is able to *correct* the data too.
The decision is up to you. For me it was easy:
First: I do not care much if some of my logs become broken. I have backups
anyway with a backlog several weeks long.
Second: I don't use data RAID (at least not yet), just data striping. So the
btrfs checksum won't help me much - it has about the same meaning as the
journal checksums.
YMMV... For me, nocow'ing the journal was the clear winner. If you persist
on using cow for journal files, I'd stick with the defragger:
>> Back to the extents counts: What I did next was implementing a defrag job
>> that regularly defrags the journal (actually, the complete log directory
>> as other log files suffer the same problem):
>>
>> $ cat /usr/local/sbin/defrag-logs.rb
>> #!/bin/sh
>> exec btrfs filesystem defragment -czlib -r /var/log
>
> I think that this is a more viable solution; but what seems to me strange
> is the fact that the fragmentation level of my rsyslog file is a lot
> lower.
Are you sure? As Duncan pointed out at many occassions, if your journal file
is compressed by btrfs (for whatever reason, depends on your mount options
and defragging habbits), then filefrag does not show correct values. It
shows the count of compression blocks. Only if you are sure about that, it
is worth considering further steps.
If you are sure about the journals not being compressed (and the rsyslog
file, too), you can compare values. I think, only then, you could say that
systemd's allocation strategy for journal files does no good on btrfs. Maybe
then it's time to fix that by patching systemd to use another strategy,
either by configuration or auto-detection.
Most of those strategies will probably result in coalescing writes to the
journal into bigger blocks, which means buffering, which in turn is usually
not wanted for log files. That in turn means that cowed btrfs is probably
the wrong medium for storing journal files. You may want to play with
SyncIntervalSec in journald.conf...
BTW: I'm not sure if autodefrag would kick in on journal files because those
appends are no random writes. I think I remember that autodefrag was about
detecting random writes and then rewrite the file as a whole to reduce
extent fragmentation. Read: I'm not sure if autodefrag would have an effect
on this. A btrfs dev may comment on that.
--
Replies to list only preferred.
More information about the systemd-devel
mailing list