当前位置:网站首页>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
边栏推荐
猜你喜欢

Installation and use of rolabelimg

Modify the configuration of the router connected to your computer. The website is 192.168.1.1

Swin transformer code explanation

redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

有趣的 LD_PRELOAD

RMI, JNDI, LDAP introduction +log4j vulnerability analysis

多种Qt的开发方式,你选择哪种?

Cicada mother talks to rainbow couple: 1.3 billion goods a year, from e-commerce beginners to super goods anchor

Idea how to set the guide package without * sign

Qt开发高级进阶:初探qt + opengl
随机推荐
\begin{algorithm} 笔记
Unit sshd.service could not be found
Latex table online generation
(五)输出和输出
两位新晋Committer的“升级攻略”
JS using RSA encryption and decryption
(六)控制语句if/else switch
Structural requirement analysis of software engineering student information management system
从50亿图文中提取中文跨模态新基准Zero,奇虎360全新预训练框架超越多项SOTA
js 使用Rsa 加密 解密
Nebula's practice of intelligent risk control in akulaku: training and deployment of graph model
Dongfeng Yueda Kia, Tencent advertising and hero League mobile game professional league cooperate to build a new E-sports ecology
The significance of writing technology blog
Picture online collection and delivery system source code
goland变成中文版了怎么修改回英文版
5、Embedding
初识GO语言
大端模式和小端模式的區別
快速入门scrapy爬虫框架
Uniapp wallpaper applet source code / double ended wechat Tiktok applet source code