Dizendo ao kernel para priorizar a troca de um determinado aplicativo?

2

É verdade que esta é uma questão estranha ...

TL; DR: Estou tentando trabalhar em um programa, mas sempre que eu o vinculo, ele usa quantidades ridículas de RAM. Como resultado, praticamente tudo, exceto o vinculador, é empurrado para o espaço de troca, o que faz com que meu sistema não responda aos próximos 10 minutos. (Embora, uma vez que eu comece a usar os diferentes aplicativos novamente, o desempenho comece a retornar ao normal.)

O problema é que eu realmente não me importo com quanto tempo o enlace demora enquanto o resto do computador não trava. Isso me leva à minha pergunta: existe uma maneira de, quando o linker iniciar, dizer ao kernel para preferir trocá-lo com qualquer outra coisa? por exemplo. que, se eu ficar sem memória RAM, o linker será trocado antes de qualquer outra coisa.

Estou ciente de que isso causaria uma grande desaceleração, mas também não quero ter que reiniciar meu computador toda vez que eu vinculá-lo, porque ele se torna uma caixa de gelo gigante. : O

    
por kirbyfan64sos 26.04.2017 / 18:25

1 resposta

2

Se eu estiver entendendo sua pergunta corretamente, você deseja reduzir a prioridade do seu vinculador ( ld com base nas tags usadas) para que o sistema permaneça responsivo enquanto o vinculador estiver em execução. Para todos os efeitos, esta questão é uma duplicata de Change niceness (priority) of um processo em execução mas não pode ser fechado como duplicado com uma recompensa aberta.

Você pode iniciar um processo com prioridade muito baixa ao prefixar nice -n 19 no seu comando ou alterá-lo enquanto estiver em processo com renice

Essa abordagem instruirá o sistema a estar mais disposto a liberar recursos do sistema para outras tarefas e melhorar a capacidade de resposta de seu sistema. O valor de niceness padrão é 10. Você pode experimentar valores diferentes de 11 a 19, que melhorarão a capacidade de resposta de forma incremental. seu sistema, com 19 resultando na maior melhoria (e o maior tempo de vinculação)

Trecho da página nice man:

NOTES

       SUSv2 and POSIX.1 specify that nice() should return the new nice value.
       However, the Linux system call and the nice() library function provided
       in older versions of (g)libc (earlier than glibc  2.2.4)  return  0  on
       success.  The new nice value can be found using getpriority(2).

       Since  glibc  2.2.4,  nice()  is implemented as a library function that
       calls getpriority(2) to obtain the new nice value to be returned to the
       caller.   With  this implementation, a successful call can legitimately
       return -1.  To reliably detect an error, set  errno  to  0  before  the
       call, and check its value when nice() returns -1.

Fontes:

Altere a gentileza (prioridade) de um processo em execução

link

Você também pode encontrar essas informações interessantes.

    
por Elder Geek 10.05.2017 / 22:50