Algoritmo de controle de carga de
O mecanismo de controle de carga de memória avalia, uma vez por segundo, se a memória suficiente está disponível para o conjunto de processos ativos. Quando uma condição de excesso de memória é detectada, alguns processos são suspensos, diminuindo o número de processos ativos e, assim, diminuindo o nível de comprometimento da memória.
Quando um processo é suspenso, todas as suas threads são suspensas quando atingem um estado suspendível. As páginas dos processos suspensos rapidamente tornam-se estelionadas e são paginadas pelo algoritmo de substituição de página, liberando quadros de páginas suficientes para permitir que os demais processos ativos em andamento. Durante o intervalo em que os processos existentes são suspensos, os processos recém-criados também são suspensos, impedindo que novos trabalhos entrem no sistema. Os processos suspensos não são reativados até que um intervalo subsequente passe durante o qual nenhuma condição de surra potencial existe. Uma vez que este intervalo seguro tenha passado, os fios dos processos suspensos são gradualmente reativados.
Os parâmetros de controle de carga de memória schedo especificam o seguinte:
- O limite de sobrecomprometimento de memória do sistema (v_repage_hi)
- O número de segundos necessários para fazer um intervalo seguro (v_sec_wait)
- O limite de sobrecomprometimento de memória de processo individual pelo qual um processo individual é qualificado como um candidato de suspensão (v_repage_proc)
- O número mínimo de processos ativos quando os processos estão sendo suspensos (v_min_process)
- O número mínimo de segundos decorridos de atividade para um processo após a reativação (v_isist_secs)
Para obter informações sobre configuração e ajuste desses parâmetros, consulte Ajuste de controle de carga de memória VMM com o comando schedo.
Uma vez por segundo, o planejador (processo 0) examina os valores de todas as medidas anteriores que foram coletadas ao longo do intervalo único de um segundo, e determina se os processos devem ser suspensos ou ativados. Se os processos devem ser suspensos, todo processo elegível para suspensão pelo teste de parâmetro -p e -e é marcado para suspensão. Quando esse processo próximo recebe a CPU no modo de usuário, ele é suspenso (a menos que fazer isso reduziria o número de processos ativos abaixo do valor -m ). O critério de modo usuário é aplicado para que um processo seja inelegível para suspensão durante as atividades críticas do sistema executadas em seu nome. Se, durante os subsequentes intervalos de um segundo, o critério de surra ainda estiver sendo cumprido, os candidatos de processo adicionais que atendem aos critérios estabelecidos por -p e -e são marcados para suspensão. Quando o planejador posteriormente determina que o critério de intervalo seguro foi atendido e os processos devem ser reativados, algum número de processos suspensos é colocado na fila de execução (feito ativo) a cada segundo.
Os processos suspensos são reativados por:
- Prioridade
- A ordem em que eles foram suspensos
Os processos suspensos não são todos reativados de uma só vez. Um valor para o número de processos reativados é selecionado por uma fórmula que reconhece o número de processos então ativos e reativa um quinto do número de processos então ativos ou um monotonicamente aumentando com limite inferior, consoante o que for maior. Essa estratégia cautelosa resulta em aumentar o grau de multiprogramação aproximadamente 20 por segundo. A intenção dessa estratégia é fazer com que a taxa de reativação seja relativamente lenta durante o primeiro segundo após o intervalo seguro ter expirado, enquanto aumenta constantemente a taxa de reintrodução nos segundos subsequentes. Se a condição de excesso de memória se recura durante o curso de processos de reativação, ocorram-se os seguintes:
- A reativação é interrompida
- Os processos reativados marcados para serem marcados novamente são marcados
- Processos adicionais são suspensos de acordo com as regras acima