想要用裸设备编译源码,高手看看成不?

编译打包和其他
回复
yubinalice
帖子: 197
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04

想要用裸设备编译源码,高手看看成不?

#1

帖子 yubinalice » 2016-06-12 19:10

这个编译的时候有非常巨大的IO需求,这个IO操作占用了大量的CPU,

所以我想要把编译文件的源码和目的地放在裸设备上面。

哪个高手看看能不能用裸设备来完成编译源码的工程?

谢谢!!!

据我所知,裸设备只是一个文件,不能存放许多的文件。

那么我用数据库把所有的文件都整合成一个数据库文件好不?

然后重定向IO,把读取每个文件改成读取数据库的某个部分?

哪个高手看看这个可以不可以?

谢谢!!!
头像
astolia
论坛版主
帖子: 6398
注册时间: 2008-09-18 13:11

Re: 想要用裸设备编译源码,高手看看成不?

#2

帖子 astolia » 2016-06-13 14:57

你直接建立个tmpfs,把文件都放到内存中编译不就行了?我现在编译内核都这么搞
yubinalice
帖子: 197
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04

Re: 想要用裸设备编译源码,高手看看成不?

#3

帖子 yubinalice » 2016-06-13 15:38

astolia 写了:你直接建立个tmpfs,把文件都放到内存中编译不就行了?我现在编译内核都这么搞
这个我也会,

但是问题是有许多东西都不可能这样处理的。

比如我想要编译一个Android的模拟器,这个东西编译出来之后应该有好几十GB的容量,

或者编译一个KDE,编译出来之后容量可能超过上百GB,

所以这么巨大的数据量,

对于存储是一个巨大的挑战,不可能使用内存来编译。

裸设备可以大幅度降低CPU的开销以及提高磁盘速度。

但是估计会降低磁盘的寿命。

所以对于一些体积超级巨大的工程还是需要使用裸设备的。


谢谢!!!


我突然想到一个想法,

可以 不可以让一个已经分区的设备强行挂载成裸设备,然后写入的时候是裸设备写入,

然后在重新挂载成正常设备来进行拷贝活动?


谢谢您的回复!!
头像
astolia
论坛版主
帖子: 6398
注册时间: 2008-09-18 13:11

Re: 想要用裸设备编译源码,高手看看成不?

#4

帖子 astolia » 2016-06-13 16:40

没有让你把编译后的内容也放tmpfs啊,tmpfs只放源码,编译结果还是放磁盘上,反正编译后的内容在整个编译过程中需要重复使用的机会不多。
另外我不知道你为什么那么执着于使用raw device,这个特性在linux上一度被删掉,因为打开文件时加上O_DIRECT标志就有同样效果了。要绕过系统缓存完全可以用其他的方法,比如 https://github.com/Feh/nocache
yubinalice
帖子: 197
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04

Re: 想要用裸设备编译源码,高手看看成不?

#5

帖子 yubinalice » 2016-06-30 17:17

astolia 写了:没有让你把编译后的内容也放tmpfs啊,tmpfs只放源码,编译结果还是放磁盘上,反正编译后的内容在整个编译过程中需要重复使用的机会不多。
另外我不知道你为什么那么执着于使用raw device,这个特性在linux上一度被删掉,因为打开文件时加上O_DIRECT标志就有同样效果了。要绕过系统缓存完全可以用其他的方法,比如 https://github.com/Feh/nocache

不,这个不一样,使用裸设备可以大幅度降低CPU的开销,然后就是磁盘的读写速度比起有文件系统要快得多,因为我要使用的CPU比较厉害,就是这个志强的服务器CPU,所以编译的时候磁盘的写入速度会非常的快,话说,我有的时候回用tcc编译器,您可以去看看这个编译器的神奇之处。

因此我需要尽可能快的提高磁盘的写入速度。

裸设备是最好的选择,

您看看这个可以吗?

我不知道可以不可以用ln -s来链接裸设备。

谢谢!!

有些高手说可以用裸设备来编译源码,

但是有的网站上面说,裸设备就是一个文件。

但是其实所有的文件系统难道不都是一个文件然后加上分区表里面的文件名称什么的吗?

因此原理上面应该是可以的。
onlylove
论坛版主
帖子: 5215
注册时间: 2007-01-14 16:23

Re: 想要用裸设备编译源码,高手看看成不?

#6

帖子 onlylove » 2016-06-30 19:49

比较厉害,XEON……啥型号的啊? :Noting 几个啊?
#include <stdio.h>
void main()
{
double world;
unsigned letter;
short stay;
long memories;
printf("I miss you.\n");
}
头像
astolia
论坛版主
帖子: 6398
注册时间: 2008-09-18 13:11

Re: 想要用裸设备编译源码,高手看看成不?

#7

帖子 astolia » 2016-07-06 20:02

yubinalice 写了: 不,这个不一样,使用裸设备可以大幅度降低CPU的开销,然后就是磁盘的读写速度比起有文件系统要快得多,因为我要使用的CPU比较厉害,就是这个志强的服务器CPU,所以编译的时候磁盘的写入速度会非常的快,话说,我有的时候回用tcc编译器,您可以去看看这个编译器的神奇之处。

因此我需要尽可能快的提高磁盘的写入速度。

裸设备是最好的选择,

您看看这个可以吗?

我不知道可以不可以用ln -s来链接裸设备。

谢谢!!

有些高手说可以用裸设备来编译源码,

但是有的网站上面说,裸设备就是一个文件。

但是其实所有的文件系统难道不都是一个文件然后加上分区表里面的文件名称什么的吗?

因此原理上面应该是可以的。
看来你是知其然不知其所以然,不明白“大幅度降低CPU的开销”的原因,也不清楚文件系统工作原理。

向普通的文件系统里写入文件,数据要经过底层的文件系统驱动,才能达到磁盘设备驱动最终写到磁盘上。这个过程中,文件系统驱动会去解析已存在的文件系统结构来确定数据写入的位置。举个例子(忽略缓存):现在要向/a/b/c这么个文件里写入数据。那么文件系统就要先去检查/a、/a/b有没有权限写入,这就需要找到/a和/a/b在磁盘上对应的数据块,读取出来后检查通过,然后去磁盘上找个足够大的空闲区域写入/a/b/c的数据,再来更新/a和/a/b的数据块信息。

而对于raw device,是直接由程序指定写入位置,省去了上面整个文件系统驱动解析处理文件系统的步骤,程序叫写哪里就写哪里,当然省下了大量CPU计算和磁盘IO。

对于某些特殊软件,比如数据库管理系统,它天然就是结构化的存储,没必要文件系统再来一重结构化,所以可以利用裸设备提高性能。但对于编译任务来讲。编译不同源文件产生的大量目标文件本来就需要文件系统来结构化管理,如果想输出到裸设备中,就意味着必须自己去规划文件的存储位置,等于重新实现一遍文件系统的功能。

现在单个至强E7支持的最大内存已经到TB级了,E5也有几百GB。如果真有经常编译大项目的需求,直接加内存就是了。如果是低端的E3加不了多少,也可以用SSD、组RAID等方法大幅提高磁盘读写速度。

没钱拼不了硬件,只能在软件上想办法的话,最简单还是tmpfs,只存放代码和编译出的最常用的库文件的话,小型服务器的内存配置大多数情况都还是够用的。这就考验你写makefile的水平了。
回复