当前位置:网站首页>Use GCC's PGO (profile guided optimization) to optimize the entire system
Use GCC's PGO (profile guided optimization) to optimize the entire system
2022-06-12 17:08:00 【Tianya road Linux】
inspire
It comes from the experiment made by megahard on its own server , No more nonsense, just go to the picture above

Microsoft's approach

Microsoft's approach

You can see the use of PGO The optimized kernel still has some performance improvements
zero 、 Premise
Want to use PGO Compile optimization , Yours gcc The compiler needs to turn on support pgo characteristic ,gentoo The system is as follows
sudo vim /etc/portage/make.conf:
USE="pgo"
sudo emerge gccOne 、 kernel kernel The optimization of the
cd /usr/src/linux
sudo make clean
sudo make menuconfig:
CONFIG_DEBUG_FS=y
CONFIG_GCOV_KERNEL=y
CONFIG_GCOV_PROFILE_ALL=y
sudo make KCFLAGS=“-fprofile-dir=/kernel-pgo/”
Final installation kernel And update the grub
sudo make install
sudo grub-config -o /boot/grub/grub.cfg
Restart the system
sudo rebootThen run the system under the new kernel for a while , Open various software such as browser 、mpv player 、cmus、 office 、 Compiling software 、 download 、 game 、steam wait ( I will run through all the software and scenarios of the daily system ), So that the kernel can collect enough profile data (gcov data )
# notes : Open the CONFIG_DEBUG_FS=y、CONFIG_GCOV_KERNEL=y Characteristic kernel Performance will be significantly reduced , But this pair of collections is used for PGO Optimization of the profile Data is necessary
kernel PGO Optimization of the profile The data is stored in /sys/kernel/debug/gcov/kernel-pgo/ Under the table of contents , There are many small files , The format is similar to "#usr#src#linux#arch#x86#crypto#aesni-intel_glue.gcda"
sudo cp -r /sys/kernel/debug/gcov/kernel-pgo/ /
cd /usr/src/linux
sudo make clean
sudo make menuconfig:
CONFIG_DEBUG_FS=n
CONFIG_GCOV_KERNEL=n
CONFIG_GCOV_PROFILE_ALL=n
sudo make KCFLAGS=“-fprofile-use -fprofile-dir=/kernel-pgo/ -fprofile-correction -Wno-coverage-mismatch -Wno-error=coverage-mismatch”
Final installation kernel And update the grub
sudo make install
sudo grub-config -o /boot/grub/grub.cfg
Restart the system
sudo rebootOkay , Now you can experience PGO What is the performance of the optimized kernel , Open the game to test fps Well , Is it higher than the original kernel frame number ?
Add : Use Clang Of LTO Optimize compilation kernel
since kernel 5.12 The start kernel allows lto To optimize the , However, it is limited to support clang+llvm compiler , I won't support it gcc, So you have to install it first clang and llvm, as well as lld The linker . The steps are simple ——
sudo make LLVM=1 LLVM_IAS=1 menuconfig:
CONFIG_DEBUG_FS=n
CONFIG_GCOV_KERNEL=n
CONFIG_GCOV_PROFILE_ALL=n
CONFIG_LTO_CLANG_FULL=y
then
sudo make LLVM=1 LLVM_IAS=1that will do .
# notes : at present clang Kernel is not supported gcov Optimize , So the above gcc Of pgo and clang Of lto You can only choose one of the two optimization schemes .
If you don't think the regular kernel can satisfy you , You can also try compiling it yourself xanmod The kernel project , Compared with the conventional kernel, it has done a lot of update optimization ( For example, open O3 Level compilation optimization )——
https://www.xanmod.org/www.xanmod.org/
# Click... On the web page “tarball” You can download it. xanmod Kernel source package .
Two 、 Of all program software in the whole system PGO Optimize
First you need to turn off portage Two security features of the build system
sudo vim /etc/portage/make.conf:
FEATURES="-sandbox -usersandbox"Then add the following gcc Compile parameters
sudo vim /etc/portage/make.conf:
COMMON_FLAGS="$( Your own original compilation optimization parameters ) -fprofile-generate -fprofile-dir=/portage-pgo/"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
LDFLAGS="${COMMON_FLAGS} -Wl,-O3 -Wl,--as-needed -Wl,--hash-style=gnu -Wl,--sort-common -Wl,--strip-all -ljemalloc -Wl,-ljemalloc"
EMERGE_DEFAULT_OPTS="--with-bdeps=y --ask --deep --verbose=y --load-average --keep-going"
sudo mkdir /portage-pgo/Now start compiling the entire system
sudo emerge -e @worldRestart the system after compilation
sudo rebootThen run the system under the new system for a period of time , Open various software such as browser 、mpv player 、cmus、 office 、 Compiling software 、 download 、 game 、steam wait ( I will run through all the software and scenarios of the daily system , Recommended 1-2 God ), To collect enough comprehensive profile data (gcov data ), Each program PGO Optimization of the profile The data is stored in /portage-pgo/ Under the table of contents
# notes : Open the -fprofile-generate The program performance of the feature will decrease significantly , But this pair of collections is used for PGO Optimization of the profile Data is necessary
Restart the system
sudo rebootAnd then modify gcc Compile parameters
sudo vim /etc/portage/make.conf:
COMMON_FLAGS="$( Your own original compilation optimization parameters ) -fprofile-use -fprofile-dir=/portage-pgo/ -fprofile-correction -Wno-error=missing-profile"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
LDFLAGS="${COMMON_FLAGS} -Wl,-O3 -Wl,--as-needed -Wl,--hash-style=gnu -Wl,--sort-common -Wl,--strip-all -ljemalloc -Wl,-ljemalloc"Compile the entire system again to use PGO Optimize ( Turn on pgo After optimization, the compilation speed will be greatly improved , It won't be as long as the last time )
sudo emerge -e @worldRestart the system after compilation
sudo rebootOkay , Now you can experience PGO Comprehensive compilation optimization gentoo The system , Is it the ultimate performance ?
Use GCC Of PGO(Profile-guided Optimization) Optimize the whole system - You know
边栏推荐
- selenium元素定位
- R语言使用epiDisplay包的tabpct函数生成二维列联表并使用马赛克图可视化列联表(二维列联表、边际频数、以及按行、按列的比例)、自定义设置ylab参数设置Y轴的轴标签文本(y axis)
- Download PHP source code of leaf sharing station
- (四)Golang运算符
- 图片在线收款发货系统源码
- 卖疯了的临期产品:超低价、大混战与新希望
- 使用ubantu时,遇见的一些小毛病和解决方法
- 2022-2028 global press dehydrator industry research and trend analysis report
- 男神女神投票源码 v5.5.21 投票源码
- R language uses ggplot2 to visualize the density graph (curve) of specific data columns in dataframe data, and uses Xlim parameter to specify the range of X axis
猜你喜欢

Cloud development kunkun chicken music box wechat applet source code

如何查看、修改和删除SSH

Extract the new Chinese cross modal benchmark zero from 5billion pictures and texts, and Qihoo 360's new pre training framework surpasses many SOTAS

Selenium element positioning

丁总路由器设置以及401联网

Qiushengchang: Practice of oppo commercial data system construction

How to play the map with key as assertion

Advanced Qt development: a preliminary study QT + OpenGL

Structural requirement analysis of software engineering student information management system

How to use the official documents of pytorch and torchvision
随机推荐
怎么在公司里面做好测试工作(做好测试工作)
The R language uses the tablestack function of epidisplay package to generate statistical analysis tables based on grouped variables (including descriptive statistical analysis, hypothesis test, diffe
Uniapp壁纸小程序源码/双端微信抖音小程序源码
卖疯了的临期产品:超低价、大混战与新希望
[MySQL] Cartesian product - multi table query (detailed explanation)
2080 virtual machine login command
\begin{algorithm} 笔记
R language uses the sum function of epidisplay package to calculate the descriptive statistical summary information of the specified variables in dataframe under different grouped variables and visual
并发三色标记法
价值超高的CA证书解析
Kill program errors in the cradle with spotbugs
C#期末复习编程题(老师猜的)
Crazy temporary products: super low price, big scuffle and new hope
云开发坤坤鸡乐盒微信小程序源码
idea如何设置导包不带*号
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
rolabelImg的安装使用
Idea displays services on the console to uniformly manage all jetty services,
Qt开发高级进阶:初探qt + opengl
Demande de doctorat | xinchao Wang, Université nationale de Singapour