diff --git a/README.md b/README.md index 89ee16a6..cf5cd532 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,7 @@ Wallpapers: https://github.com/ryan4yin/wallpapers ![desktop](./_img/2026-10-02_niri-noctalia_desktop.webp) -![btop monitoring and system information](./_img/2026-10-01_btop-monitoring-system-info.webp) - -![Helix and AI agents in a terminal workspace](./_img/2026-10-02_helix-ai-agents.webp) +![btop, fastfetch, and llama.cpp serving logs](./_img/2026-10-06_btop-monitoring-system-info.webp) ## Editors / IDE diff --git a/_img/2026-10-01_btop-monitoring-system-info.webp b/_img/2026-10-01_btop-monitoring-system-info.webp deleted file mode 100644 index c05bc6ce..00000000 Binary files a/_img/2026-10-01_btop-monitoring-system-info.webp and /dev/null differ diff --git a/_img/2026-10-02_helix-ai-agents.webp b/_img/2026-10-02_helix-ai-agents.webp deleted file mode 100644 index 38e8f661..00000000 Binary files a/_img/2026-10-02_helix-ai-agents.webp and /dev/null differ diff --git a/_img/2026-10-06_btop-monitoring-system-info.webp b/_img/2026-10-06_btop-monitoring-system-info.webp new file mode 100644 index 00000000..34188509 Binary files /dev/null and b/_img/2026-10-06_btop-monitoring-system-info.webp differ diff --git a/hosts/README.md b/hosts/README.md index 22af586a..c4ae85bd 100644 --- a/hosts/README.md +++ b/hosts/README.md @@ -10,17 +10,30 @@ This directory contains all host-specific configurations for my NixOS and macOS Named after characters from "Oshi no Ko": -| Host | Platform | Hardware | Purpose | Status | -| ------------ | --------------- | --------------------- | --------------------- | ----------- | -| `ai` | NixOS | i5-13600KF + RTX 4090 | Gaming & Daily Use | ✅ Active | -| `aquamarine` | NixOS (libvirt) | Virtual | Monitoring & Services | ⚪ Not Used | -| `kana` | NixOS (libvirt) | Virtual | Run AI Agents | ✅ Active | -| `ruby` | NixOS (libvirt) | Virtual | Run AI Agents | ✅ Active | -| `akane` | NixOS (aarch64) | Virtual (UTM) | aarch64 test VM | ✅ Active | +| Host | Platform | Hardware | Purpose | Status | +| ------------ | --------------- | --------------------------------------- | --------------------- | ----------- | +| `ai` | NixOS | Ultra 7 270K Plus + RTX 4090, 128G DDR5 | Gaming & Daily Use | ✅ Active | +| `aquamarine` | NixOS (libvirt) | Virtual | Monitoring & Services | ⚪ Not Used | +| `kana` | NixOS (libvirt) | Virtual | Run AI Agents | ✅ Active | +| `ruby` | NixOS (libvirt) | Virtual | Run AI Agents | ✅ Active | +| `akane` | NixOS (aarch64) | Virtual (UTM) | aarch64 test VM | ✅ Active | `aquamarine` is retired; its services now run directly on `youko` (`hosts/12kingdoms-youko/homelab-services/`). +On 2026-04-27 `ai` was rebuilt on a new platform. The MSI board and i5-13600KF it was added with in +2023-05 (the host was originally named `msi-rtx4090`) gave way to the Colorful CVN Z890 ARK FROZEN + +Intel Core Ultra 7 270K Plus. The traces in the history are PR #257 (the NIC moved from `enp5s0` to +`enp130s0`) and PR #258 (Niri output names renamed, `hardware-intel.nix` added with the Arrow Lake +NPU, kernel moved to `linuxPackages_latest`). The 2×48G DDR5 kit was already in place at that point; +the repo has no record of when it went in. + +On 2026-10-06 `ai` grew from 2×48G (96G) to 2×48G + 2×16G (128G) across all four DIMM slots, at +DDR5-4800 with XMP off — the only stable setting with four DIMMs on this board. The 16G pair must be +installed first; with the 48G pair in first the board does not POST. The bring-up order, the BIOS +settings, the stress-test recipe, and how to recover a board that will not POST are in +[`idols-ai/MIXED-MEMORY.md`](./idols-ai/MIXED-MEMORY.md). + #### `darwin` - macOS Systems Named after characters from "Frieren: Beyond Journey's End": diff --git a/hosts/idols-ai/MIXED-MEMORY.md b/hosts/idols-ai/MIXED-MEMORY.md index 9b9d016c..bc290892 100644 --- a/hosts/idols-ai/MIXED-MEMORY.md +++ b/hosts/idols-ai/MIXED-MEMORY.md @@ -22,18 +22,22 @@ Notes from adding a 2×16G kit to the existing 2×48G kit on this desktop. | JUHOR | 2×48G | DDR5-5600 (PC5-44800) | CL46-45-45-90 | 1.25 V | 2R | `JHE5600U4648JG` | | GLOWY | 2×16G | DDR5-6400 (PC5-51200) | CL32-38-38-90 | 1.35 V | 1R | `VGM5UH64C32AG-DTACW` | +- When they went in: the 2×16G GLOWY kit was added 2026-10-06; the 2×48G JUHOR kit was already in + place when the platform was rebuilt 2026-04-27 (before that the host was an MSI LGA1700 board with + an i5-13600KF — see the `hosts/README.md` inventory notes). - Channel A/B, DIMM0 = 48G (2R), DIMM1 = 16G (1R) → 64G per channel, 128G total. - With XMP off both kits run at JEDEC DDR5-4800; the board exposes one XMP profile per kit - (`XMP 模块一` / `XMP 模块二`). + (`XMP 模块一` / `XMP 模块二`, XMP profile 1 / profile 2). ## Bring-up order (install the 16G pair first) -The install order matters — starting from all four DIMMs often fails to train: +The order is mandatory. Starting from the 2×48G, or from all four DIMMs, does not POST: no BIOS +entry and nothing to change in setup — pull the 48G pair and start from step 1. 1. Insert **only the 2×16G**, in the board's primary slots (the first-populate pair the manual marks; the working layout has them in `ChannelA-DIMM1` / `ChannelB-DIMM1`). -2. Boot to BIOS; confirm `内存模块资源 = 默认模块` (XMP off) — the DRAM voltage comes back at 1.25 - V. +2. Boot to BIOS; confirm `内存模块资源 = 默认模块` (memory module source = default module, i.e. XMP + off) — the DRAM voltage comes back at 1.25 V. 3. Power off, then insert the **2×48G** in the remaining slots. 4. Boot; the board retrains once (1–3 min, possibly a few reboots), then works. @@ -43,21 +47,23 @@ Resulting layout: `ChannelA/B-DIMM0` = 48G (2R), `ChannelA/B-DIMM1` = 16G (1R). - Verified: `stressapptest` 8G / 32G / 100G all PASS, 0 hardware incidents. -Current BIOS settings (`超频OC → 内存设置`): +Current BIOS settings (`超频OC → 内存设置`, the Overclocking → Memory settings page). The BIOS was +used in Chinese; the English in the table translates those labels and is not the firmware's own +English wording: -| Field | Value | -| --------------------------------------- | --------------------- | -| `内存模块资源` (module source) | `默认模块` (XMP off) | -| `Gear选择` (gear) | `Gear2` | -| `内存频率(MHz)` | `4800` | -| `CPU VDD2电压` | `1.104 V` (Auto) | -| `VCCSA电压` | `1.288 V` (Auto) | -| `Vdd2Mv` | `1.250 V` (Auto) | -| `Memory Voltage VDD` | **`1.250 V`** (fixed) | -| `内存电压VDDQ` | **`1.250 V`** (fixed) | -| `内存电压VPP` | `1.800 V` (Auto) | -| `Primary Timing` `tCL` / `tRCD` / `tRP` | `40` / `40` | -| `Primary Timing` `tRAS` | `77` | +| Field | Value | +| --------------------------------------- | ------------------------------------ | +| `内存模块资源` (memory module source) | `默认模块` (default module, XMP off) | +| `Gear选择` (Gear mode) | `Gear2` | +| `内存频率(MHz)` (DRAM frequency) | `4800` | +| `CPU VDD2电压` (CPU VDD2 voltage) | `1.104 V` (Auto) | +| `VCCSA电压` (VCCSA voltage) | `1.288 V` (Auto) | +| `Vdd2Mv` | `1.250 V` (Auto) | +| `Memory Voltage VDD` | **`1.250 V`** (fixed) | +| `内存电压VDDQ` (DRAM VDDQ voltage) | **`1.250 V`** (fixed) | +| `内存电压VPP` (DRAM VPP voltage) | `1.800 V` (Auto) | +| `Primary Timing` `tCL` / `tRCD` / `tRP` | `40` / `40` | +| `Primary Timing` `tRAS` | `77` | The only hand-set voltages are the two DRAM rails, `Memory Voltage VDD` and `内存电压VDDQ`, both **1.250 V** (the fields read `1.250`, not `Auto`) — this is what `dmidecode` reports as diff --git a/hosts/idols-ai/default.nix b/hosts/idols-ai/default.nix index 89f57b42..b65a935f 100644 --- a/hosts/idols-ai/default.nix +++ b/hosts/idols-ai/default.nix @@ -7,7 +7,8 @@ }: ############################################################# # -# Ai - my main computer, with NixOS + I5-13600KF + RTX 4090 GPU, for gaming & daily use. +# Ai - my main computer, with NixOS + Core Ultra 7 270K Plus + RTX 4090 GPU, +# 128G DDR5-4800 (mixed 4-DIMM, see MIXED-MEMORY.md), for gaming & daily use. # ############################################################# let @@ -50,7 +51,8 @@ in # - zstd: CPU is not the bottleneck here (llama.cpp peaks ~30% util); its ~2.5x ratio # keeps ~5G more anon bytes in the capped pool than lz4, and ~5us decompress is noise # vs the ~100us SSD fault it avoids. - # - 10% pool (~9G): the module default 25% (~23G) would compete with the weight cache. + # - 10% pool (~13G on 128G): the module default 25% (~32G) would compete with the weight + # cache. boot.zswap = { enable = true; compressor = "zstd";