Capture procesos y procesos ocultos que ocultan la utilización de la CPU

He introducido muchos trucos para ocultar el proceso antes, y luego di contramedidas específicas para cada truco. Puedes leer mis artículos desde 2020/03 hasta 2020/08. Hay demasiados, no uno por uno. Enumerar.

Ahora, quiero presentar un método súper simple, imprescindible para los artesanos.

Ya sea que oculte el proceso u oculte la utilización de la CPU del proceso, siempre que se ejecute en la CPU, cualquier medio oculto será inútil frente al siguiente script:

#!/usr/local/bin/stap

global tbase
global tdelta

probe scheduler.cpu_on
{
    
    
	a = gettimeofday_us()
	tbase[pid(), execname()] = a
}

probe scheduler.cpu_off
{
    
    
	t = tbase[pid(), execname()]
	a = gettimeofday_us();
	if (t != 0) {
    
    
		delete tbase[pid(), execname()]
		d = a - t
		b = tdelta[pid(), execname()]
		tdelta[pid(), execname()] = b + d
	}
}

probe timer.ms($1)
{
    
    
	exit()
}

// 结束时将这段时间内所有运行进程的CPU累加时间按照降序打印。
probe end
{
    
    
	foreach ([pid, name] in tdelta-) {
    
    
		printf("%s[%d] = %d\n", name, pid, tdelta[pid, name])
	}
}

Sí, mientras su proceso se esté ejecutando, no puede escapar de la programación del kernel. Siempre que el proceso obtenga la CPU, tomará muestras. Cuando se cambie el proceso, tome muestras nuevamente. La diferencia entre los dos es el tiempo en que el proceso se está ejecutando esta vez. Sume para obtener el tiempo de CPU ocupado por cualquier proceso.

A menos que su proceso no se esté ejecutando en la CPU, ¿cuál es el uso de un proceso que no se está ejecutando ...

Ven y mira el efecto:

[root@localhost test]# /root/loop &
[1] 5814
[root@localhost test]# /root/loop &
[2] 5815
[root@localhost test]#
[root@localhost test]# ./times.stp 5000  # 采样5秒
loop[5814] = 2492109
loop[5815] = 2490044
top[5919] = 1417
kworker/0:1[31879] = 1218
stapio[7125] = 1191
xfsaild/dm-0[397] = 1028
tuned[1003] = 744
systemd-udevd[7126] = 397
sshd[1384] = 174
systemd-udevd[496] = 157
rcuos/0[11] = 105
systemd[1] = 105
kworker/0:2[6831] = 82
systemd-logind[645] = 62
rcu_sched[10] = 43
kworker/u2:2[285] = 7
watchdog/0[12] = 7
ksoftirqd/0[3] = 3
[root@localhost test]#

Uno comprende un estándar.

Ven, ahora haz algo comercial basado en los principios anteriores.

Esta vez ya no escribimos scripts para capturar a alguien, esta vez pretendemos optimizar el algoritmo del planificador.

Necesitamos contar el tiempo de espera de todos los procesos desde que ingresan a la cola lista hasta la ejecución real para verificar si hay inanición del proceso.

#!/usr/local/bin/stap

global tbase
global tdelta

probe kernel.function("activate_task")
{
    
    
	a = gettimeofday_us()
	tbase[task_pid($p), task_execname($p)] = a
}

probe scheduler.cpu_on
{
    
    
	t = tbase[pid(), execname()]
	a = gettimeofday_us();
	if (t != 0) {
    
    
		delete tbase[pid(), execname()]
		d = a - t
		b = tdelta[pid(), execname()]
		tdelta[pid(), execname()] = b + d
	}
}

probe timer.ms($1)
{
    
    
	exit()
}

probe end
{
    
    
	foreach ([pid, name] in tdelta-) {
    
    
		printf("%s[%d] = %d\n", name, pid, tdelta[pid, name])
	}
}

Ven y mira el efecto:

[root@localhost test]# ./wtime.stp 5000
stapio[7727] = 1034
rcuos/0[11] = 747
systemd-udevd[7728] = 244
kworker/0:1[31879] = 236
tuned[1003] = 159
khungtaskd[24] = 80
rcu_sched[10] = 64
systemd-udevd[496] = 58
khugepaged[27] = 20
kworker/u2:2[285] = 20
watchdog/0[12] = 18
auditd[609] = 18
kworker/0:0[7139] = 12
[root@localhost test]#

Finalmente, vale la pena señalar que la sobrecarga de operación de stap es enorme, la implementación interna de la matriz de claves binarias es muy complicada y cpu_on / cpu_off es una ruta de acceso absoluta en el sistema. Los métodos anteriores solo se utilizan para descubrir anomalías del sistema, no operaciones de rutina, y no deben realizarse durante mucho tiempo en un entorno de producción.

Por supuesto, excepto el gerente.


Los zapatos de cuero en Wenzhou, Zhejiang están mojados, por lo que no engordan con la lluvia.

Supongo que te gusta

Origin blog.csdn.net/dog250/article/details/108249157
Recomendado
Clasificación