!pbdtvoHxUGLhcEvnlu:nixos.org

Exotic Nix Targets

340 Members
106 Servers

Load older messages


SenderMessageTime
10 Mar 2026
@opna2608:matrix.orgPunai've only ever tested 4K, cus that's what Debian uses05:37:21
@amaan:amaanq.comamaanyeah i ran into issues building jemalloc which is why i submitted that patch, tho it seems to vary by distro i guess, tbf I just got access to this machine today and figured I'd build a nix iso on it to try it out05:37:33
@opna2608:matrix.orgPunaahhh oki!05:37:48
@opna2608:matrix.orgPunado you know how the machine's firmware looks for bootable media? i have some PRs and a branch in my fork that works for making a PowerMac (and maybe CHRP?) compatible ISO, but i don't have access to anything newer than ~ POWER4.05:38:57
@opna2608:matrix.orgPunathe branch in question, if you wanna give that a try: https://github.com/OPNA2608/nixpkgs/tree/wip/ppc64-installer05:42:12
@amaan:amaanq.comamaani guess gentoo, suse, and fedora also use 64kb page sizes: https://github.com/gentoo/genkernel/blob/master/arch/ppc64/arch-config#L26 https://github.com/openSUSE/kernel-source/blob/master/config/ppc64le/default#L559 https://src.fedoraproject.org/rpms/kernel/blob/rawhide/f/kernel-ppc64le-fedora.config#_5366 also in the ppc kconfig it defaults to 64kb in certain scenarios interestingly - https://github.com/torvalds/linux/blob/master/arch/powerpc/Kconfig#L85305:42:52
@amaan:amaanq.comamaan i am not sure tbh, i just found a zulip that offers free machines to ssh to and dev on tho...they are power8 btw 05:43:24
@amaan:amaanq.comamaanmy plan was to build the iso then ask the owner to install it in a dedicated vm to play around on05:43:41
@opna2608:matrix.orgPuna

hmm… prolly makes sense to default to the 64K-compatible setting for jemalloc then, just to cover more systems. as said, the 64K setting should work on 4K systems? it might just not be optimal (at least according to an upstream issue on raising the aarch64 default from 4K to 64K).

a function argument to override that would prolly still be nice though - could be interesting for someone measuring the performance impact and deciding to optimise for their system via an overlay.

05:52:16
@amaan:amaanq.comamaanyeah i think providing a function argument makes sense05:53:10
@opna2608:matrix.orgPuna
diff --git a/pkgs/by-name/je/jemalloc/package.nix b/pkgs/by-name/je/jemalloc/package.nix
index 202195c152db..88e7b776b28d 100644
--- a/pkgs/by-name/je/jemalloc/package.nix
+++ b/pkgs/by-name/je/jemalloc/package.nix
@@ -13,6 +13,18 @@
   # compatibility.
   stripPrefix ? stdenv.hostPlatform.isDarwin,
   disableInitExecTls ? false,
