如题,
话说我在大概去年就开始编译源码了,
但是那个时候使用的是time make -j{cores +1}d的编译方法,这个方法需要的内存数目是相对较小的,不需要多少的内存就可以编译完成。
这个方法的原理是每个CPU内核都分配一个最少一个任务,如此可以确保每个CPU都没有空闲。
经过我的实际测试,这个编译方法的速度相对于另外一个方法要慢不少。
每个CPU都至少有一个任务在执行,但是未必这个任务就能填满CPU的运算量。
那么怎么才能填满一个CPU的全部运算量呢?
有另外一个编译方法,
就是 time make -j
这个j后面不加任何的数字就是说,不限制进程的数目,也就是说尽可能多的开线程,
这样的话,就可以快速的耗光CPU的计算力了。
虽然两者的差别很大,我目测,用time make -j的速度比起time make -j{cores + 1}的速度要快的多。
但是同时显然的time make -j占用的内存数目也是非常的惊人的。
所以谁知道应该怎么计算一个软件编译的时候需要占用多少的内存呢?
我们make -j 4 和-j 8以及-j 16都比较好计算,这个是倍数关系。
但是问题是我们应该如何计算类似与-j这种不限制进程数目的编译呢?
我该怎么计算这个东西占用的内存呢?
我打算按照可以time make -j来从源码构建一个ubutnu的内存需求来为我的新电脑购买内存。
谢谢!!!
另外,是不是swap分区无法解决编译源码需要的内存?
我昨天弄了4GB的内存何30GB的swap分区然后make -j 编译clang3.8,
结果很快的,就卡死了,
奇怪的是,当我停止这个编译工程之后,按说机器应该恢复正常了,
但是机器依然非常的卡,
打开atop之后发现,
机器CPU选项仍然是红色的,就是超高负载的颜色,中度负载是蓝色的,低负载是白色的。
这个是怎么回事?
谁懂得?
编译软件需要的内存可以用swap空间来代替吗?
怎么照样卡的要死?‘
谢谢!!!
怎么才能知道编译一个源码需要的内存空间?
-
- 帖子: 197
- 注册时间: 2015-12-23 16:20
- 系统: ubuntu 16.04
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
Re: 怎么才能知道编译一个源码需要的内存空间?
楼主试试看用zram?
viewtopic.php?f=21&t=476869
如果zram不够用,就直接上zswap
这个卡的原因可能是正在swap in?
建议楼主看看磁盘io负荷和资源消耗排前的进程.
如果是kswapd X(X为数字)则说明是卡在swapping上了
另外,make用-j的话虽然速度快,但也有风险
来源:
http://www.gnu.org/software/make/manual ... e-Pitfalls
Wed Apr 27 03:34:07 CST 2016补充:
肉测了一下,卡的连sysrq按键都无法重启机器了
这么恐怖的话,我想了个土办法,你去买电脑的时候带上移动硬盘,然后引导进去编译,要是没卡死,就成功了
不过首先要界定"无限"是怎么定义的.
如果真的无限多个job在运行的话,那什么电脑也会卡死.
如果只是填满CPU的话,有那么智能吗?填多了就会卡死,填少了就无法充分发挥CPU
viewtopic.php?f=21&t=476869
如果zram不够用,就直接上zswap
这个卡的原因可能是正在swap in?
建议楼主看看磁盘io负荷和资源消耗排前的进程.
如果是kswapd X(X为数字)则说明是卡在swapping上了
另外,make用-j的话虽然速度快,但也有风险
来源:
http://www.gnu.org/software/make/manual ... e-Pitfalls
Wed Apr 27 03:34:07 CST 2016补充:
肉测了一下,卡的连sysrq按键都无法重启机器了
这么恐怖的话,我想了个土办法,你去买电脑的时候带上移动硬盘,然后引导进去编译,要是没卡死,就成功了
不过首先要界定"无限"是怎么定义的.
如果真的无限多个job在运行的话,那什么电脑也会卡死.
如果只是填满CPU的话,有那么智能吗?填多了就会卡死,填少了就无法充分发挥CPU
-
- 帖子: 2284
- 注册时间: 2013-05-26 6:58
- 系统: Debian 9
Re: 怎么才能知道编译一个源码需要的内存空间?
原来是"目测" ...虽然两者的差别很大,我目测,用time make -j的速度比起time make -j{cores + 1}的速度要快的多。
我的目测是:
开那么多任务,CPU被填满不是用来进行编译,而是用来进行进程/线程调度去了...
- kashu
- 帖子: 451
- 注册时间: 2014-02-07 17:31
- 系统: Xubuntu 14.04.5 64位
Re: 怎么才能知道编译一个源码需要的内存空间?
关于卡的问题,原因到底出在哪,可以用dstat来进行实时查看:
我一般开机之后,会单独开一个terminal一直运行这个dstat,随时想看时能随时看到整个系统的健康状态,挺方便的。
监视结果输出示例如下:
代码: 全选
$ dstat -cdnmpyslt -N eth0 -D total,sda --top-bio-adv
监视结果输出示例如下:
代码: 全选
----total-cpu-usage---- -dsk/total----dsk/sda-- --net/eth0- ------memory-usage----- ---procs--- ---system-- ----swap--- ---load-avg--- ----system---- ----most-expensive-block-i/o-process----
usr sys idl wai hiq siq| read writ: read writ| recv send| used buff cach free|run blk new| int csw | used free| 1m 5m 15m | time |process pid read write cpu
2 1 97 0 0 0| 0 0 : 0 0 | 0 0 |2060M 116M 7934M 1804M| 0 0 0| 176 720 | 0 977M|0.26 0.35 0.34|27-04 06:04:16|
13 3 84 0 0 0| 0 0 : 0 0 | 765B 558B|2059M 116M 7958M 1780M|2.0 0 0| 873 9395 | 0 977M|0.32 0.36 0.34|27-04 06:04:17|
14 5 81 0 0 0| 0 0 : 0 0 | 0 0 |2060M 116M 7976M 1761M|1.0 0 0| 912 10k| 0 977M|0.32 0.36 0.34|27-04 06:04:18|
15 4 79 3 0 0| 0 0 : 0 0 | 0 0 |2056M 116M 7978M 1763M| 0 0 0| 990 10k| 0 977M|0.32 0.36 0.34|27-04 06:04:19|
16 4 81 0 0 0| 0 0 : 0 0 |3370B 9583B|2055M 116M 7979M 1764M| 0 0 0|1082 9751 | 0 977M|0.32 0.36 0.34|27-04 06:04:20|
6 1 93 0 0 0| 0 0 : 0 0 | 66B 0 |2055M 116M 7972M 1771M| 0 0 2.0| 636 4218 | 0 977M|0.32 0.36 0.34|27-04 06:04:21|
4 2 94 0 0 0| 0 0 : 0 0 | 0 0 |2055M 116M 7949M 1793M| 0 0 0| 436 2929 | 0 977M|0.29 0.35 0.34|27-04 06:04:22|
28 6 66 0 0 0| 0 0 : 0 0 | 25k 5580B|2060M 116M 7979M 1759M|1.0 0 3.0|1355 7992 | 0 977M|0.29 0.35 0.34|27-04 06:04:23|chromium-browser --pp12548 0 4096B8.5%
18 4 78 0 0 0| 0 0 : 0 0 | 86k 20k|2063M 116M 7979M 1756M| 0 0 0|1346 8561 | 0 977M|0.29 0.35 0.34|27-04 06:04:24|
4 1 85 10 0 0| 0 0 : 0 0 | 0 0 |2064M 116M 7973M 1760M| 0 0 0| 465 2865 | 0 977M|0.29 0.35 0.34|27-04 06:04:25|
2 1 96 0 0 0| 0 0 : 0 0 | 120B 66B|2064M 116M 7973M 1761M| 0 0 0| 283 1711 | 0 977M|0.29 0.35 0.34|27-04 06:04:26|
2 1 97 0 0 0| 0 0 : 0 0 | 0 0 |2064M 116M 7973M 1761M| 0 0 0| 352 2339 | 0 977M|0.27 0.35 0.34|27-04 06:04:27|
3 1 96 0 0 0| 0 0 : 0 0 | 0 0 |2064M 116M 7973M 1760M| 0 0 0| 260 1328 | 0 977M|0.27 0.35 0.34|27-04 06:04:28|
5 2 93 0 0 0| 0 12k: 0 12k| 0 0 |2064M 116M 7949M 1785M| 0 0 0| 410 3981 | 0 977M|0.27 0.35 0.34|27-04 06:04:29|
6 3 91 0 0 0| 0 0 : 0 0 | 0 0 |2064M 116M 7950M 1783M| 0 0 0| 574 6008 | 0 977M|0.27 0.35 0.34|27-04 06:04:30|
6 3 92 0 0 0| 0 12k: 0 12k| 0 0 |2063M 116M 7947M 1787M| 0 0 0| 528 5073 | 0 977M|0.27 0.35 0.34|27-04 06:04:31|
2 1 97 0 0 0| 0 0 : 0 0 | 0 0 |2055M 116M 7947M 1795M| 0 0 1.0| 250 1305 | 0 977M|0.33 0.36 0.34|27-04 06:04:32|
10 3 86 0 0 0| 0 0 : 0 0 | 0 0 |2054M 116M 7941M 1803M| 0 0 0| 628 7204 | 0 977M|0.33 0.36 0.34|27-04 06:04:33|
9 2 89 0 0 0| 0 0 : 0 0 |1590B 2772B|2054M 116M 7941M 1803M|1.0 0 0| 694 7129 | 0 977M|0.33 0.36 0.34|27-04 06:04:34|
10 2 88 0 0 0| 0 0 : 0 0 | 0 0 |2054M 116M 7941M 1802M| 0 0 0| 705 7466 | 0 977M|0.33 0.36 0.34|27-04 06:04:35|
2 1 97 0 0 0| 0 4096B: 0 4096B| 0 0 |2055M 116M 7940M 1802M| 0 0 0| 251 1594 | 0 977M|0.33 0.36 0.34|27-04 06:04:36|
2 1 98 0 0 0| 0 0 : 0 0 | 0 0 |2055M 116M 7940M 1802M| 0 0 0| 414 2970 | 0 977M|0.30 0.35 0.34|27-04 06:04:37|
OS: Xubuntu 14.04.5 LTS 64-bit
CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 12GB DDR3 1333MHz
128GB SSD + 2TB HDD
神舟优雅A480B-I5B 购于 2012.08
YouTube频道:https://www.youtube.com/channel/UCGSPXZ ... DuDYX8L6Qg