Estou executando o Ubuntu 20.04.5 LTS e usando o desktop gnome-classic (porque estou preso em meus caminhos). Eu sempre notei alguns minutos de alta CPU do dbus-daemon quando eu inicialmente efetuei login, mas sempre se estabeleceu em um nível aceitável. Nos últimos dias, no entanto, o dbus-daemon e o system-udevd representaram 50% constantes da CPU e não se estabilizaram enquanto o laptop estava funcionando, fazendo com que o ventilador funcionasse constantemente.
Eu corri dbus-monitor --system
, o que deu um spooling muito rápido de mensagens, como o trecho abaixo:
signal time=1676894325.355898 sender=org.freedesktop.DBus -> destination=:1.245 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.245"
signal time=1676894325.365912 sender=:1.1 -> destination=(null destination) serial=4880989 path=/org/freedesktop/systemd1/unit/sys_2ddevices_2dvirtual_2dblock_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.systemd1.Device"
array [
dict entry(
string "SysFSPath"
variant string "/sys/devices/virtual/block/dm-2"
)
]
array [
]
signal time=1676894325.366042 sender=:1.1 -> destination=(null destination) serial=4880990 path=/org/freedesktop/systemd1/unit/sys_2ddevices_2dvirtual_2dblock_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.systemd1.Unit"
array [
dict entry(
string "ActiveState"
variant string "active"
)
dict entry(
string "SubState"
variant string "plugged"
)
dict entry(
string "StateChangeTimestamp"
variant uint64 1676892339266329
)
dict entry(
string "StateChangeTimestampMonotonic"
variant uint64 19734942
)
dict entry(
string "InactiveExitTimestamp"
variant uint64 1676892339266329
)
dict entry(
string "InactiveExitTimestampMonotonic"
variant uint64 19734942
)
dict entry(
string "ActiveEnterTimestamp"
variant uint64 1676892339266329
)
dict entry(
string "ActiveEnterTimestampMonotonic"
variant uint64 19734942
)
dict entry(
string "ActiveExitTimestamp"
variant uint64 0
)
dict entry(
string "ActiveExitTimestampMonotonic"
variant uint64 0
)
dict entry(
string "InactiveEnterTimestamp"
variant uint64 0
)
dict entry(
string "InactiveEnterTimestampMonotonic"
variant uint64 0
)
dict entry(
string "Job"
variant struct {
uint32 0
object path "/"
}
)
dict entry(
string "ConditionResult"
variant boolean false
)
dict entry(
string "AssertResult"
variant boolean false
)
dict entry(
string "ConditionTimestamp"
variant uint64 0
)
dict entry(
string "ConditionTimestampMonotonic"
variant uint64 0
)
dict entry(
string "AssertTimestamp"
variant uint64 0
)
dict entry(
string "AssertTimestampMonotonic"
variant uint64 0
)
dict entry(
string "InvocationID"
variant array of bytes [
4c 6f ff 28 3e 58 4e 6e 81 82 b3 1c 0c 83 82 3b
]
)
]
array [
string "Conditions"
string "Asserts"
]
signal time=1676894325.366191 sender=:1.1 -> destination=(null destination) serial=4880991 path=/org/freedesktop/systemd1/unit/dev_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.systemd1.Device"
array [
dict entry(
string "SysFSPath"
variant string "/sys/devices/virtual/block/dm-2"
)
]
array [
]
signal time=1676894325.366431 sender=:1.1 -> destination=(null destination) serial=4880992 path=/org/freedesktop/systemd1/unit/dev_2ddm_5cx2d2_2edevice; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.freedesktop.systemd1.Unit"
array [
dict entry(
string "ActiveState"
variant string "active"
)
dict entry(
string "SubState"
variant string "plugged"
)
dict entry(
string "StateChangeTimestamp"
variant uint64 1676892339266328
)
dict entry(
string "StateChangeTimestampMonotonic"
variant uint64 19734941
)
dict entry(
string "InactiveExitTimestamp"
variant uint64 1676892339266328
)
dict entry(
string "InactiveExitTimestampMonotonic"
variant uint64 19734941
)
dict entry(
string "ActiveEnterTimestamp"
variant uint64 1676892339266328
)
dict entry(
string "ActiveEnterTimestampMonotonic"
variant uint64 19734941
)
dict entry(
string "ActiveExitTimestamp"
variant uint64 0
)
dict entry(
string "ActiveExitTimestampMonotonic"
variant uint64 0
)
dict entry(
string "InactiveEnterTimestamp"
variant uint64 0
)
dict entry(
string "InactiveEnterTimestampMonotonic"
variant uint64 0
)
dict entry(
string "Job"
variant struct {
uint32 0
object path "/"
}
)
dict entry(
string "ConditionResult"
variant boolean false
)
dict entry(
string "AssertResult"
variant boolean false
)
dict entry(
string "ConditionTimestamp"
variant uint64 0
)
dict entry(
string "ConditionTimestampMonotonic"
variant uint64 0
)
dict entry(
string "AssertTimestamp"
variant uint64 0
)
dict entry(
string "AssertTimestampMonotonic"
variant uint64 0
)
dict entry(
string "InvocationID"
variant array of bytes [
0c b8 d1 90 42 3e 45 b6 88 f3 71 6e 66 1e 83 c5
]
)
]
array [
string "Conditions"
string "Asserts"
]
A execução udevadm monitor
deu um fluxo de mensagens semelhante, embora não tão rápido, como este:
KERNEL[2188.932041] change /devices/virtual/block/dm-2 (block)
UDEV [2188.940914] change /devices/virtual/block/dm-2 (block)
KERNEL[2188.945441] change /devices/virtual/block/dm-2 (block)
UDEV [2188.957689] change /devices/virtual/block/dm-2 (block)
KERNEL[2188.961225] change /devices/virtual/block/dm-2 (block)
UDEV [2188.969813] change /devices/virtual/block/dm-2 (block)
KERNEL[2188.974779] change /devices/virtual/block/dm-2 (block)
dm-2
é claramente o culpado por algum motivo. dm-2
é a minha partição home:
~$ ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Feb 20 11:25 control
lrwxrwxrwx 1 root root 7 Feb 20 12:02 home -> ../dm-2
lrwxrwxrwx 1 root root 7 Feb 20 11:25 sda3_crypt -> ../dm-0
lrwxrwxrwx 1 root root 7 Feb 20 11:25 swap -> ../dm-1
Meu entendimento de dbus e udev é limitado para dizer o mínimo, mas um pouco de pesquisa no Google me levou a esta postagem que sugeriu que eu criasse um arquivo /etc/udev/rulesd/90-fixdm.rules
que continha
ACTION=="add|change", KERNEL=="dm-*", OPTIONS:="nowatch"
Isso realmente acalmou instantaneamente os dois processos e me devolveu meus ciclos de CPU (e impediu que o ventilador do laptop funcionasse constantemente). No entanto, no dia seguinte, o laptop falhou ao inicializar, travando em um trabalho "aguardando /dev/mapper/swap" que nunca iniciava. Um uso em pânico de um stick Live-Ubuntu para remover o arquivo /etc/udev/rulesd/90-fixdm.rules
mais tarde e estou de volta à estaca zero - o laptop inicializa novamente, mas o alto uso da CPU de dbus-daemon
e system-udevd
voltou.
O que pode ter mudado para causar esse novo comportamento e o que posso fazer para remediar o problema?
Obrigado.
Parece que consegui corrigir o problema.
Um amigo me indicou esta questão sobre o recurso MMP do EXT4. A verificação do dispositivo em questão
tune2fs -l /dev/dm-2 | grep -i mmp
mostrou que este (e nenhum outro) sistema de arquivos tinha o MMP ativado:Acho que não preciso da funcionalidade MMP, então tentei sair e fazer um login no console como root para poder desmontar
/home
, mas mesmo com ele desmontado não consegui remover o sinalizador mmp como sempre afirmava que o dispositivo estava em uso (tanto quanto eu sabia, não estava). Tive que reiniciar no modo de recuperação e ir para um shell root, e só então consegui remover o sinalizador MMP com:Em seguida, reiniciei e loguei normalmente e agora estou executando sem o alto uso de CPU de dbus-daemon e systemd-udevd e a execução
udevadm monitor
não fornece mais o fluxo interminável de mensagens.Vou apenas mencionar que, uma vez que esta resposta à pergunta relacionada acima menciona que é um problema com versões mais recentes de
udisks2
, mas sugere que foi corrigido que minha instalação 20.04.05LTS parece ter version2.8.4-1ubuntu2
, e da mesma forma um comentário sob essa resposta sugere que2.9.2-2+deb11u1
também ainda tem o mesmo problema.