Actividad 32: Grupos de control

per Victor Carceler darrera modificació 2020-03-25T15:29:44+01:00

Para la realización de esta práctica puede contar con la documentación electrónica relativa a los grupos de control de Linux y el resto del sistema operativo. En especial, se recomienda el uso de:

 

Debe realizar la práctica utilizando una máquina virtual proporcionada por el profesor.

 

  1. Se recomienda establecer tres sesiones SSH con la máquina virtual.
  • En la primera, se convertirá en root. Esta sesión servirá para manejar los grupos de control.
  • En la segunda se trabajará como un usuario sin privilegios. Este shell estará en el grupo de control grupo-A.
  • En la tercera se trabajará como un usuario sin privilegios. Este shell estará en el grupo de control grupo-B.
  • Crear los directorios /sys/fs/cgroup/cpu/user.slice/grupo-A y /sys/fs/cgroup/cpu/user.slice/grupo-B. Después asegúrese de abrir dos nuevos terminales de manera que cada uno de ellos esté en uno de los grupos de control que acaba de definir. En adelante nos referiremos a estos shells como shell-A y shell-B. El shell inicial, el único en el que debe ser root, será el shell de administrador.
  • Compruebe el número de CPUs de su máquina. Lance en segundo plano tantos procesos consume_cpu como núcleos tenga su máquina en cada uno de los dos shells: shell-A y shell-B. Utilice top para comprobar la distribución de CPU entre los procesos. ¿Cómo es?
  • Actúe sobre el fichero /sys/fs/cgroup/cpu/user.slice/grupo-B/cpu.shares doblando su valor. Utilice top para volver a revisar la distribución de CPU. ¿Qué ocurre?
  • Defina los grupos de control /sys/fs/cgroup/freezer/grupo-A y /sys/fs/cgroup/freezer/grupo-B de manera que contengan los mismos procesos que los grupo-A y grupo-B del controlador cpu. Si en los grupos de control hubiera miles de procesos, ¿cómo lo haría para incluir (de uno en uno, que es lo que pide la especificación de los cgroups) los PIDs en los nuevos grupos de control?
  • Actúe sobre el grupo de control adecuado para congelar los procesos que tienen más atención de CPU. Utilice top para comprobar los resultados, ¿qué ocurre?. ¿Puede utilizar el shell congelado? Descongele de nuevo el grupo de control ¿todo ha vuelto a la normalidad?
  • Con lo realizado hasta ahora ha podido comprobar como es posible, mediante el fichero cpu.shares, especificar el reparto de CPU entre los diferentes grupos de control cuando existe escasez. Ahora bien cuando no hay escasez de recursos, porque ha congelado los procesos de un grupo de control, puede comprobar como el grupo de control que queda obtiene todos los recursos disponibles. Pues nadie más compite por ellos y no es necesario ningún reparto. Si se quisiera limitar el máximo de recursos que un grupo de recursos puede utilizar se debería establecer un techo. De tal manera que aún y cuando nadie más quiera utilizar la CPU el grupo de control limitado solo obtenga cierta cantidad de atención de la CPU. Esto se puede conseguir actuando sobre cpu.cfs_period_us y cpu.cfs_quota_us. Lea la documentación de RHEL sobre los techos de CPU.
  • Termine con los procesos consume_cpu del shell-B. Compruebe que los procesos restantes, que están en el grupo de control grupo-A, acaparan todo el uso de CPU. Actúe sobre el grupo de control para imponer un techo en el uso de CPU, de manera que únicamente se pueda utilizar el 50% del tiempo disponible aunque la CPU no tenga otro trabajo. Utilice top para comprobar el resultado: ¿cuánta CPU utiliza cada consume_cpu? ¿cuánta CPU utilizan entre todos los consume_cpu?
  • Actúe sobre el grupo de control grupo-B para hacer que la ración de CPU disponible sea 9 veces la del grupo-A. Vuelva a lanzar los consume_cpu del shell-B. Utilice top para monitorizar lo que sucede. La pregunta a contestar es: ¿el techo de uso de CPU es un límite o una reserva de utilización?
  • Suponga que quiere definir de manera persistente un nuevo grupo de control para una herramienta. Lea la documentación oficial de RHEL 7 y después demuestre lo aprendido definiendo una nueva unidad de systemd que lance un consume_cpu en su propio grupo de control durante el arranque de la máquina.
  • Modifique la unidad de systemd para cambiar el reparto de: CPU, memoria, IO.