当前位置:网站首页>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
边栏推荐
- Where is it safer to open an account for thermal coal futures? How much is the thermal coal futures deposit?
- (六)控制语句if/else switch
- STL -- function object
- Fiddler抓包几种常用功能介绍(停止抓包、清空会话窗内容、过滤请求、解码、设置断点......)
- Unit sshd. service could not be found
- 添加静态路由
- idea如何设置导包不带*号
- 890. find and replace mode / Sword finger offer II 080 Combination with k elements
- 云开发坤坤鸡乐盒微信小程序源码
- Crazy temporary products: super low price, big scuffle and new hope
猜你喜欢

Gerrit+2触发Jenkins任务

rolabelImg的安装使用

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

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

薛定谔的日语学习小程序源码

邱盛昌:OPPO商业化数据体系建设实战

借助SpotBugs将程序错误扼杀在摇篮中

The significance of writing technology blog

redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required

Installation and use of rolabelimg
随机推荐
Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现
Swin Transformer代码讲解
Schrodinger's Japanese learning applet source code
添加静态路由
Record the use of yolov5 to detect rotating targets
薛定谔的日语学习小程序源码
云开发坤坤鸡乐盒微信小程序源码
借助SpotBugs将程序错误扼杀在摇篮中
The R language uses the plot function to visualize the data scatter chart, and uses font The axis parameter specifies that the font type of the axis scale label is italic
CVPR 2022 | 元学习在图像回归任务的表现
布局管理中的sizePolicy的策略问题
Play kubernetes every 5 minutes summary
性能优化之编译优化
Idea displays services on the console to uniformly manage all jetty services,
MySQL transaction introduction and transaction isolation level
Concurrent trichromatic marking
\begin{algorithm} 笔记
\Begin{algorithm} notes
Gerrit触发Jenkins SonarQube扫描
ShardingJDBC 分库分表详解