Como a RAM e a CPU são alocadas se nenhuma alteração manual for aplicada a um servidor Ubuntu?

6

Nós temos um servidor Ubuntu (16.04) executando o R-Studio Server, onde fazemos simulações estatísticas. Essas simulações são, às vezes, pesadas em RAM e CPU, então eu gostaria de saber como memória e RAM são alocadas pelo núcleo se, e. dois usuários estão logados e cada um deles executa uma sessão R individual onde eles "competem" por memória e CPU.

Como nenhum de nós é um administrador de servidor, não queremos aplicar alterações manuais, mas estamos interessados se a alocação de RAM e CPU for menor para todos os usuários.

Nota: A versão do R-Studio Server Pro permite alocar uma determinada quantidade de memória para usuários individuais de uma maneira bastante fácil, mas como não temos a versão Pro, não podemos alterar essas configurações.

    
por joaoal 01.12.2017 / 14:31

4 respostas

5

RAM é o primeiro a chegar, primeiro a servir. Se o userA executar 9 processos que alocam 10% de memória cada e, em seguida, o usuário B efetua logon, o userB verá apenas 10% da memória restante. No caso de a memória acabar, o Linux começará a matar processos. O assassino de OOM não está sintonizado para multiusuário, tanto quanto sei, por isso pode ser injusto neste cenário.

O tempo de CPU é geralmente alocado por processo, não por usuário (mas veja abaixo).

Qualquer processo pronto para ser executado (sem dormir, aguardando E / S, etc.) é considerado para agendamento. (Os processos que não estão prontos para serem executados são ignorados e, portanto, "não contam". (Isso é uma simplificação excessiva, mas suficientemente próxima.))

No modelo mais simples, se dois usuários estão executando um processo cada, cada um recebe aproximadamente metade do tempo disponível da CPU. Mas se userA estiver executando 10 processos e userB estiver executando 1 processo, o userA obterá 90% da CPU e o userB obterá 10% da CPU (todas as outras coisas sendo iguais).

No entanto, o agendador Linux pode refinar isso agrupando processos e alocando o tempo de CPU entre esses agrupamentos.

Além disso, o Linux tem a capacidade de agrupar automaticamente os processos com base na ID da sessão (normalmente associada a terminais, janelas de terminal e / ou sessões de login do X). Isso é chamado de "autogrouping". O objetivo é que um único usuário executando uma tarefa pesada em segundo plano em uma janela e uma tarefa interativa em outra janela ainda verá um desempenho interativo responsivo.

Ambos os recursos são habilitados por padrão no Ubuntu, tanto quanto eu posso determinar.

Não consigo encontrar informações sobre como os grupos de tarefas e / ou o agrupamento automático se comportam em uma carga de trabalho de vários usuários. Em teoria, se o agendador colocar cada usuário em um grupo de tarefas separado, os usuários sempre obterão acesso equilibrado à CPU (50/50 para dois usuários). No entanto, não encontro nada que diga que isso acontecerá automaticamente.

Leitura adicional:

por 01.12.2017 / 15:01
5

Se você precisar limitar o uso de memória no mesmo servidor, sua melhor aposta será

  1. Use duas máquinas virtuais, idealmente KVM, para que você possa usar o servidor Ubuntu existente para hospedar as VMs. No entanto, isso impedirá que você compartilhe facilmente a memória não utilizada de um usuário com outro.
  2. Use cgroups para limitar o uso de recursos
    2.1. link 2.2 link
por 01.12.2017 / 15:33
3

Por padrão, os usuários são ilimitados em termos de memória no Ubuntu, e neste caso é "primeiro a chegar, primeiro a ser exibido". Em outras palavras, o usuário A pode usar toda a memória e não deixar nada para um segundo usuário.

Observação: se você configurar limites, eles serão sempre os mesmos e não dependerão do número de usuários atuais; portanto, você restringirá seus usuários, mesmo que estejam sozinhos na máquina.

Para a CPU, as coisas estão um pouco melhores e o escalonador do kernel irá distribuir o tempo de CPU entre os processos (não os usuários!).

    
por 01.12.2017 / 14:53
-2

Isso dependerá do que os processos em segundo plano estão fazendo, quais versões do software serão instaladas quando você instalar o Ubuntu, se os cron jobs estão sendo executados, etc. A única maneira real de descobrir é verificar o uso da RAM em todos os cenários está interessado, ninguém será capaz de lhe dizer uma vez que mesmo coisas como o número de processadores e placas de rede afetarão o uso da RAM.

Você deve ser capaz de usar grupos de controle para limitar o uso de RAM, mas não sei se você precisa de permissões de root para isso. O ideal seria criar várias máquinas virtuais e alocar recursos dessa maneira.

    
por 01.12.2017 / 14:43