deps: enable OpenSSL asm support for riscv64#62606
deps: enable OpenSSL asm support for riscv64#62606JamieMagee wants to merge 1 commit intonodejs:mainfrom
Conversation
|
Review requested:
|
|
Have just spent a lot of today trying to unbreak my cross-compile environment but it's now working again. Will do some tests with this (natively and with the cross-compile) and see how it goes but this will be great if we can enable the assembly stuff now. |
|
I encountered a strange OpenSSL compilation problem where it appears that the build system incorrectly fall-backs to x86_64 asm for a native riscv64 build: https://github.com/riscv-forks/node-riscv/actions/runs/24225505014/job/70735319923 I will give this PR a try in my new experimental CI system for riscv64: riscv-forks/node-riscv#1 |
FYI I initially hit that as well when I hadn't included the |
Yeah, that might be expected in a cross-compilation setup. But I find it surprising because I am compiling natively on riscv64. |
|
note: #62629 just landed with OpenSSL update to 3.5.6 |
Interesting - my native build (clang21 with |
428839b to
3359202
Compare
Rebased on top of |
3359202 to
9ad173a
Compare
There was a problem hiding this comment.
Could you also update the GN build recipe to add linux64-riscv64 ?
node/deps/openssl/unofficial.gni
Lines 105 to 115 in a6e8368
I am preparing patches to enable GN built Node.js for riscv64 and this would be necessary.
9ad173a to
5ea800d
Compare
|
@kxxt Done, added |
kxxt
left a comment
There was a problem hiding this comment.
Do we also need to update the following files?
node/deps/openssl/config/include_asm.h.tmpl
Lines 6 to 44 in 7e5e60b
node/deps/openssl/config/include_no-asm.h.tmpl
Lines 6 to 18 in 7e5e60b
sxa
left a comment
There was a problem hiding this comment.
Hmmm I've built with this and if I've tested correctly it doesn't seem to show an improvement on the https tests (run without autocannon). I'd have hoped it would improve that a bit (as it does on x64).
I might also try and compare with a version using the system openssl on my boards to see if that shows any difference but do you have any tests where the results are noticeable?
Move linux64-riscv64 from NO_ASM_ARCHS to ASM_ARCHS in the OpenSSL config Makefile and regenerate the configuration. This adds asm/ and asm_avx2/ config variants alongside the existing no-asm/ variant. When riscv64 was first added to the OpenSSL config in 2021 (nodejs#40063), OpenSSL had no RISC-V assembly support. OpenSSL 3.5.x now ships 17 perlasm generators covering AES (zvkned, zvkb, zkn), SHA-256/512 (zvknha, zvknhb), GHASH/GCM (zvkg, zvbc), ChaCha (v, zbb), SM3 (zvksh), SM4 (zvksed), and CPUID detection. Runtime capability detection via riscvcap.c and the Linux hwprobe syscall ensures safe fallback to generic C code on hardware without these extensions. Also add riscv64 entries to the six asm gypi selector files: openssl_asm.gypi, openssl_asm_avx2.gypi, openssl-cl_asm.gypi, openssl-cl_asm_avx2.gypi, openssl-fips_asm.gypi, and openssl-fips_asm_avx2.gypi. Refs: nodejs/build#4099 Signed-off-by: Jamie Magee <jamie.magee@gmail.com>
5ea800d to
77a251a
Compare
@kxxt Yes, they did need updating. Added
@sxa The asm codepaths for riscv64 in OpenSSL 3.5 are mostly scalar optimizations and AES/SHA intrinsics. The gains are probably more modest than x86 where you get AVX/AES-NI. If you're seeing no difference on HTTPS benchmarks specifically, it might be worth checking |
When riscv64 was added to the OpenSSL config in 2021 (#40063), OpenSSL had no RISC-V assembly at all, so it went into
NO_ASM_ARCHS. OpenSSL 3.5.x now has perlasm generators for AES, SHA-256/512, GHASH/GCM, ChaCha, SM3, SM4, and CPUID. All with runtime extension detection viariscvcap.cand the Linuxhwprobesyscall, so there's no risk on hardware without the crypto extensions.This moves linux64-riscv64 from
NO_ASM_ARCHStoASM_ARCHSin deps/openssl/config/Makefile, regenerates the config (addingasm/andasm_avx2/variants with 16 generated assembly files each), and adds riscv64 entries to the six gypi selector files.Generated with
nix shell nixpkgs#nasm -c make linux64-riscv64in deps/openssl/config/.Refs: nodejs/build#4099