+ -
当前位置:首页 → 问答吧 → 双核机器编译LFS6.4

双核机器编译LFS6.4

时间:2008-12-09

来源:互联网

工作又调动了。我终于告别了那台垃圾笔记本(Pentium M 1.7GHz, 256MB),用上了原来的那台联想品牌机器(双核Pentinum D 3.0 GHz *2, 1GB内存,SATA硬盘)。

今天一个早上编译好了LFS6.4,直接从第6章开始,宿主系统Ubuntu 8.04,用的是LFS6.3在第5章制作的工具链(从笔记本上直接拷来的)。
内核2.6.28.rc7,目的就是直奔ext4文件系统去的。

编译的时间确实如LFS手册所说,双核的CPU时间不是那么精确。在编译大包时很好,比如Glibc, Gcc(16分钟)。 在编译小包时,和原来的机器时间是差不多的。编译内核时,速度比原来还慢(10分钟),不过加入了双核的选项,慢一些是正常的。当然宿主不是LFS系统,应该也有点影响。

附件为编译以及安装的时间(即make && make install ),大家可以参考一下呵呵。我现在还在思考到底怎么格出一个ext4文件系统:( 总不能自己格自己吧:)
上传的附件
time.tar.gz (1.4 KB, 13 次查看)

作者: ti8er   发布时间: 2008-12-09

三个硬盘分区:
XP , NTFS;
Ubuntu ext3; 内核以及用户程序不支持ext4。
LFS6.4 ext3; 内核和用户程序支持ext4。

大家说说我应该怎么搞出一个ext4分区来呢?

作者: ti8er   发布时间: 2008-12-09

简单啊
先在lfs下创建一个ext4分区
接着把根目录下出了/proc,/sys,/dev外所有文件复制到ext4分区,在ext4分区中手动创建/proc,/sys,/dev。
然后对fstab,grub做相应调整。

作者: kangtian   发布时间: 2008-12-09

问题是,我的硬盘已经没有分区了。怎么创建……

作者: ti8er   发布时间: 2008-12-09

把Ubuntu删除了,不就有空间了吗?

作者: yd_xzn   发布时间: 2008-12-10

使用多核编译程序肯定比单核的快,除非你那个软件只包含一个源程序文件.

作者: trublemaker   发布时间: 2008-12-10

但不是所有程序都能并行编译的。。。

作者: d00m3d   发布时间: 2008-12-14

只要用make就可以并行编译的

make -jN 就可以

作者: trublemaker   发布时间: 2008-12-14

我的意思是有此软件用并行编译会出错的

作者: d00m3d   发布时间: 2008-12-14

一般不会出错,如果出错了,再来一次基本上就可以了。

作者: trublemaker   发布时间: 2008-12-14

引用:
作者: trublemaker
只要用make就可以并行编译的

make -jN 就可以
晕倒,谢谢兄弟,我现在才知道有这个选项!

我作了试验,编译Binutils,时间也就是1SBU。
用make的结果是
2分55秒。
用make -j的结果是
1分29秒!

哇,我真是惊讶了。我还以为双核就可以自动用了呢,原来还要加选项……
那样的话,我机器上所有的编译软件速度又刷新了!哈哈。基本上时间应该是除以2!

作者: ti8er   发布时间: 2008-12-16

N 是线程数,一般多核的情况下,N 可以是核心数乘二再加一,也就是说双核可以用 make -j 3 都不错

作者: d00m3d   发布时间: 2008-12-16

引用:
作者: d00m3d
N 是线程数,一般多核的情况下,N 可以是核心数乘二再加一,也就是说双核可以用 make -j 3 都不错
make -j 5

作者: xinglp   发布时间: 2008-12-17

一般说来,N=2*CPU数+1,
线程太多了,对速度没有多少提升了
还有,也不用每次都make -JN

直接设置 

export MAKEFLAGS="-jN" 就可以了。

作者: trublemaker   发布时间: 2008-12-17

线程太多不单不会提升,反而因为等待而令实际效能降低

作者: d00m3d   发布时间: 2008-12-17

学习了,还有这选项,我说怎么编译的时候只能一个CPU是100%的.

作者: tom0732   发布时间: 2008-12-18

引用:
作者: trublemaker
一般说来,N=2*CPU数+1,
线程太多了,对速度没有多少提升了
还有,也不用每次都make -JN

直接设置 

export MAKEFLAGS="-jN" 就可以了。
export MAKEFLAGS="-jN" 
jN 中间有没有空格?

作者: tom0732   发布时间: 2008-12-18

都是一样的吧

作者: d00m3d   发布时间: 2008-12-18

lfs:/mnt/lfs/sources/linux-2.6.22.5$ make mrproper
gcc: Internal error: Segmentation fault (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
gcc: Internal error: Segmentation fault (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

用了export MAKEFLAGS="-jN" ,编译GCC后,再编译Linux-2.6.22.5 API Headers
就出错了.

作者: tom0732   发布时间: 2008-12-19

N要换成你的数值哈。

CPU数+1,呵呵。

如果你用jhalfs,就会发现,实际上他用的也是MAKEFLAGS

作者: trublemaker   发布时间: 2008-12-19

嗯,我已经修改成3了,编译GCC时没问题,而且TOP里看到设置生效了,不过Linux-2.6.22.5 API Headers会出错,奇怪,连续从头试了两次都这样.今天试试不加这个参数看看

作者: tom0732   发布时间: 2008-12-19

试试 make -j1
可能就屏掉MAKEFLAG的设置了吧。

作者: trublemaker   发布时间: 2008-12-19

倒不如 unset MAKEFLAGS 好了

作者: d00m3d   发布时间: 2008-12-20

引用:
作者: tom0732
lfs:/mnt/lfs/sources/linux-2.6.22.5$ make mrproper
gcc: Internal error: Segmentation fault (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
gcc: Internal error: Segmentation fault (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

用了export MAKEFLAGS="-jN" ,编译GCC后,再编译Linux-2.6.22.5 API Headers
就出错了.
不加这个变量就没问题,编译工具链还是不加这个参数比较好。

作者: tom0732   发布时间: 2008-12-22

热门下载

更多