LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1684|回复: 19

谈谈我对portage的改进想法

[复制链接]
发表于 2005-12-5 12:33:27 | 显示全部楼层 |阅读模式
portage确实好用,一个emerge ABC就搞定了,但在使用的过程中我发现还有些不太舒服的地方,初步想了想,应该可以改进的:
1:单任务模式的downloading->building改进成并行进行的同步机制.因为emerge的时候往往需要安装的不止一个软件,所以现在的这种先下载这个,然后编译这个,然后下载下一个,然后编译下一个的方式显得很消耗时间.我平时都是开两个终端,最大限度的保证下载和编译同时运行的.因为这两个任务消耗的资源不一样,一个是cpu的计算资源,另一个是网络带宽资源.
   具体可以这样实现:先找出需要安装的软件包:按安装顺序:S1,S2....Sn,然后开两个进程,一个下载进程,一个编译进程.下载进程按顺序下载S1,S2...Sn,下个不停,知道所有软件都下载完成为止,另一个编译进程只管编译,如果需要编译的包还没下载完成,就等待,下载完成时下载进程给编译进程发送一个信号唤醒编译进程即可.这样可以最大程度让下载和编译的并行程度.假设最简单的情况,这n个软件的下载时间都等于编译时间,那么整个安装过程可以节省一半的时间.

2:多线程的下载工具,我不知道gentoo中的wget是不是默认开启了多线程下载的,如果不是,可以考虑默认开启,或更换支持多线程甚至可以查找多个资源的下载工具,比如说axel.不过我512k的网速来看,对一个软件来说,通常是编译时间大于下载时间,这样的做法实际意义不是很大.
3:充分利用历史编译成果,就是每个软件的编译都首先要checking一大堆的条件,装10个软件就需要checking10次,虽然每次的checking肯定有不同的地方,但有些checking是共同的,比如说gcc版本之类的.我没有对共同部分的量上做比较,但我估计不少,如果能拿出一个公共区域来记录历史的检查记录,如果遇到一个新的检查记录就放进去,如果是已经有的就不需要检查了(因为这个公共记录存放的是检查没问题的记录),这样应该也能节省一些时间(这事我特爱干,经常申明一个map来存储工作成果,呵呵).这个可能需要编译器的支持,不会很简单的.
4:其他一些小想法:比如编译时可以把当前软件的tar包放在tmpfs分区上,等一个个都输出了(就是make完毕了)然后再拷贝到它应该取的地方.

5:这个比较不现实:弄个类似SETI@home的东东来安装在电脑上,接收计算请求,并把计算结果返回给请求发起者.充分利用因特网上的每一台gentoo机器的计算资源.比如在安装的时候从stage1安装时的两次大的编译,如果在编译前指定使用基于因特网的分布式编译的话能大大减少编译时间.反正我的电脑不是总在安装软件的.


这些需要都是由于gentoo的portage机制引发的,如果像其他版本一样手工来安装软件,自己下载,自己解包config,make ,install的话,这些问题也不怎么显现出来,正是由于portage一次性要安装好几个软件才会有改进的现实意义的.


暂时只想到这么多,希望多指教.
发表于 2005-12-5 13:22:27 | 显示全部楼层
比较赞同你的1、和3,其它的好像已经实现了。
1 我想修改emerge脚本己可实现。
3 如果你能像/proc下的内容一样,将config检查的比较普遍的东东放在那里(动态更新),可以极大的加快编译前的准备工作
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:14:23 | 显示全部楼层
1 比较简单的方法就是,例如 一个终端 emerge -f -e system 另外一个 emerge -e system

5 distcc
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:14:45 | 显示全部楼层
heard of prozilla?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 14:47:50 | 显示全部楼层
内建的支持和用户手动支持是不一样的,看看微软把ie集成到操作系统的影响.

disctcc还有点不一样,不是基于internet的,没有site@home那么智能化.

Post by fiag
1 比较简单的方法就是,例如 一个终端 emerge -f -e system 另外一个 emerge -e system

5 distcc
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:52:03 | 显示全部楼层
支持你--不过说真的--以我在网通机房的速度--觉得下载花的时间完全可以接受。
回复 支持 反对

使用道具 举报

发表于 2005-12-5 15:58:10 | 显示全部楼层
支持!
这几个想法不错。
回复 支持 反对

使用道具 举报

发表于 2005-12-5 16:06:11 | 显示全部楼层
搞量子同步得了……超空间……带宽无视……
回复 支持 反对

使用道具 举报

发表于 2005-12-5 19:03:33 | 显示全部楼层
我认为3是非常难以实现的.因为check的过程都是通过调用源代码包本身的configure来进行的,系统及程序库的参数每个用户都会有所不同.
gentoo的开放人员似乎没法每次都正确分析出不同软件里不同的configure脚本.
回复 支持 反对

使用道具 举报

发表于 2005-12-6 00:03:05 | 显示全部楼层
1. Gentoo的开发者大多数在国外,网速很快,所以没有这个需求。
2. 多线程下载对用户方便,对服务器是噩梦。
3. emerge最终还是调用./configure, make, make install来实现的。所以你的建议应该是改进autoconfig,auotmake工具链,你可以向作者提这个Wish啊。
5. SETI@Home不是那么简单的。一个最重要的问题就是安全,你相信其他用户帮你编译的代码吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表