After a recent update, my btfrs-cleaner utility and baloo_file_extractor began running constantly, using up to 50% of my ram and a lot of CPU, causing the desktop and any other applications to lock up. It also extended my boot-up and shut-down time to upwards of ten minutes and In researching this issue (there is very little about it on this forum) I came across this thread: https://forum.garudalinux.org/t/linux-5-16s-autodefrag-btrfs-regression/16961 that helped a little.
Here is what worked for me:
Disable ALL btfrs utilities in the Garuda BTFRS Assistant
Use balooctrl in terminal to suspend file indexing while I am using the computer.
Code: # btfrsctrl suspend
When I am finished I allow baloo to resume to continue indexing process (without it your files will not be searchable).
Code: # balooctrl resume
As for btfrs, I can initiate the utilities whenever I feel the need to run them.
The issue appears to be rooted in the recent linux kernel, which allows certain processes to take as many resources as they need, while giving lower priority to other process, such as desktop and applications.
Just saying, but not knowing what baloo is I run a search: baloo_file_extractor at DuckDuckGo
Most results are about baloo wildly taking up CPU and RAM.
I'd try and see if there's something relevant before getting busy with the kernel.
Baloo isn't the problem. It seems to be the btrfs utilities, btrfs-clean in particular, that constantly change and rearrange the file addresses during defrag and trim operations that causes baloo to run constantly to keep up with the indexing operations. At least that is what the information I have found indicates. After disabling the btrfs utilities in btfrs Assistant, Baloo ran for a bit then settled down.
Garuda (2.5.4-2):
System install date: 2021-07-17
Last full system update: 2022-02-09
Is partially upgraded: No
Relevant software: NetworkManager
Windows dual boot: No/Undetected
Snapshots: Timeshift
Failed units:
Well, then, Houston, we have a problem. I used the GA to copy/paste that inxi to the forum.
/etc/pacman.conf:
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
#ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
#[community-testing]
#Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
[multilib-testing]
Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
That is probable. Last week I kept getting an error from Chaotic AUR. After going through the pacnew issues it stopped. So that's probably what I did. I'll get that fixed and try again. Thanks.