+  # The upstream default is dependent on the builders' page size
+  # https://github.com/jemalloc/jemalloc/issues/467
+  # https://sources.debian.org/src/jemalloc/5.3.0-3/debian/rules/
+  pageSizeLog2 ?
+    if
+      (
+        stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isLoongArch64 || stdenv.hostPlatform.isPower64
+      )
+    then
+      16
+    else
+      12,
 }:
 
 stdenv.mkDerivation (finalAttrs: {
@@ -46,21 +58,11 @@ stdenv.mkDerivation (finalAttrs: {
   configureFlags = [
     "--with-version=${lib.versions.majorMinor finalAttrs.version}.0-0-g${finalAttrs.src.rev}"
     "--with-lg-vaddr=${with stdenv.hostPlatform; toString (if isILP32 then 32 else parsed.cpu.bits)}"
+    (lib.strings.withFeatureAs true "lg-page" (toString pageSizeLog2))
   ]
   # see the comment on stripPrefix
   ++ lib.optional stripPrefix "--with-jemalloc-prefix="
   ++ lib.optional disableInitExecTls "--disable-initial-exec-tls"
-  # The upstream default is dependent on the builders' page size
-  # https://github.com/jemalloc/jemalloc/issues/467
-  # https://sources.debian.org/src/jemalloc/5.3.0-3/debian/rules/
-  ++ [
-    (
-      if (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isLoongArch64) then
-        "--with-lg-page=16"
-      else
-        "--with-lg-page=12"
-    )
-  ]
   # See https://github.com/jemalloc/jemalloc/issues/1997
   # Using a value of 48 should work on both emulated and native x86_64-darwin.
   ++ lib.optional (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) "--with-lg-vaddr=48";

ig

06:02:19
@opna2608:matrix.orgPuna with the isPower64 addition in a separate commit, just to separate that abit more cleanly 06:03:55
@amaan:amaanq.comamaanwould you prefer that to be before or after the configurable page size?06:04:35
@opna2608:matrix.orgPunadoesn't really matter i think06:04:58
@amaan:amaanq.comamaan i was thinking exposing just "pageSize" would be less of a cognitive burden on users 06:05:11
@amaan:amaanq.comamaanand just adding a simple mapping06:05:23
@opna2608:matrix.orgPunashould be fine as well06:08:11
@amaan:amaanq.comamaancool, just updated the pr06:14:34
@opna2608:matrix.orgPuna

if we reject non-int values for pageSizeKiB with an assert + informative message, then supplying an unsupported number actually displays the supported options on my end (Lix)

       error: attribute '"32"' missing
       at /home/puna/Development/nixpkgs/pkgs/by-name/je/jemalloc/package.nix:76:10:
           75|         }
           76|         ."${toString pageSizeKiB}"
             |          ^
           77|     }"

       note: trace involved the following derivations:
       derivation 'jemalloc-5.3.0-unstable-2025-09-12'

       Did you mean one of 16, 4 or 64?

maybe useful, prolly overkill. thoughts?

06:26:57
@opna2608:matrix.orgPuna *

if we reject non-int values for pageSizeKiB with an assert + informative message at the start, then supplying an unsupported number actually displays the supported options on my end (Lix)

       error: attribute '"32"' missing
       at /home/puna/Development/nixpkgs/pkgs/by-name/je/jemalloc/package.nix:76:10:
           75|         }
           76|         ."${toString pageSizeKiB}"
             |          ^
           77|     }"

       note: trace involved the following derivations:
       derivation 'jemalloc-5.3.0-unstable-2025-09-12'

       Did you mean one of 16, 4 or 64?

maybe useful, prolly overkill. thoughts?

06:27:06
@amaan:amaanq.comamaanhuh i already get that w/o an assert though06:29:50
@amaan:amaanq.comamaan if i pass in 32, for example:

error:
       … while evaluating list element at index 2

       … while calling the 'toString' builtin
         at /home/amaanq/projects/nix/nixpkgs/pkgs/by-name/je/jemalloc/package.nix:70:7:
           69|     "--with-lg-page=${
           70|       toString
             |       ^
           71|         {

       error: attribute '"32"' missing
       at /home/amaanq/projects/nix/nixpkgs/pkgs/by-name/je/jemalloc/package.nix:71:9:
           70|       toString
           71|         {
             |         ^
           72|           "4" = 12;
       Did you mean one of 16, 4 or 64?
06:30:14
@opna2608:matrix.orgPunayes, but if you pass i.e. "bla", it doesn't provide any suggestions anymore06:31:12
@amaan:amaanq.comamaanoh yeah, that's a good point06:31:27
@opna2608:matrix.orgPuna

oh, way to go is prolly

let
  pageSizeMap = { 
    "4" = 12; 
    "16" = 14; 
    "64" = 16; 
  };  
in
assert lib.asserts.assertOneOf "pageSizeKiB" (toString pageSizeKiB) (
  builtins.attrNames pageSizeMap
);
06:32:23
@amaan:amaanq.comamaan i guess this works?

assert lib.asserts.assertMsg (builtins.isInt pageSizeKiB)
  "jemalloc: pageSizeKiB must be an integer (one of 4, 16, or 64), got: ${toString pageSizeKiB}";
06:32:41
@amaan:amaanq.comamaan i guess this works?

assert lib.asserts.assertMsg (builtins.isInt pageSizeKiB)
  "jemalloc: pageSizeKiB must be an integer (one of 4, 16, or 64), got: ${toString pageSizeKiB}";
06:32:45
@amaan:amaanq.comamaantho maybe yours is better06:32:54
@opna2608:matrix.orgPuna
       error: pageSizeKiB must be one of [
         "16"
         "4"
         "64"
       ], but is: "bla"
06:33:02
@amaan:amaanq.comamaanyea that is nice06:33:11

Show newer messages


Back to Room ListRoom Version: 6