Política de Prioridade

O GridUnesp utiliza um sistema de prioridades baseado em Fair Share para garantir o uso equilibrado dos recursos computacionais entre todos os usuários e grupos de pesquisa.

Conceito de Fair Share

O Fair Share (distribuição justa) funciona com base nos seguintes princípios:

  • Cada grupo de pesquisa tem direito a uma parcela justa dos recursos

  • Cada usuário dentro do grupo tem direito a uma parcela justa

  • A prioridade diminui conforme o usuário/grupo utiliza mais recursos

  • A prioridade é “resetada” gradualmente ao longo do tempo (meia-vida de 14 dias)

Fórmula simplificada:

  • Grupo: 1/N dos recursos, em que N = número total de grupos

  • Usuário: 1/M dos recursos do grupo, em que M = número de usuários no grupo

Visualizando o Fair Share

Comando sshare

O comando sshare mostra a situação atual de Fair Share de todos os usuários:

sshare -a

Exemplo de saída:

Account           User  RawShares  NormShares    RawUsage  EffectvUsage  FairShare
------------ --------- ---------- ----------- ----------- ------------- ----------
   startrek                    10    0.008065    40079089      0.008656
    startrek      kirk          1    0.333333     1761930      0.043961   0.220126
    startrek    picard          1    0.333333    38237843      0.954060   0.219227
    startrek     spock          1    0.333333       79315      0.001979   0.221024
   hogwarts                    10    0.008065     8028212      0.001734
    hogwarts    potter          1    0.250000           0      0.000000   0.278527
    hogwarts  hermione          1    0.250000     8028212      1.000000   0.275831
    hogwarts voldemort          1    0.250000           0      0.000000   0.278527
    hogwarts    malfoy          1    0.250000           0      0.000000   0.278527

Interpretação das colunas:

  • Account: Nome do grupo

  • User: Nome do usuário

  • RawShares: Pesos atribuídos (quanto maior, mais recursos)

  • NormShares: Participação normalizada

  • RawUsage: Uso acumulado recente

  • EffectvUsage: Uso efetivo (0-1)

  • FairShare: Prioridade atual (quanto maior, melhor)

Filtrando a Visualização

Para ver apenas seu grupo:

sshare -a | grep nome_do_grupo

Para ver apenas seu usuário:

sshare -a | grep $USER

Como a Prioridade Afeta os Jobs

A prioridade calculada pelo Fair Share influencia diretamente a ordem de execução dos jobs na fila.

Listando Jobs em Ordem de Prioridade

Ver jobs pendentes ordenados por prioridade
squeue -o "%.18i %.9Q %.8j %.8u %.10V %.6D %R" --sort=-p,i --states=PD

Exemplo de saída:

 JOBID       PRIORITY      NAME     USER  SUBMIT_TIM  NODES NODELIST(REASON)
   2847404     296816  force1.s     yoda  2022-03-31      1 (Priority)
2838783_12     222821  dark1.sh    vader  2022-03-15      1 (Priority)
2838783_14     222821  dark1.sh    vader  2022-03-15      1 (Priority)
   2844502     185817  crucio1. valdemo+  2022-03-28      1 (Priority)
   2848555      50480  vulcano.    spock  2022-04-01      4 (Priority)

Observações:

  • A coluna PRIORITY mostra o valor numérico da prioridade

  • Jobs com prioridade mais alta (maior número) são executados primeiro

  • A prioridade é dinâmica e muda conforme:

    • Novos jobs são submetidos

    • Jobs em execução terminam

    • O tempo passa (meia-vida de 14 dias)

Fatores que Influenciam a Prioridade

  1. Uso recente do cluster

    • Quanto mais você usou nos últimos 14 dias, menor sua prioridade

    • A cada 14 dias, o “contador” é gradualmente resetado

  2. Número de usuários no grupo

    • Grupos com muitos usuários têm fatias menores por pessoa

    • Incentiva grupos a gerenciarem internamente o uso

  3. Tamanho do job

    • Jobs que pedem muitos recursos podem ter prioridade ajustada

    • O sistema busca equilíbrio entre jobs grandes e pequenos

  4. Tempo de espera

    • Jobs que esperam muito tempo ganham prioridade gradualmente

    • Evita starvation (jobs nunca executados)

    • Porém, jobs que demandam curto prazo de processamento têm maior chance de obter recursos mais rapidamente.

Dicas para Melhorar sua Prioridade

✅ Faça:

  1. Solicite apenas o necessário

    #SBATCH -t 02:00:00     # Se seu job roda em 1h30, não peça 24h
    #SBATCH --mem=8G        # Se usa 6G, não peça 64G
    
  2. Distribua o uso ao longo do tempo

    • Evite submeter centenas de jobs de uma vez

    • Espalhe a submissão ao longo de dias/semanas

  3. Use job arrays para muitos jobs pequenos

    #SBATCH --array=1-1000   # 1000 jobs pequenos
    #SBATCH --ntasks=1
    #SBATCH --time=01:00:00
    
  4. Monitore seu Fair Share regularmente

    sshare -U $USER
    

❌ Evite:

  • Monopolizar recursos com jobs muito grandes e longos

  • Solicitar recursos muito acima do necessário

  • Deixar jobs processando que já poderiam ter terminado

Entendendo a Meia-Vida de 14 Dias

O sistema utiliza um decaimento exponencial com meia-vida de 14 dias:

  • Dia 0: Uso máximo (prioridade mínima)

  • Dia 14: O “peso” do uso cai pela metade

  • Dia 28: O “peso” cai para 1/4 do valor original

  • E assim por diante…

Isso significa que:

  • Se você usou muitos recursos hoje, sua prioridade tende ao valor inicial com o decorrer dos dias

  • O sistema “esquece” gradualmente o uso antigo

  • Todos têm chance de recuperar prioridade após períodos de inatividade

Exemplo Prático

Vamos acompanhar um usuário ao longo do tempo:

Semana 1: João submete poucos jobs: prioridade alta (0.9)

sshare -U joao
# FairShare = 0.901

Semana 2: João submete muitos jobs: prioridade cai

sshare -U joao
# FairShare = 0.452

Semana 3: João continua usando muito: prioridade muito baixa

sshare -U joao
# FairShare = 0.187

Semana 4: João reduz o uso: prioridade começa a recuperar

sshare -U joao
# FairShare = 0.223

Semana 5-6: Com uso moderado: prioridade tende ao valor inicial

sshare -u joao
# FairShare = 0.854

Resumo dos Comandos

Comandos para gerenciamento de prioridade

Comando

Descrição

sshare -a

Ver Fair Share de todos os usuários

sshare -U $USER

Ver apenas seu Fair Share

sshare -a | grep grupo

Ver Fair Share do seu grupo

squeue -U $USER --sort=-p

Ver seus jobs ordenados por prioridade decrescente (-p)

squeue -o "%.18i %.9Q %.8j %.8u %.10V %.6D %R" --sort=-p,i --states=PD

Listar jobs pendentes em ordem de prioridade decrescente (-p)

Ver também