You are not logged in.
Pages: 1
Hi guys,
I installed a fresh copy of Arch Linux on my system and apart from stable kernel I am also using linux-amd-staging kernel from the AUR (https://aur.archlinux.org/packages/linu … m-next-git)
Now, whenever there is an update and the kernel has to be recompiled, the process takes between 15-20 minutes. The internet seems to indicate this processor should be able to do it much much faster. I have ccache enabled and installed.
My /etc/make.conf below. Any idea what could be (if anything) the problem? I am using a samsung 970 NVM, 32GB RAM and a vega 64.
#!/hint/bash
#
# /etc/makepkg.conf
#
#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/wget
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr'
'git::git'
'hg::mercurial'
'svn::subversion')
#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="x86_64"
CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags
CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j$(nproc)"
#-- Debugging flags
DEBUG_CFLAGS="-g -fvar-tracking-assignments"
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
# A negated environment option will do the opposite of the comments below.
#
#-- distcc: Use the Distributed C/C++/ObjC compiler
#-- color: Colorize output messages
#-- ccache: Use ccache to cache compilation
#-- check: Run the check() function if present in the PKGBUILD
#-- sign: Generate PGP signature file
#
BUILDENV=(!distcc color ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg
#########################################################################
# GLOBAL PACKAGE OPTIONS
# These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc directories specified by DOC_DIRS
#-- libtool: Leave libtool (.la) files in packages
#-- staticlibs: Leave static library (.a) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Log files: specify a fixed directory where all log files will be placed
#LOGDEST=/home/makepkglogs
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#-- Specify a key to use for package signing
#GPGKEY=""
#########################################################################
# COMPRESSION DEFAULTS
#########################################################################
#
COMPRESSGZ=(pigz -c -f -n)
COMPRESSBZ2=(pbzip2 -c -f)
COMPRESSXZ=(xz -c -z - --threads=0)
COMPRESSZST=(zstd -c -z -q - --threads=0)
COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f)
COMPRESSLZ4=(lz4 -q)
COMPRESSLZ=(lzip -c -f)
#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
PKGEXT='.pkg.tar.xz'
SRCEXT='.src.tar.gz'Last edited by Bednar (2020-02-28 21:08:55)
Offline
No, that 15 to 20 minute time you're seeing is the correct one. That's how long things take (I have a 2700X here). There might be a bit too much useless stuff enabled in the Arch and mainline kernel configs. I remember that the clear-linux kernel config compiles a good bit faster and is done in something like 10 minutes.
I'm not sure about ccache. I got the impression that it might actually slow things down. The hit rate for its cache is just 30% (but I'm not sure if I'm right with this number). Maybe for the 70% rest of objects that still have to go through gcc, using ccache loses a bit of time, and then the end result doesn't actually end up being improved?
I'd recommend to put the kernel package you are using into the "IgnorePkg" line of your pacman.conf. Your AUR helper will then (probably) ignore it when updating. You can then decide when you want to compile and update it yourself.
What you might want to look into is a service named "modprobed-db". It will record what kernel modules are in use on your machine. You can tweak the PKGBUILD of the kernel package to use that list. This will make the kernel package compile very fast because it won't compile the normal 7000 or so kernel modules, instead just the 200 or so you are actually using. Downside is that you might not have a module available when you want to try something new and you'll have to reboot into the normal Arch kernel. An ArchWiki article explaining things is here:
https://wiki.archlinux.org/index.php/Modprobed-db
The only thing I see in your makepkg.conf is, you could switch the PKGEXT line to '.pkg.tar.zst' for very fast compression, or if you want to keep using xz then maybe add a "-1" to the COMPRESSXZ line to speed that up.
Offline
With future kernels it should be better: https://bbs.archlinux.org/viewtopic.php?id=252798
Offline
Do you have another machine or machines on your LAN? If so try distcc which speeds up compilation quite a bit. As an aside, consider building in tmpfs to avoid all those writes to your SSD... you have 32G after all.
Last edited by graysky (2020-02-28 22:32:11)
Offline
Are you running the packages prepare function before the second build I would expect that to prevent ccache from being able to reuse any files.
Offline
In addition to the tips mentioned above, I will add one more. Build a fast compiler.
https://gcc.gnu.org/install/build.html
make -j$(nproc) profiledbootstrapadditionally with LTO
./configure ... --with-build-config=bootstrap-ltoor BUILD_CONFIG=bootstrap-lto
I guarantee 25% shorter compilation time. It's like you overclock your processor significantly.
Offline
Pages: 1