Re: always use runtime checks for CRC-32C instructions - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: always use runtime checks for CRC-32C instructions |
Date | |
Msg-id | 2613682.1698779776@sss.pgh.pa.us Whole thread Raw |
In response to | Re: always use runtime checks for CRC-32C instructions (Nathan Bossart <nathandbossart@gmail.com>) |
Responses |
Re: always use runtime checks for CRC-32C instructions
Re: always use runtime checks for CRC-32C instructions |
List | pgsql-hackers |
Nathan Bossart <nathandbossart@gmail.com> writes: > On Mon, Oct 30, 2023 at 10:36:01PM -0500, Nathan Bossart wrote: >> I tested pg_waldump -z with 50M 65-byte records for the following >> implementations on an ARM system: >> >> * slicing-by-8 : ~3.08s >> * proposed patches applied (runtime check) : ~2.44s >> * only CRC intrinsics implementation compiled : ~2.42s >> * forced inlining : ~2.38s >> >> Avoiding the runtime check produced a 0.8% improvement, and forced inlining >> produced another 1.7% improvement. In comparison, even the runtime check >> implementation produced a 20.8% improvement over the slicing-by-8 one. I find these numbers fairly concerning. If you can see a couple-of-percent slowdown on a macroscopic benchmark like pg_waldump, that implies that the percentage slowdown considering the CRC operation alone is much worse. So there may be other use-cases where we would take a bigger relative hit. > * From my quick scan of a few dozen machines on the buildfarm, it looks > like the runtime checks are already the norm, so the number of systems > that would be subject to a regression from v16 to v17 should be pretty > small, in theory. And this regression seems to be on the order of 1% > based on the numbers above. I did a more thorough scrape of the buildfarm results. Of 161 animals currently reporting configure output on HEAD, we have 2 ARMv8 CRC instructions 36 ARMv8 CRC instructions with runtime check 2 LoongArch CRCC instructions 2 SSE 4.2 52 SSE 4.2 with runtime check 67 slicing-by-8 While that'd seem to support your conclusion, the two using ARM CRC *without* a runtime check are my Apple M1 Mac animals (sifaka/indri); and I see the same selection on my laptop. So one platform where we'd clearly be taking a regression is M-series Macs; that's a pretty popular platform. The two using SSE without a check are prion and tayra. I notice those are using gcc 11; so perhaps the default cflags have changed to include -msse4.2 recently? I couldn't see much other pattern though. (Scraping results attached in case anybody wants to look.) Really this just reinforces my concern that doing a runtime check all the time is on the wrong side of history. I grant that we've got to do that for anything where the availability of the instruction is really in serious question, but I'm not very convinced that that's a majority situation on popular platforms. regards, tom lane alimoche,ARMv8 CRC instructions with runtime check,aarch64,gcc (Debian 8.3.0-6) 8.3.0 batta,ARMv8 CRC instructions with runtime check,aarch64,gcc (Debian 10.2.1-6) 10.2.1 20210110 blackneck,ARMv8 CRC instructions with runtime check,aarch64,Debian clang version 13.0.1-6~deb10u4 boiga,ARMv8 CRC instructions with runtime check,aarch64,clang version 14.0.5 (Fedora 14.0.5-2.fc36) broadbill,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-18) bulbul,ARMv8 CRC instructions with runtime check,aarch64,clang version 15.0.7 (Red Hat 15.0.7-1.module_el8.8.0+3466+dfcbc058) corzo,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-4) desman,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 13.2.1 20230728 (Red Hat 13.2.1-1) eelpout,ARMv8 CRC instructions with runtime check,aarch64,gcc (Debian 10.2.1-6) 10.2.1 20210110 gokiburi,ARMv8 CRC instructions with runtime check,aarch64,Debian clang version 11.0.1-2 hachi,ARMv8 CRC instructions with runtime check,aarch64,Debian clang version 11.0.1-2 jackdaw,ARMv8 CRC instructions with runtime check,aarch64,gcc (Debian 10.2.1-6) 10.2.1 20210110 massasauga,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-17) motmot,ARMv8 CRC instructions with runtime check,aarch64,clang version 16.0.6 (Fedora 16.0.6-2.fc38) oystercatcher,ARMv8 CRC instructions with runtime check,aarch64,clang version 15.0.7 (Red Hat 15.0.7-2.el9) potoo,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) rudd,ARMv8 CRC instructions with runtime check,aarch64,Ubuntu clang version 12.0.0-3ubuntu1~20.04.5 shiner,ARMv8 CRC instructions with runtime check,aarch64,Ubuntu clang version 15.0.7 snakefly,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-17) splitfin,ARMv8 CRC instructions with runtime check,aarch64,gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 tanager,ARMv8 CRC instructions with runtime check,aarch64,clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final) turbot,ARMv8 CRC instructions with runtime check,aarch64,gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 vimba,ARMv8 CRC instructions with runtime check,aarch64,clang version 10.0.0-4ubuntu1~18.04.2 whinchat,ARMv8 CRC instructions with runtime check,aarch64,Debian clang version 13.0.1-6~deb11u1 whiting,ARMv8 CRC instructions with runtime check,aarch64,gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0 widowbird,ARMv8 CRC instructions with runtime check,aarch64,gcc (Debian 10.2.1-6) 10.2.1 20210110 ziege,ARMv8 CRC instructions with runtime check,aarch64,gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21) arowana,slicing-by-8,aarch64,gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) parula,ARMv8 CRC instructions with runtime check,aarch64/graviton3/c7g.2xl,gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-17) elver,SSE 4.2 with runtime check,amd64,FreeBSD clang version 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c) gombessa,SSE 4.2 with runtime check,amd64,OpenBSD clang version 10.0.1 hake,SSE 4.2 with runtime check,amd64,gcc (OpenIndiana 9.3.0-oi-4) 9.3.0 mule,SSE 4.2 with runtime check,amd64,gcc (Debian 12.2.0-14) 12.2.0 plover,SSE 4.2 with runtime check,amd64,OpenBSD clang version 10.0.1 pollock,SSE 4.2 with runtime check,amd64,gcc (OmniOS 151046/12.2.0-il-0) 12.2.0 indri,ARMv8 CRC instructions,arm64,Apple clang version 15.0.0 (clang-1500.0.40.1) sifaka,ARMv8 CRC instructions,arm64,Apple clang version 15.0.0 (clang-1500.0.40.1) dikkop,ARMv8 CRC instructions with runtime check,arm64,FreeBSD clang version 16.0.6 (https://github.com/llvm/llvm-project.gitllvmorg-16.0.6-0-g7cbf1a259152) opaleye,ARMv8 CRC instructions with runtime check,arm64,FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.gitllvmorg-13.0.0-0-gd7b669b3a303) chipmunk,ARMv8 CRC instructions with runtime check,armv6l,gcc (Raspbian 4.9.2-10+deb8u2) 4.9.2 grison,ARMv8 CRC instructions with runtime check,armv7,gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516 gull,ARMv8 CRC instructions with runtime check,armv7,clang version 13.0.0 (http://git.linaro.org/toolchain/jenkins-scripts.gitd04b0fafc2d906fd9b2e8e55efb35c9cf7114e68) mereswine,ARMv8 CRC instructions with runtime check,armv7,gcc (Debian 10.2.1-6) 10.2.1 20210110 dangomushi,ARMv8 CRC instructions with runtime check,armv7l,clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final) turaco,ARMv8 CRC instructions with runtime check,armv7l,gcc (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110 chickadee,slicing-by-8,hppa,gcc (nb1 20220722) 10.4.0 lapwing,SSE 4.2 with runtime check,i686,gcc (Debian 4.7.2-5) 4.7.2 cisticola,LoongArch CRCC instructions,loongarch64,gcc (GCC) 8.3.0 20190222 (Loongson 8.3.0-35 vec) nuthatch,LoongArch CRCC instructions,loongarch64,gcc (GCC) 13.2.1 20230906 mamba,slicing-by-8,macppc,cc (nb1 20220722) 10.4.0 frogfish,slicing-by-8,mips64eb; -mabi=64,gcc (Debian 4.6.3-14) 4.6.3 topminnow,slicing-by-8,mips64el; -mabi=32,gcc (Debian 4.9.2-10+deb8u1) 4.9.2 hornet,slicing-by-8,ppc64 (power7),xlc_r -D_LARGE_FILES=1 mandrill,slicing-by-8,ppc64 (power7),xlc_r -D_LARGE_FILES=1 -DRANDOMIZE_ALLOCATED_MEMORY sungazer,slicing-by-8,ppc64 (power7),gcc (GCC) 8.3.0 tern,slicing-by-8,ppc64 (power7),gcc (GCC) 8.3.0 boa,slicing-by-8,ppc64 (power8),gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) chub,slicing-by-8,ppc64 (power8),gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) hoverfly,slicing-by-8,ppc64 (power8),/opt/IBM/xlc/16.1.0/bin/xlc_r -D_LARGE_FILES=1 -DRANDOMIZE_ALLOCATED_MEMORY batfish,slicing-by-8,ppc64le,clang version 5.0.0-3~16.04.1 (tags/RELEASE_500/final) clam,slicing-by-8,ppc64le,"gcc (GCC) 5.2.1 20151016 (Advance-Toolchain-) [ibm/gcc-5-branch, revision: 229493 merged fromgcc-5-branch, revision 228917]" cuon,slicing-by-8,ppc64le,gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609 dhole,slicing-by-8,ppc64le,gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) urocryon,slicing-by-8,ppc64le,gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 vulpes,slicing-by-8,ppc64le,gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6) wobbegong,slicing-by-8,ppc64le,clang version 5.0.2 (tags/RELEASE_502/final) ayu,slicing-by-8,ppc64le (power8),clang version 4.0.1-10~deb9u2 (tags/RELEASE_401/final) babbler,slicing-by-8,ppc64le (power9),gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-18) bonito,slicing-by-8,ppc64le (power9),gcc (GCC) 8.3.1 20190223 (Red Hat 8.3.1-2) buri,slicing-by-8,ppc64le (power9),gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) cascabel,slicing-by-8,ppc64le (power9),gcc (Debian 10.2.1-6) 10.2.1 20210110 cavefish,slicing-by-8,ppc64le (power9),gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 chevrotain,slicing-by-8,ppc64le (power9),Debian clang version 13.0.1-6~deb11u1 chimaera,slicing-by-8,ppc64le (power9),gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 demoiselle,slicing-by-8,ppc64le (power9),clang version 5.0.1 (tags/RELEASE_501/final 312548) elasmobranch,slicing-by-8,ppc64le (power9),gcc (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812] habu,slicing-by-8,ppc64le (power9),gcc (GCC) 13.2.1 20230728 (Red Hat 13.2.1-1) kingsnake,slicing-by-8,ppc64le (power9),clang version 16.0.6 (Fedora 16.0.6-3.fc38) krait,slicing-by-8,ppc64le (power9),gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21) lancehead,slicing-by-8,ppc64le (power9),clang version 16.0.6 (Red Hat 16.0.6-2.module_el8+588+6f71ce7b) nicator,slicing-by-8,ppc64le (power9),gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) pytilia,slicing-by-8,ppc64le (power9),clang version 15.0.7 (Red Hat 15.0.7-1.module_el8.8.0+3466+dfcbc058) boomslang,slicing-by-8,riscv64,gcc (Debian 10.2.1-6) 10.2.1 20210110 copperhead,slicing-by-8,riscv64,gcc (Debian 10.2.1-6) 10.2.1 20210110 aracari,slicing-by-8,s390x (z15),clang version 15.0.7 (Red Hat 15.0.7-1.module+el8.8.0+17939+b58878af) branta,slicing-by-8,s390x (z15),gcc-10 (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0 cotinga,slicing-by-8,s390x (z15),clang version 10.0.0-4ubuntu1~18.04.2 lora,slicing-by-8,s390x (z15),gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) mamushi,slicing-by-8,s390x (z15),clang version 15.0.7 (Red Hat 15.0.7-2.el9) perch,slicing-by-8,s390x (z15),gcc-8 (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0 pike,slicing-by-8,s390x (z15),gcc (Debian 10.2.1-6) 10.2.1 20210110 pipit,slicing-by-8,s390x (z15),gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-10) rinkhals,slicing-by-8,s390x (z15),Debian clang version 13.0.1-6~deb11u1 ruddy,slicing-by-8,s390x (z15),gcc-11 (SUSE Linux) 11.2.1 20210816 [revision 056e324ce46a7924b5cf10f61010cf9dd2ca10e9] sarus,slicing-by-8,s390x (z15),Ubuntu clang version 14.0.0-1ubuntu1.1 shelduck,slicing-by-8,s390x (z15),gcc (SUSE Linux) 4.8.5 siskin,slicing-by-8,s390x (z15),gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) urutau,slicing-by-8,s390x (z15),Ubuntu clang version 12.0.0-3ubuntu1~20.04.5 margay,slicing-by-8,sparc,gcc (GCC) 11.2.0 skate,slicing-by-8,sparc,gcc-4.7 (Debian 4.7.2-5) 4.7.2 snapper,slicing-by-8,sparc,gcc-4.7 (Debian 4.7.2-5) 4.7.2 grackle,slicing-by-8,sparc64,gcc (GCC) 12.2.0 ibisbill,slicing-by-8,sparc64,gcc (Debian 8.3.0-6) 8.3.0 kittiwake,slicing-by-8,sparc64,gcc (Debian 8.3.0-6) 8.3.0 mussurana,slicing-by-8,sparc64,gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 tadarida,slicing-by-8,sparc64,gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 thorntail,slicing-by-8,sparc64,gcc-11 (Debian 11.4.0-1) 11.4.0 waxbill,slicing-by-8,sparc64,gcc (Debian 12.3.0-4) 12.3.0 wrasse,slicing-by-8,sparc64,cc: Studio 12.6 Sun C 5.15 SunOS_sparc 152881-01 2018/03/16 morepork,SSE 4.2 with runtime check,x64,OpenBSD clang version 10.0.1 bushmaster,SSE 4.2 with runtime check,x86-64,clang version 17.0.3 (https://github.com/llvm/llvm-project.git 37b79e779f447f1c714af7f907e7a2ec846d1da0) calliphoridae,SSE 4.2 with runtime check,x86-64,gcc (Debian 13.2.0-6) 13.2.0 canebrake,SSE 4.2 with runtime check,x86-64,gcc (Debian 13.2.0-6) 13.2.0 culicidae,SSE 4.2 with runtime check,x86-64,gcc (Debian 13.2.0-6) 13.2.0 grassquit,SSE 4.2 with runtime check,x86-64,gcc-12 (Debian 12.3.0-11) 12.3.0 kestrel,SSE 4.2 with runtime check,x86-64,Debian clang version 13.0.1-11+b2 olingo,SSE 4.2 with runtime check,x86-64,Debian clang version 13.0.1-11+b2 skink,SSE 4.2 with runtime check,x86-64,gcc (Debian 13.2.0-6) 13.2.0 taipan,SSE 4.2 with runtime check,x86-64,gcc (Debian 13.2.0-6) 13.2.0 tamandua,SSE 4.2 with runtime check,x86-64,gcc-12 (Debian 12.3.0-11) 12.3.0 urutu,SSE 4.2 with runtime check,x86-64,clang version 16.0.6 (https://github.com/llvm/llvm-project.git 7cbf1a2591520c2491aa35339f227775f4d3adf6) prion,SSE 4.2,x86_64,gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) tayra,SSE 4.2,x86_64,gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4.3.0.4) alabio,SSE 4.2 with runtime check,x86_64,gcc (Debian 10.2.1-6) 10.2.1 20210110 avocet,SSE 4.2 with runtime check,x86_64,gcc (SUSE Linux) 7.5.0 butterflyfish,SSE 4.2 with runtime check,x86_64,gcc (GCC) 6.3.0 caiman,SSE 4.2 with runtime check,x86_64,gcc (GCC) 13.2.1 20231011 (Red Hat 13.2.1-4) conchuela,SSE 4.2 with runtime check,x86_64,clang version 14.0.6 culpeo,SSE 4.2 with runtime check,x86_64,gcc (Debian 12.2.0-14) 12.2.0 desmoxytes,SSE 4.2 with runtime check,x86_64,gcc (Debian 13.2.0-6) 13.2.0 dragonet,SSE 4.2 with runtime check,x86_64,clang version 3.9.1 flaviventris,SSE 4.2 with runtime check,x86_64,gcc (Debian 20231017-1) 14.0.0 20231017 (experimental) [master r14-4678-gce55521bcd1] guaibasaurus,SSE 4.2 with runtime check,x86_64,gcc (Debian 10.2.1-6) 10.2.1 20210110 hippopotamus,SSE 4.2 with runtime check,x86_64,gcc (SUSE Linux) 7.5.0 idiacanthus,SSE 4.2 with runtime check,x86_64,clang version 5.0.2 jay,SSE 4.2 with runtime check,x86_64,clang version 13.0.1 komodoensis,SSE 4.2 with runtime check,x86_64,gcc (Debian 13.2.0-6) 13.2.0 loach,SSE 4.2 with runtime check,x86_64,clang version 14.0.6 longfin,SSE 4.2 with runtime check,x86_64,Apple clang version 14.0.3 (clang-1403.0.22.14.1) lorikeet,SSE 4.2 with runtime check,x86_64,gcc (GCC) 10.2.0 malleefowl,SSE 4.2 with runtime check,x86_64,gcc (Alpine 11.2.1_git20220219) 11.2.1 20220219 moonjelly,SSE 4.2 with runtime check,x86_64,gcc (GCC) 14.0.0 20230429 (experimental) myna,SSE 4.2 with runtime check,x86_64,gcc (GCC) 7.3.0 peripatus,SSE 4.2 with runtime check,x86_64,FreeBSD clang version 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c) petalura,SSE 4.2 with runtime check,x86_64,clang version 4.0.1 phycodurus,SSE 4.2 with runtime check,x86_64,gcc (Debian 13.2.0-6) 13.2.0 pogona,SSE 4.2 with runtime check,x86_64,gcc (Debian 13.2.0-6) 13.2.0 rhinoceros,SSE 4.2 with runtime check,x86_64,gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) schnauzer,SSE 4.2 with runtime check,x86_64,OpenBSD clang version 13.0.0 seawasp,SSE 4.2 with runtime check,x86_64,clang version 17.0.0 (https://github.com/llvm/llvm-project.git 40222ddcf8f54fe523b2d14ab7005ebf412330f1) serinus,SSE 4.2 with runtime check,x86_64,gcc (Debian 20231017-1) 14.0.0 20231017 (experimental) [master r14-4678-gce55521bcd1] sidewinder,SSE 4.2 with runtime check,x86_64,cc (nb4 20200810) 7.5.0 spurfowl,SSE 4.2 with runtime check,x86_64,gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609 trilobite,SSE 4.2 with runtime check,x86_64,clang version 13.0.1 xenodermus,SSE 4.2 with runtime check,x86_64,clang version 6.0.1 curculio,slicing-by-8,x86_64,gcc (GCC) 4.2.1 20070719 mantid,SSE 4.2 with runtime check,x86_64 (virtualized),gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) blossomcrown,slicing-by-8,,gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 cardinalfish,slicing-by-8,,Debian clang version 14.0.6 cottonmouth,slicing-by-8,,gcc-12 (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0 devario,slicing-by-8,,gcc (Debian 12.2.0-9) 12.2.0
pgsql-hackers by date: