!pbdtvoHxUGLhcEvnlu:nixos.org

Exotic Nix Targets

326 Members
98 Servers

Load older messages


SenderMessageTime
10 Mar 2026
@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
@amaan:amaanq.comamaan though, not a fan of how it renders the list on multiple lines in this case 06:35:27
@amaan:amaanq.comamaan
let
  pageSizeMap = {
    "4" = 12;
    "16" = 14;
    "64" = 16;
  };
in
assert lib.asserts.assertMsg
  (builtins.hasAttr (toString pageSizeKiB) pageSizeMap)
  "jemalloc: pageSizeKiB must be one of 4, 16, or 64, but is: ${toString pageSizeKiB}";

error: jemalloc: pageSizeKiB must be one of 4, 16, or 64, but is: bla

thoughts on this?
06:36:20
@opna2608:matrix.orgPunarequires manual updates of the supported values in the string06:37:16
@opna2608:matrix.orgPuna(if another supported size is ever added, that is)06:37:49
@amaan:amaanq.comamaan yeah true;

let
  pageSizeMap = {
    "4" = 12;
    "16" = 14;
    "64" = 16;
  };
in
assert lib.asserts.assertMsg (builtins.hasAttr (toString pageSizeKiB) pageSizeMap)
  "jemalloc: pageSizeKiB must be one of ${lib.concatStringsSep ", " (builtins.attrNames pageSizeMap)}, but is: ${toString pageSizeKiB}";

is a bit better then
06:38:14

Show newer messages


Back to Room ListRoom Version: 6