Actividad 33: systemd y cgroups

per Victor Carceler darrera modificació 2020-03-25T16:29:45+02:00

En las distribuciones de GNU/Linux, systemd y cgroups forman un buen tandem. Durante el arranque systemd agrupa los procesos en diferentes cgroups.

Realice la actividad en la máquina virtual proporcionada por el profesor, asegúrese de que la máquina virtual cuenta con 2 CPUs.

  1. Desarrolle un ejecutable de nombre consume-cpu cuyo único objetivo sea consumir CPU y no termine nunca.
  2. Escriba una unidad llamada consume-cpu.service y disponga lo necesario para que en cada arranque se lance el programa de manera automática. Puede consultar la documentación de systemd.unit y de systemd.service. La unidad se deberá escribir en /etc/systemd/system.
  3. Escriba el script lanza-consumidores, de manera que al ejecutarlo se lancen en segundo plano 4 procesos consume-cpu.
  4. Desactive la unidad consume-cpu.service e implemente, y active, las unidades grupo-a.service y grupo-b.service. De modo que cada una de ellas llame al script lanza-consumidores. Como en este caso se invoca un script, que lanza cuatro subprocesos, y después termina, será necesario incluir Type=forking al definir la unidad. Reinicie y compruebe: el reparto de CPU y los grupos de control definidos de manera automática.
  5. Consulte la documentación sobre systemd.resource-control. En la máquina proporcioanada por el profesor, ¿qué versión de grupos de control se está utilizando? ¿Se debe utilizar CPUWeight o CPUShares en la unidad del servicio? Disponga lo necesario para que grupo-b.service tenga menor peso y reciba únicamente la mitad de atención.
  6. Implemente el script consume-io <file> que, al recibir como parámetro el nombre de un fichero realizará de forma contínua las siguientes operaciones: sobreescribir el fichero con 1MiB de ceros, sobreescribir el fichero con 1000 líneas de texto (puede utilzar el comando yes).
  7. Defina la unidad io-a.service de manera que se lance un consume-io. Utilice iostat, atop y htop para monitorizar las operaciones IO.
  8. Defina la unidad io-b.service de manera que se lance un consume-io. Utilice herramientas de monitorización para observar lo que sucede.
  9. Cambie la unidad io-b.service para que sus operaciones IO sean menos prioritarias.