ccache 编译加速配置

ccache(compiler cache的缩写)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息, 比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。

ccache原理是通过把项目的源文件用ccache编译器编译,然后缓存编译生成的信息,从而在下一次编译时,利用这个缓存加快编译的速度,目前支持的语言有:C、C++、Objective-C、Objective-C++。

github :https://github.com/ccache/ccache
home:https://ccache.dev/

经测试,distclean 后,重新编译时间从2:40 减少到1:30
修改部分文件后编译由40s提升到30s (不固定)

  1. 查看编译时间
    • 使用time build command可以查看执行build command命令所需的时间
    • 首先build command distclean清理中间文件
    • 执行time build command查看完全编译所需的时间。
  2. 安装ccache
sudo apt-get install ccache
  1. 配置ccache
    执行下面命令,使用ccache替代gcc等编译工具
mkdir ~/.ccache_bin
cd ~/.ccache_bin/
ln -s /usr/bin/ccache gcc
ln -s /usr/bin/ccache g++
ln -s /usr/bin/ccache cc
ln -s /usr/bin/ccache c++

修改环境变量

vim ~/.bashrc
//添加下面一行到 ~/.bashrc 最后一行
export PATH=$HOME/.ccache_bin:$PATH

//更新环境变量
source ~/.bashrc

检查配置,输入命令,检查使用的编译器是否为~/.ccache_bin/gcc,是则配置完成,否则检查环境变量是否配置成功which gcc

  1. 使用ccache
  • 首次执行时,需要使用distclean清理中间文件,然后使用time build command进行编译
  • 编译完成后 ,可通过ccache -s查看当前已缓存文件数
    在这里插入图片描述
  • 再次编译时,会自动选择文件缓存,再次使用ccache -s可以查看文件缓存的命中率

接下来,我们来了解一下ccache的原理:

使用编译器高速缓存工具complier cache(ccache)来加快编译速度,如果你经常make clean
ccache能大大缩短再次编译的时间。可以通过设置以下命令来启用ccache。可以将该环境变量写入.bashrc或类似文件,避免每次都设置。

$ export USE_CCACHE=1

默认cache存储在~/.ccache. 可以使用下列命令来设置路径

$ export CCACHE_DIR=<path-to-your-cache-directory>

推荐的cache大小为50-100GB. 可以使用下列命令来设置cache size

$ prebuilt/linux-x86/ccache/ccache -M 50G  (工程目录下运行)

该设置会永久存储在CCACHE_DIR

可以使用以下命令来查看ccache的运行状况:

$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s   (工程目录下运行)

目前在我们的项目中已经设置有ccache,但cache size 偏小,可以重新设置一下cache size即可。

原理简介:

ccache 工具通过将头文件高速缓存到源文件之中而改进了构建性能,因而通过减少每一步编译时添加头文件所需要的时间而提高了构建速度

在标准的编译过程中,在 UNIX 下使用 C/C++ 开发应用程序通常需要用到一个编译器(如 gcc)以及一个编译工具,比如 make。make 和所有的 C 编译器的问题在于 C 预处理程序(preprocessor)和头文件的工作方式。观察一个典型的 C 源文件,您会发现其中有很多由 #include 所引用的各种头文件。

每一次编译一个文件时,C 预处理程序(cpp)都会解析并引入每个头文件以及这些头文件引用到的任何文件。通过对内容进行解析,ccp 可以将一个相当基本的 1-KB 大小的源文件转化为一个 8-KB 大小的源文件,在这个过程中,会合并入几十个甚至几百个头文件。在典型的开发项目中,有很多与项目相关的头文件可能会在不同的源文件中多次被引入,而且每个头文件本身也可能引用很多其他头文件。

在典型的编译过程中,make 工具只编译自上次编译后发生修改的文件,这样就在很大程度上简化了编译过程。

