怎么才能知道编译一个源码需要的内存空间?

编译安装或者制作Deb包
回复
yubinalice
帖子: 112
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

怎么才能知道编译一个源码需要的内存空间?

#1

帖子 yubinalice » 2016-04-08 14:14

如题,

话说我在大概去年就开始编译源码了,

但是那个时候使用的是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空间来代替吗?

怎么照样卡的要死?‘

谢谢!!!
科学之子
帖子: 2250
注册时间: 2013-05-26 6:58
系统: Debian 9
送出感谢: 839 次
接收感谢: 30 次

Re: 怎么才能知道编译一个源码需要的内存空间?

#2

帖子 科学之子 » 2016-04-27 3:06

楼主试试看用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按键都无法重启机器了 :em06
这么恐怖的话,我想了个土办法,你去买电脑的时候带上移动硬盘,然后引导进去编译,要是没卡死,就成功了

不过首先要界定"无限"是怎么定义的.
如果真的无限多个job在运行的话,那什么电脑也会卡死.
如果只是填满CPU的话,有那么智能吗?填多了就会卡死,填少了就无法充分发挥CPU
科学之子
帖子: 2250
注册时间: 2013-05-26 6:58
系统: Debian 9
送出感谢: 839 次
接收感谢: 30 次

Re: 怎么才能知道编译一个源码需要的内存空间?

#3

帖子 科学之子 » 2016-04-27 3:37

虽然两者的差别很大,我目测,用time make -j的速度比起time make -j{cores + 1}的速度要快的多。
原来是"目测" ...
我的目测是:
开那么多任务,CPU被填满不是用来进行编译,而是用来进行进程/线程调度去了...
头像
kashu
帖子: 451
注册时间: 2014-02-07 17:31
系统: Xubuntu 14.04.5 64位
送出感谢: 37 次
接收感谢: 25 次

Re: 怎么才能知道编译一个源码需要的内存空间?

#4

帖子 kashu » 2016-04-27 6:11

关于卡的问题,原因到底出在哪,可以用dstat来进行实时查看:

代码: 全选

$ dstat -cdnmpyslt -N eth0 -D total,sda --top-bio-adv
我一般开机之后,会单独开一个terminal一直运行这个dstat,随时想看时能随时看到整个系统的健康状态,挺方便的。

监视结果输出示例如下:

代码: 全选

----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
回复

回到 “编译或打包”