Uso compartido y Prioridades

Numerosos miembros del iC1 y sus colaboradores utilizan simultáneamente PROTEUS en su labor investigadora. Para que todos tengan oportunidad de usarlo y los recursos se repartan de la forma más equitativa posible, se utiliza el algoritmo Fair Tree Fairshare del gestor de colas Slurm.

Sin entrar en detalles técnicos, el procedimiento para elegir el próximo trabajo a ejecutar es el siguiente:

  • Se ordenan todos los trabajos en espera (estado PD) según su prioridad
  • Se ejecuta el trabajo con mayor prioridad
  • Se repiten los dos puntos anteriores mientras haya recursos disponibles y trabajos en espera

Cálculo de la prioridad

La prioridad de cada trabajo viene dada una serie de métricas multiplicadas por un factor, siguiendo la siguiente fórmula:

Prioridadtrabajo = 90000·Fairshareowner + 5000·TiempoEnEspera + 5000·Tamaño

Donde:

  • Fairshare es el ratio de recursos consumidos por el propietario del trabajo durante los últimos 21 días
  • TiempoEnCola se refiere al periodo que lleva el trabajo pendiente de ser ejecutado (a mayor tiempo en espera, mayor prioridad, con un máximo de 14 días)
  • Tamaño es la cantidad de recursos solicitados, por ejemplo: número de procesadores

Cada uno de estas métricas se evalúa asignándole un valor entre [0,…1]. La métrica Fairshare es la que tiene mayor peso en el cálculo de la prioridad al estar multiplicada por un factor 90000 y es la que va a determinar la prioridad del trabajo. Solo en el caso de que dos o más usuarios tuvieran el mismo Fairshare, el resto de las expresiones tendrían relevancia en el cómputo global.

Familias de nodos y Fairshare

PROTEUS está compuesto por varias familias de nodos, entendiendo por familia a los nodos que tienen el mismo hardware.

El rendimiento de estas familias es distinto. Los nodos más antiguos tienen unas capacidades de cómputo menores que los actuales. Más info aquí.

Para compensar estas diferencias en la estimación del Fairshare, se aplican unos factores correctores para igualar la cantidad de trabajo realizado por unidad de tiempo de CPU.