告诉内核优先交换某个应用程序?

告诉内核优先交换某个应用程序?

不可否认,这是一个有点奇怪的问题......

TL;DR:我正在尝试开发一个程序,但每当我链接它时,它都会占用大量 RAM。结果,除了链接器之外的几乎所有东西都被推入交换空间,这导致我的系统在接下来的 10 分钟内 99% 不响应。(不过,一旦我再次开始使用不同的应用程序,性能就会开始恢复正常。)

问题是,只要计算机的其余部分不锁定,我真的不在乎链接需要多长时间。这让我想到了一个问题:当链接器启动时,有没有办法告诉内核优先交换它而不是其他任何东西?例如,如果我的 RAM 不足,链接器将先于其他任何东西交换。

我知道这会导致速度严重减慢,但我也不想每次链接时都要重新启动计算机,因为它会变成一个巨大的冰箱。:O

答案1

如果我正确理解了您的问题,您希望降低链接器的优先级(ld基于您使用的标签),以便您的系统在链接器运行时保持响应。无论出于何种目的,这个问题都是改变正在运行的进程的优先级但它不能作为有开放赏金的重复品而被关闭。

您可以使用优先级非常低通过nice -n 19在命令前面添加或在其正在处理时更改它renice

这种方法将指示系统更愿意释放系统资源以用于其他任务,并提高系统的响应能力,默认的niceness值为10。您可以尝试从11到19的不同值,这将逐步提高系统的响应能力,其中19可带来最大的改进(和最长的链接时间)

手册页摘录nice

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.

资料来源:

改变正在运行的进程的优先级

http://manpages.ubuntu.com/manpages/xenial/man2/nice.2.html

您可能还会发现此信息有趣的。

相关内容