make 将必须被编译的文件限制在经过修改的那些源文件范围之内,但是即使是使用 make,仍然有相当可观的浪费。每一次编译项目时,源文件在编译为汇编语言和最终的机器代码之前,都要通过 cpp 进行解析。对每一个文件来说,每一次可能都要重新解析头文件。从编译的全过程来看,您最后可能多次解析了相同的头文件,浪费了处理器周期,更重要的是浪费了开发者的时间,因为他们要等待这一过程的完成。在一个团队中,这一影响可能会更为明显,
因为多名开发者可能都会反复多次重复这一过程,在某一天甚至可能会同时进行。

ccache(“compiler cache”的缩写)工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息,比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。如果您编译清单 2 中的文件,假定 foobar.h 中包含对其他头文件的引用,ccache 会用那个文件的 cpp-parsed 版本来取代 include 声明。就那么简单。不是真正去读取、理解并解释其内容,ccache 只是将最终的文本拷贝到文件中,使得它可以立即被编译。

清单 2. 源文件内容

#include "foobar.h"
void main(void);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍; 安装步骤: # tar xvf eaccelerator-0.9.5.2.tar.bz2   # cd cd eaccelerator-0.9.5.2   # export PHP_PREFIX="/usr"   # $PHP_PREFIX/bin/phpize   # ./configure \   --enable-eaccelerator=shared \   --with-php-config=$PHP_PREFIX/bin/php-config   # make   # make install 修改配置文件: 我们首先要修改;php.ini,然后重启Apache;   在php.ini文件中,加入;   zend_extension="/usr/lib/php/extensions/eaccelerator.so" 注:模块的具体位置;   eaccelerator.shm_size="16" 注:共享内存大小;   eaccelerator.cache_dir="/home/eaccelerator" 注:缓存目录;   eaccelerator.enable="1"   eaccelerator.optimizer="1"   eaccelerator.check_mtime="1"   eaccelerator.debug="0"   eaccelerator.filter=""   eaccelerator.shm_max="0"   eaccelerator.shm_ttl="0"   eaccelerator.shm_prune_period="0"   eaccelerator.shm_only="0"   eaccelerator.compress="1"   eaccelerator.compress_level="9"   注:其中,模块的具体位置必须正确,以您的系统为准;共享内存大小可以自己调整,感觉16M还是可以的,根据服务器的情况,你自己调一下。缓存目录可以自己指定,我们在这里指定的是 /home目录上的 eaccelerator 目录,如果没有,自己创建一个;权限是0777;   以上的配置是把 eaccelerator 做为 Zend 的扩展模块来编译的办法。如果您的PHP是用安装模式编译的,要把 zend_extension改为zend_extension_ts 。   如果您是把 eaccelerator 做为 PHP的一个扩展,要用下面的配置 ;   extension="eaccelerator.so"   eaccelerator.shm_size="16"   eaccelerator.cache_dir="/home/eaccelerator"   eaccelerator.enable="1"   eaccelerator.optimizer="1"   eaccelerator.check_mtime="1"   是不是生效了,您要查看 /home/eaccelerator 目录中,当Apache服务器启动了,你随便点几个页面,如果在这个目录中,出现文件了。那就是生效了。如果没任何文件,就要找原因了 ……   这两个配置文件,是不是管用。要你自己根据情况来修改。   # mkdir /home/eaccelerator   # chmod 777 /home/eaccelerator   注:创建缓存目录池,权限是777 验证   等这一切完成后,就要重启Apache服务器,如果没弹出什么错误,大多是正确的。查看一下缓存池,点几个页面,就知道是不是管用了。好像是比较简单。   验证安装是否完成(两种方法)   1、打开命令行窗口,进入PHP安装目录,执行命令php -v,并查看命令结果。   E:\php >php.exe -v   PHP 5.2.10 (cli) (built: Jun 17 2009 16:16:57)   Copyright (c) 1997-2009 The PHP Group   Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies   with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator   with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technol   ogies   with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies   则配置正确。   2、创建一个php文件,内容如下:   <?php   phpinfo();   ?>   启动PHP并访问该网页,查看其中的Zend Engine部分的信息,应该与上边命令行的结果一样,则配置正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值