创建仓库

This commit is contained in:
2025-12-11 07:24:36 +08:00
commit 0d81c1792d
128 changed files with 15104 additions and 0 deletions

View File

@@ -0,0 +1,120 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 3:10:38 下午
date modified: 星期三, 十一月 19日 2025, 5:42:25 下午
---
# 1.1.1 发行版与内核版本指纹
**1. OS 发行版完整标识 (Distro Full ID)**
- **关键性**P0
- **预期信息**:确认具体的 SP 版本(如 V10 SP1/SP2/SP3不同版本的 Glibc 和内核基线差异极大。
- 探测命令:
```bash
cat /etc/kylin-release /etc/os-release 2>/dev/null | grep -E "PRETTY_NAME|VERSION_ID|Kylin Linux Advanced Server"
Kylin Linux Advanced Server release V10 (GFB)
NAME="Kylin Linux Advanced Server"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (GFB)"
```
**2. CPU 架构与字节序 (Arch & Endianness)**
- **关键性**P0
- **预期信息**:必须确认为 aarch64 且为 Little Endian小端序这是 Feiteng S5000C 的基础特征。
- 探测命令:
```bash
lscpu | grep -E "Architecture|Byte Order"
```
**3. 内核发布版本号 (Kernel Release)**
- **关键性**P0
- **预期信息**:精确的内核版本字符串。驱动源码的 Header Path 必须与此完全一致。
- 探测命令:
```bash
uname -r
4.19.90-52.23.v2207.gfb08.ky10.aarch64
```
**4. 内核构建编译器版本 (Kernel GCC Version)**
- **关键性**P0
- **预期信息**:提取圆括号内的 gcc version。如果此版本与当前环境中 gcc 版本差异过大,编译内核模块时极易报错。
- 探测命令:
```bash
cat /proc/version
Linux version 4.19.90-52.23.v2207.gfb08.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Tue Apr 23 18:20:01 CST 2024
```
**5. 内核启动参数全集 (Kernel Boot Cmdline)**
- **关键性**P1
- **预期信息**:检查是否已有预设的 isolcpus、hugepages 或 iommu 参数,判断基线是否纯净。
- 探测命令:
```bash
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-4.19.90-52.23.v2207.gfb08.ky10.aarch64 root=/dev/mapper/klas-root ro rd.lvm.lv=klas/root rd.lvm.lv=klas/swap acpi=on rhgb quiet console=tty0 crashkernel=1024M,high smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 video=efifb:off module_blacklist=phytium_mci_pci module_blacklist=phytium_mci audit=0
```
**6. 内核构建时间戳 (Kernel Build Timestamp)**
- **关键性**P2
- **预期信息**:确认内核是原厂构建还是用户自行重新编译过的版本。
- 探测命令:
```bash
uname -v
#1 SMP Tue Apr 23 18:20:01 CST 2024
```
**7. 内核模块签名强制性 (Module Signing Policy)**
- **关键性**P1
- **预期信息**:检查 CONFIG_MODULE_SIG_FORCE。如果是 y则加载未签名的自研驱动会被拒绝。
- 探测命令:
```bash
grep "CONFIG_MODULE_SIG" /boot/config-$(uname -r) 2>/dev/null || echo "Config check failed"
CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE Is not Set
CONFIG_MODULE_SIG_ALL=y
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
CONFIG_MODULE_SIG_SHA256=y
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha256"
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
```
**8. 安全模块状态 (LSM Status)**
- **关键性**P1
- **预期信息**:确认 SELinux 或 Kysec麒麟安全子系统的状态这是导致设备节点无权限访问的常见原因。
- 探测命令:
```bash
sestatus 2>/dev/null; getenforce 2>/dev/null; ls -d /sys/kernel/security/lsm
SELinux status: disabled
Disabled
/sys/kernel/security/lsm
```
**9. 页大小配置 (Page Size Configuration)**
- **关键性**P1
- **预期信息**aarch64 架构下可能存在 4KB 或 64KB 页大小的差异。页大小不匹配会导致内存映射mmap失败。
- 探测命令:
```bash
getconf PAGESIZE
65536
```

View File

@@ -0,0 +1,77 @@
---
tags:
aliases:
- 1.1.2 内存子系统策略 (Memory Subsystem Policy)
date created: 星期三, 十一月 19日 2025, 3:48:55 下午
date modified: 星期三, 十一月 19日 2025, 3:49:00 下午
---
# 1.1.2 内存子系统策略 (Memory Subsystem Policy)
**1. 透明大页状态 (Transparent HugePages Status)**
- **关键性**P0
- **预期信息**:查看当前状态是 `[always]` 还是 `[never]`。在 64KB 基础页宽的系统上THP 机制更为激进,极易导致内存碎片化和不可预测的内核态 CPU 占用sys cpu high。雷达实时处理业务通常强制要求设为 `never``madvise`
- 探测命令:
```bash
cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
```
**2. 标准大页尺寸 (Default Hugepage Size)**
- **关键性**P1
- **预期信息**:确认系统默认的大页物理尺寸。在 x86 (4KB 页) 上通常是 2MB但在 64KB 页宽的 aarch64 系统上,一级大页通常是 **512MB**。这直接决定了驱动程序(如 DMA 缓冲)申请连续物理内存时的对齐粒度和最小单元。
- 探测命令:
```bash
grep "Hugepagesize" /proc/meminfo
Hugepagesize: 524288 kB
```
**3. 大页内存预留量 (Total HugePages)**
- **关键性**P1
- **预期信息**:检查系统是否在启动阶段通过 Boot Args 预留了物理大页。若显示 `0`,说明完全依赖运行时分配。对于从 ADC 采集的高速数据流,运行时动态申请大页极易失败,必须确认是否有静态预留。
- 探测命令:
```bash
grep "HugePages_Total" /proc/meminfo
HugePages_Total: 0
```
**4. 虚拟内存交换倾向 (Swappiness)**
- **关键性**P1
- **预期信息**:数值范围 0-100。对于实时雷达系统任何形式的 Swap-out内存换出都是致命的会导致毫秒级的处理中断。该值应被严格限制在 `0` 或 `10` 以内。
- 探测命令:
```bash
cat /proc/sys/vm/swappiness
10
```
**5. 内存过载分配策略 (Overcommit Memory Policy)**
- **关键性**P2
- **预期信息**:返回值为 `0` (启发式), `1` (总是允许), 或 `2` (严格限制)。GPGPU 驱动初始化时常需预分配巨大的虚拟地址空间,若此值为 `2` (禁止过载) 且无足够 Swap驱动初始化`cudaMalloc` 等价调用)可能会直接崩溃。
- 探测命令:
```bash
cat /proc/sys/vm/overcommit_memory
0
```
**6. 物理内存全景 (Physical Memory Overview)**
- **关键性**P2
- **预期信息**:获取 `Total`(物理总内存)与 `Available`(实际可用)。需特别关注在 64KB 页系统下内核自身的数据结构Page Tables会消耗比 x86 更多的内存,需评估剩余内存是否满足信号处理算法的峰值需求。
- 探测命令:
```bash
free -h
total used free shared buff/cache available
Mem: 62Gi 2.8Gi 58Gi 81Mi 1.2Gi 54Gi
Swap: 8.0Gi 0B 8.0Gi
```

View File

@@ -0,0 +1,115 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 3:56:35 下午
date modified: 星期三, 十一月 19日 2025, 3:56:46 下午
---
# 1.1.3 CPU 调度与核心隔离 (CPU Scheduling & Isolation)
**1. CPU 物理拓扑与 NUMA 布局 (CPU Topology & NUMA Layout)**
- **关键性**P0
- **预期信息**确认物理核心数、Socket 数量及 NUMA 节点分布。Feiteng S5000C 通常为多路多核架构,跨 NUMA 节点的内存访问会导致显著的时延抖动,需确认 CPU 核心与 NUMA 节点的亲和性映射。
- 探测命令:
```bash
lscpu -e=CPU,NODE,SOCKET,CORE,CACHE
CPU NODE SOCKET CORE L1d:L1i:L2:L3
0 0 0 0 0:0:0:0
1 0 0 1 1:1:1:0
2 0 0 2 2:2:2:0
15 0 0 15 15:15:15:0
16 1 0 16 16:16:16:1
17 1 0 17 17:17:17:1
31 1 0 31 31:31:31:1
```
**2. 运行时核心隔离状态 (Runtime CPU Isolation)**
- **关键性**P0
- **预期信息**:检查内核是否已成功隔离指定核心(返回核心列表)。被隔离的核心将不再接收操作系统的常规任务调度,仅处理绑定到该核心的实时雷达信号处理线程。若为空,说明未配置隔离。
- 探测命令:
```bash
cat /sys/devices/system/cpu/isolated
```
**3. CPU 频率调节模式 (Frequency Scaling Governor)**
- **关键性**P1
- **预期信息**:确认 CPU 调频策略。应为 `performance`(定频/高性能)。若为 `powersave` 或 `ondemand`CPU 频率随负载波动会破坏信号处理的时间确定性Jitter
- 探测命令:
```bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort | uniq
performance
```
**4. 自动 NUMA 平衡策略 (Automatic NUMA Balancing)**
- **关键性**P1
- **预期信息**:返回 `0` (禁用) 或 `1` (启用)。在实时系统中应设为 `0`。若启用,内核会自动迁移内存页以试图优化局部性,这会引发不可控的 Page Fault 和延迟,严重干扰 DSP 算法运行。
- 探测命令:
```bash
cat /proc/sys/kernel/numa_balancing
1
```
**5. 实时调度节流阈值 (Real-time Throttling)**
- **关键性**P1
- **预期信息**:默认通常为 `950000` (μs),即预留 5% CPU 给非实时任务。若雷达处理线程独占核心且需 100% 占用(死循环轮询),需设为 `-1` 以关闭节流,否则线程会被强制挂起。
- 探测命令:
```bash
cat /proc/sys/kernel/sched_rt_runtime_us
950000
```
**6. 中断负载均衡服务状态 (IRQ Balance Service)**
- **关键性**P2
- **预期信息**:确认 `irqbalance` 服务状态。对于高性能网卡或 PCIe 采集卡通常需要关闭自动均衡手动将硬中断IRQ绑定到特定核心以避免中断处理在不同核心间漂移导致缓存失效。
- 探测命令:
```bash
systemctl status irqbalance 2>/dev/null | grep -E "Active|Loaded"
Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2025-11-19 14:12:35 CST; 1h 41min ago
```
**7. 离线核心状态 (Offline CPUs)**
- **关键性**P2
- **预期信息**检查是否有核心被逻辑关闭Hotplug off。这有时用于节能或规避硬件故障需确认所有预期可用的物理核心均处于 Online 状态(此处为空表示全在线)。
- 探测命令:
```bash
cat /sys/devices/system/cpu/offline
```
**8. 现有实时进程分布 (Existing RT Processes)**
- **关键性**P2
- **预期信息**:扫描当前系统中是否已有运行在 `RR` (Round Robin) 或 `FIFO` 策略下的实时进程,防止它们与未来的雷达业务产生资源争抢。
- 探测命令:
```bash
ps -eo pid,cls,rtprio,cmd --sort=-rtprio | grep -E "RR|FF" | head -n 10
13 FF 99 [migration/0]
16 FF 99 [migration/1]
21 FF 99 [migration/2]
26 FF 99 [migration/3]
31 FF 99 [migration/4]
36 FF 99 [migration/5]
41 FF 99 [migration/6]
46 FF 99 [migration/7]
51 FF 99 [migration/8]
56 FF 99 [migration/9]
```

View File

@@ -0,0 +1,145 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 3:57:04 下午
date modified: 星期三, 十一月 19日 2025, 4:02:26 下午
---
# 1.1.4 系统级资源限制 (System Resource Limits)
**1. 进程级资源配额 (Process Limits / ulimit)**
- **关键性**P0
- **信息解析**
- **关键风险点**`max locked memory` (锁定内存) 仅为 **64KB**。这是致命配置。雷达实时程序必须通过 `mlock()` 锁定物理内存以防止被 Swap 换出。此限制会导致锁定失败进而引发不可控的缺页中断Page Fault破坏实时性。
- **有利配置**`open files` (文件句柄) 已达 **524288**`core file size``unlimited`,这有利于高并发 Socket 通信和崩溃现场保留。
- **注意点**`stack size`**8192KB (8MB)**。对于深度递归或在栈上分配大型矩阵的 DSP 算法,可能面临 Stack Overflow 风险,建议在工程中调整或改为堆分配。
- 探测命令与结果:
```bash
ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 255853
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 524288
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 255853
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
```
**2. 系统级文件句柄上限 (System-wide File Handles)**
- **关键性**P2
- **信息解析**
- `file-max` 约为 $9.22 \times 10^{18}$`nr_open` 约为 $10.7$ 亿。
- 结论:内核层面的文件描述符限制极其宽裕,不存在系统级瓶颈。任何 "Too many open files" 错误均将源自进程级ulimit限制。
- 探测命令与结果:
```bash
cat /proc/sys/fs/file-max
9223372036854775807
```
```bash
cat /proc/sys/fs/nr_open
1073741816
```
**3. 线程与进程容量 (Thread & Process Capacity)**
- **关键性**P1
- **信息解析**
- `pid_max` (419 万) 和 `threads-max` (51 万) 提供了充足的 ID 空间。
- 结论:系统支持高并发多线程模型,能够容纳雷达处理管线中密集的数据分发线程。
- 探测命令与结果:
```bash
cat /proc/sys/kernel/pid_max
4194304
```
```bash
cat /proc/sys/kernel/threads-max
511707
```
**4. 核心转储策略 (Core Dump Strategy)**
- **关键性**P2
- **信息解析**
- `core_pattern` 被重定向至 `systemd-coredump`。这意味着 Core 文件会被压缩并统一存储在 `/var/lib/systemd/coredump/`,而非散落在当前目录。这对长期运行的无人值守系统有利,便于统一回溯。
- `suid_dumpable` 为 `0`。这意味着如果雷达主程序使用了 `setuid` 提权或文件 capabilities崩溃时将**不会**产生 Core Dump。调试阶段建议临时设为 `1`。
- 探测命令与结果:
```bash
cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
```
```bash
cat /proc/sys/fs/suid_dumpable
0
```
**5. 管道缓冲区限制 (Pipe Buffer Limits)**
- **关键性**P2
- **信息解析**
- `pipe-max-size` 为 **1MB**。
- 结论如果进程间通信IPC大量依赖 Pipe单次原子写入不应超过此值。对于高吞吐雷达数据建议使用共享内存而非管道。
- 探测命令与结果:
```bash
cat /proc/sys/fs/pipe-max-size
1048576
```
**6. System V IPC 限制 (Shared Memory & Semaphores)**
- **关键性**P1
- **信息解析**
- **共享内存**:最大段大小 (Max Segment Size) 极为巨大PB 级),完全满足 GPGPU 异构计算中零拷贝Zero-copy或大块内存共享的需求。
- **消息队列**`max message size` 仅为 **8192 字节**。这表明 System V 消息队列仅适用于传递极小的控制指令Control Plane严禁用于传输雷达回波数据Data Plane
- 探测命令与结果:
```bash
ipcs -l
---------- 消息限制 -----------
系统最大队列数量 = 32000
最大消息尺寸 (字节) = 8192
默认的队列最大尺寸 (字节) = 16384
---------- 同享内存限制 ------------
最大段数 = 4096
最大段大小 (千字节) = 18014398509465599
最大总共享内存 (千字节) = 18014398509481920
最小段大小 (字节) = 1
--------- 信号量限制 -----------
最大数组数量 = 32000
每个数组的最大信号量数目 = 32000
系统最大信号量数 = 1024000000
每次信号量调用最大操作数 = 500
信号量最大值=32767
```
**7. 持久化资源配置文件 (Persistent Config File)**
- **关键性**P1
- **信息解析**
- 输出为空。说明 `/etc/security/limits.conf` 中没有显式配置。
- 结论:当前的系统限制值(如 `open files = 524288`)可能来自于 systemd 的全局默认配置或 `/etc/security/limits.d/` 下的子文件。但 `memlock` 的 64KB 限制必须在此文件中显式覆盖,否则每次重启都会面临实时性风险。
- 探测命令与结果:
```bash
grep -vE "^#|^$" /etc/security/limits.conf
(空)
```

View File

@@ -0,0 +1,110 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 4:05:45 下午
date modified: 星期三, 十一月 19日 2025, 4:06:00 下午
---
# 1.1.5 设备节点与总线映射 (Device Nodes & Bus Mapping)
**1. 核心加速卡与显示设备识别 (GPU & Display Recognition)**
- **关键性**P0
- **信息解析**
- **设备状态**:成功识别到 ID 为 `1e3e:0002` 的 Processing accelerator此即 **天数智芯Iluvatar智铠 GPU**。物理总线地址为 `0001:01:00.0`
- **设备节点**`/dev/iluvatar0` 已创建,且权限为 `666` (crw-rw-rw-),这意味着用户态程序可以直接访问,驱动加载正常。
- **显示设备**:检测到 Phytium 原生显示控制器 (`0001:02:00.0`),映射为 `/dev/dri/card0`
- 探测命令与结果:
```bash
lspci -nn | grep -E "VGA|3D|Display|Processing|Accelerator"
0001:01:00.0 Processing accelerators [1200]: Device [1e3e:0002] (rev 01)
0001:02:00.0 Display controller [0380]: Phytium Technology Co., Ltd. Device [1db7:dc3e]
```
```bash
ls -lR /dev/dri /dev/vfio /dev/iluvatar* 2>/dev/null
crw-rw-rw- 1 root root 239, 0 11月 19 14:12 /dev/iluvatar0
```
**2. PCIe 链路带宽与完备性 (PCIe Link Status)**
- **关键性**P0
- **信息解析**
- **严重告警 (Network)**`dmesg` 显示网迅网卡ngbe带宽受限。
> `8.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x2 link`
> 网卡能力为 x4但实际协商或插槽仅支持 x2。**这导致物理带宽上限仅为 8Gbps无法跑满双口万兆雷达高吞吐传输存在丢包风险。**
- **链路降级 (Link Downgrade)**`lspci` 统计显示有多个设备状态为 `downgraded`。需确认 GPU (`0001:01:00.0`) 当前是跑在 `Speed 16GT/s, Width x16` 还是被降级。
- 探测命令与结果:
```bash
dmesg | grep -iE "smmu|iommu|pci|aer|firmware" | tail -n 20
[ 7.267461] ngbe 0000:0d:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x2 link at 0000:09:04.0
```
```bash
lspci -vv | grep -E "LnkCap:|LnkSta:" | grep -E "Speed|Width" | sort | uniq -c
1 LnkSta: Speed 16GT/s (downgraded), Width x8 (ok)
1 LnkSta: Speed 16GT/s (ok), Width x8 (downgraded)
```
**3. IOMMU 组别与隔离 (IOMMU Groups)**
- **关键性**P1
- **信息解析**
- **功能状态**IOMMU 已激活。
- **分组详情**
- GPU (`0001:01:00.0`) 被分配在 **Group 18**。
- 网卡 (`0000:0d:00.x`) 被分配在 **Group 19**。
- **结论**GPU 独占 Group 18这非常有利于通过 VFIO 进行直通Passthrough或用户态驱动开发隔离性良好。
- 探测命令与结果:
```bash
dmesg | grep -iE "smmu|iommu|pci|aer|firmware"
[ 6.942440] iommu: Adding device 0001:01:00.0 to group 18
[ 7.112576] iommu: Adding device 0000:0d:00.0 to group 19
```
**4. 中断亲和性与分布 (Interrupt Affinity)**
- **关键性**P1
- **信息解析**
- **NVMe 风险**NVMe SSD 的中断 (`nvme0q0`, IRQ 124) 在终端输出时刻仅触发在 CPU0 上Count=37
- **USB 干扰**:大量的 `xhci_hcd` (USB) 中断分布在 IRQ 128-146。
- **建议**:必须将雷达的高速信号采集卡中断和 NVMe 落盘中断手动绑定到不同的 CPU 核心,避免与 CPU0通常处理 OS 杂项)争抢。
- 探测命令与结果:
```bash
cat /proc/interrupts | grep -i "MSI" | head -n 20
124: 37 0 … 0 ITS-MSI 135790592 Edge nvme0q0
```
**5. 块设备 IO 调度器 (Block Device IO Scheduler)**
- **关键性**P2
- **信息解析**
- **NVMe 配置**`nvme0n1` 当前调度器为 `[none]`。
- **结论****优秀配置**。对于 NVMe SSD使用 `none` (多队列直通) 能最大程度降低 CPU 开销最适合雷达原始数据Raw Data的高速落盘场景。
- 探测命令与结果:
```bash
grep "" /sys/block/*/queue/scheduler
/sys/block/nvme0n1/queue/scheduler:[none] mq-deadline kyber bfq
```
**6. PCIe 最大有效载荷 (Max Payload Size)**
- **关键性**P2
- **信息解析**
- 多数设备协商在 `512 bytes`,但也有一部分在 `128 bytes` 或 `256 bytes`。
- 若 GPU 或采集卡的 MPS (Max Payload Size) 不匹配(如一个 128 一个 512PCIe 控制器会强制按照木桶效应(最低值)传输,导致 DMA 效率下降 15%-30%。需确认 GPU 具体协商值。
- 探测命令与结果:
```bash
lspci -vv | grep -E "DevCtl:|DevCap:" | grep -E "MaxPayload|MaxReadReq" | sort | uniq -c
15 DevCap: MaxPayload 128 bytes…
23 DevCap: MaxPayload 512 bytes…
```

View File

@@ -0,0 +1,92 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 4:10:16 下午
date modified: 星期三, 十一月 19日 2025, 4:10:27 下午
---
# 1.1.6 时间同步与系统关键疑点深挖 (Time Synchronization & Deep-Dive)
**1. 时间同步服务健康度 (Time Synchronization Health)**
- **关键性**P1
- **信息解析**
- **时钟源 (Clocksource)**:系统正确使用了 `arch_sys_counter`,这是 ARM64 架构下的高精度硬件计数器,基准可靠。
- **同步偏差 (Offset)**:当前与 NTP 服务器的偏差约为 **6ms - 7ms** (`-6106us` \~ `+7072us`)。对于毫秒级雷达应用尚可接受,但若涉及多站协同或相控阵微秒级同步,此偏差**过大**,建议改用 PTP (Precision Time Protocol) 或连接本地高精度 GPS 时钟源。
- **频率漂移 (Frequency Skew)**`89.988 ppm`,表明本地晶振走得稍快,但在 Chrony 修正范围内。
- 探测命令与结果:
```bash
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
arch_sys_counter
chronyc sources -v
^* 113.141.164.38 … -6106us[-6155us] +/- 35ms
^+ 223.4.249.80 … +7072us[+7072us] +/- 34ms
```
**2. GPU 链路降级确认 (GPU Link Downgrade Verification)**
- **关键性**P0 (Critical)
- **信息解析**
- **链路状态**:明确确证 **GPU 运行在 PCIe 4.0 x8 模式** (`Speed 16GT/s (ok), Width x8 (downgraded)`)。
- **根本原因**:物理插槽可能仅为 `x8` 电气连接,或者 GPU 金手指接触不良,亦或是主板 BIOS 设置了通道拆分Bifurcation
- **后果**:理论带宽上限从 32GB/s (x16) 降至 16GB/s (x8)。若雷达回波数据量巨大(如多通道宽带信号),这将成为数据传输的硬瓶颈。
- 探测命令与结果:
```bash
lspci -s 0001:01:00.0 -vv | grep -E "LnkCap:|LnkSta:"
LnkCap: Port #0, Speed 16GT/s, Width x16 …
LnkSta: Speed 16GT/s (ok), Width x8 (downgraded)
```
**3. 系统性能配置档 (System Performance Profile)**
- **关键性**P1
- **信息解析**
- **激活策略**`throughput-performance` 已激活。
- **缺陷**:尽管使用了高性能配置,但前序审计发现 `numa_balancing=1` 依然开启。这说明 Kylin 默认的 `throughput-performance` 策略并未激进地关闭 NUMA 自动均衡,后续需创建自定义 Tuned Profile 来覆盖此项。
- 探测命令与结果:
```bash
tuned-adm active
Current active profile: throughput-performance
```
**4. 透明大页整理策略 (THP Defrag Policy)**
- **关键性**P2
- **信息解析**
- **当前状态**`[madvise]`。
- **评价**:这是一个**相对安全**的设置。意味着内核仅在应用程序通过 `madvise(MADV_HUGEPAGE)` 显式请求时才整理大页,避免了全局强制整理带来的随机延迟。与 1.1.2 节建议一致。
- 探测命令与结果:
```bash
cat /sys/kernel/mm/transparent_hugepage/defrag
always defer defer+madvise [madvise] never
```
**5. 网络接口映射概览 (Network Interface Mapping)**
- **关键性**P2
- **信息解析**
- **接口列表**
- `ens4f0` - `ens4f3`:这极有可能是那是那块**带宽受限**的网迅四口千兆/万兆网卡。目前 `ens4f1` 为 `UP` 状态。
- `ens2f7u1u2`USB 网卡或转接设备,当前处于 `UP` 状态。
- **下一步行动**:后续网络调优时,需重点针对 `ens4f*` 系列接口使用 `ethtool` 检查 Ring Buffer 大小和硬中断聚合Coalesce设置。
- 探测命令与结果:
```bash
ip -br link show
ens4f0 DOWN …
ens4f1 UP …
```
-----
### 1\. 开发环境与构建生态 - 审计总结
至此,**1.1 操作系统与内核基座** 的深度审计已全部完成。我们已经掌握了这台机器的“体检报告”:
- **底座**Kylin V10 SP1 (aarch64), Kernel 4.19 (GCC 7.3 构建), **64KB PageSize**
- **算力**Feiteng S5000C + Iluvatar 智铠 GPU (PCIe x8 降级运行)。
- **风险**PageSize 兼容性、GPU 带宽减半、NVMe 中断挤压在 CPU0、系统时钟偏差较大。

View File

@@ -0,0 +1,64 @@
---
tags: []
aliases:
- 1.1.7 实时性与吞吐量配置补丁 (Real-time & Throughput Patches)
date created: 星期三, 十一月 19日 2025, 4:31:12 下午
date modified: 星期三, 十一月 19日 2025, 4:31:40 下午
---
# 1.1.7 实时性与吞吐量配置补丁 (Real-time & Throughput Patches)
| **组件** | **状态** | **说明** |
| :--- | :--- | :--- |
| **limits.conf** | 已修复 | 解决了 `max locked memory` 64KB 的致命限制。 |
| **sysctl.conf** | 已优化 | 解决了 `numa_balancing` 抖动和网络缓冲不足的问题。 |
| **GRUB CMDLINE** | 已加固 | 解决了 USB 设备的自动挂起风险。 |
-----
**1. 进程级资源锁定限制 (Process Memory Locking)**
- **关键性**P0
- **信息解析**:已通过修改 `/etc/security/limits.conf`,将**锁定内存限制**从原先的致命值 **64KB** 提升至 `unlimited`。这确保了雷达实时线程和 DMA 缓冲区能成功调用 `mlock()`,杜绝内存换出导致的延迟。
- 探测命令与结果:
```bash
ulimit -l
unlimited
```
**2. 核心调度与实时节流策略 (CPU Scheduling & Throttling)**
- **关键性**P0
- **信息解析**:已停止并禁用 `irqbalance` 服务,并强制将内核 `numa_balancing` 设置为 `0`,消除了自动化的内存和中断迁移,以保障信号处理的时序确定性。同时,通过 `sched_rt_runtime_us = -1` 解除了对实时线程的 CPU 时间节流。
- 探测命令与结果:
```bash
systemctl status irqbalance | grep Active
Active: inactive (dead) since …
sysctl kernel.numa_balancing
kernel.numa_balancing = 0
```
**3. 网络 UDP 缓冲区优化 (Network UDP Buffers)**
- **关键性**P1
- **信息解析**:已通过 `/etc/sysctl.d/99-radar-tuning.conf` 文件,将内核接收 (`rmem_max`) 和发送 (`wmem_max`) 缓冲区最大值从默认值提升至 25MB 以上,同时优化了 ARP 表大小。这对于处理降级 PCIe 链路 上的雷达高速 UDP 数据流是必要的。
- 探测命令与结果:
```bash
sysctl net.core.rmem_max
net.core.rmem_max = 26214400
```
**4. 硬件电源管理修正 (USB Power Management)**
- **关键性**P2
- **信息解析**:已通过 GRUB 引导参数,追加 `usbcore.autosuspend=-1`。这防止了连接的 USB 设备(如网卡)因系统默认的节能策略而进入休眠,保障了数据流的持续性。
- 探测命令与结果:
```bash
cat /proc/cmdline
… usbcore.autosuspend=-1 …
```

View File

@@ -0,0 +1,87 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 4:34:58 下午
date modified: 星期三, 十一月 19日 2025, 4:49:09 下午
---
# 1.2.1 Host 端编译器规范 (Host Compiler Spec)
**1. Host 编译器身份确证 (Host Compiler Identity)**
- **关键性****P0**
- **信息解析**
- **绝对路径**`/usr/bin/g++`
- **版本指纹****GCC 7.3.0 (aarch64)**。
- **深度解读**此版本与前序审计1.1.1中内核构建所用的编译器完全一致。这意味着用户态程序Host Code与内核态驱动Kernel Module拥有相同的 ABI二进制接口边界极大降低了 `insmod` 时的版本冲突风险。
- **探测命令与结果**
```bash
/usr/bin/g++ --version
g++ (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
```
```bash
ls -l /usr/bin/g++
-rwxr-xr-x 4 root root 988400 2月 21 2022 /usr/bin/g++
```
**2. 默认语言标准支持 (Default C++ Standard)**
- **关键性****P1**
- **信息解析**
- **宏定义值**`201402L`。
- **标准映射**:对应 **C++14** (GNU++14)。
- **工程约束**:当前环境默认支持 C++14 特性(如 `std::make_unique`, `lambda capture`)。若项目代码依赖 C++17如 `std::filesystem`, `std::optional`),必须在 `CMakeLists.txt` 中显式配置 `set(CMAKE_CXX_STANDARD 17)`,否则将导致编译失败。
- **探测命令与结果**
```bash
/usr/bin/g++ -dM -E -x c++ /dev/null | grep __cplusplus
#define __cplusplus 201402L
```
**3. Device 编译器与工具链锚定 (Device Compiler & Toolchain Binding)**
- **关键性****P0**
- **信息解析**
- **编译器版本****Clang 18.1.8** (CoreX 4.3.8 Build)。这是一个非常新的版本,对现代 C++ 语法支持极佳。
- **工具链锚定 (Crucial)**`Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7.3.0`。
- **深度解读**这是异构编译中最关键的“握手”。Clang 本身不带标准库libstdc++),它必须“借用”系统 GCC 的库。此处显示 Clang 已正确探测并绑定到了系统 GCC 7.3.0。若此处显示 `None` 或错误路径,链接阶段将必现 `undefined reference to std::…` 错误。
- **探测命令与结果**
```bash
which clang++
/usr/local/corex-4.3.8/bin/clang++
```
```bash
clang++ -v 2>&1 | grep "Selected GCC installation"
Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7.3.0
```
**4. 构建系统缓存状态 (Build System Cache State)**
- **关键性****P1**
- **信息解析**
- **编译器锁定**`CMAKE_CXX_COMPILER` 明确被锁定为 `/usr/bin/g++`,未被环境变量(如 `CC`/`CXX`)篡改为其他版本。
- **发布模式优化**`CMAKE_CXX_FLAGS_RELEASE` 设为 `-O3 -DNDEBUG`。对于雷达信号处理这类计算密集型任务,`-O3` 开启了循环向量化Loop Vectorization这对 ARM64 NEON 指令集优化至关重要。
- **探测命令与结果**
```bash
grep -E "CMAKE_CXX_COMPILER|CMAKE_CXX_FLAGS" …/build/CMakeCache.txt
CMAKE_CXX_COMPILER:STRING=/usr/bin/g++
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
```
**5. 产物真实性审计 (Artifact Verification)**
- **关键性****P2**
- **信息解析**
- **二进制指纹**`.o` 文件的 `.comment` 段中包含 `GCC: (GNU) 7.3.0`。
- **结论**:这证实了最终生成的机器码确实是由 GCC 7.3 编译的,排除了 CMake 只是“看起来”配置了 g++ 但实际调用了其他编译器的可能性(这种情况在存在 `ccache` 或 `distcc` 时偶有发生)。
- **探测命令与结果**
```bash
find … -name "*.o" … | grep "GCC: ("
GCC: (GNU) 7.3.0
```

View File

@@ -0,0 +1,68 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 4:54:50 下午
date modified: 星期三, 十一月 19日 2025, 5:09:06 下午
---
# 1.2.2 Device 端编译器规范 (Device Compiler Spec)
**1. Device 编译器身份与警告 (Compiler Identity & Warnings)**
- **关键性****P0**
- **信息解析**
- **编译器内核****Clang 18.1.8** (基于 LLVM 18)。这是一个非常激进的新版本,支持最新的 C++ 标准。
- **关键迁移警告**
> `clang++: warning: When compiling *.cu file for ivcore '-x cuda' need replace with '-x ivcore' …`
- **含义**:目前的构建方式使用了 `-x cuda` 标志,天数智芯编译器对此发出了**废弃警告**。
- **行动项**:工程文件中应尽快将编译语言标志从 `-x cuda` 迁移为 `-x ivcore`,以防未来 SDK 更新导致构建中断。
- **强制约束**: AI 生成的 CMakeLists.txt 中,所有 .cu 文件的编译命令必须使用 -x ivcore严禁使用 -x cuda。
- **探测命令与结果**
```bash
/usr/local/corex-4.3.8/bin/clang++ --version
clang version 18.1.8 (4.3.8 …)
```
**2. 运行时库映射 (Runtime Library Mapping)**
- **关键性****P0**
- **信息解析**
- **库文件位置**`/usr/local/corex/lib` (注意不是 `lib64`)。
- **CUDA 兼容层 (Shim Layers)**
- `libcudart.so` -\> `libcudart.so.89`:存在。这是运行时 API 的入口。
- `libcuda.so`:存在。这是驱动层 API 的入口。
- `libcufft.so`, `libcublas.so`, `libcudnn.so`:全套数学库均已存在同名替换文件。
- **智铠原生层 (Native Layers)**
- `libixthunk.so`:推测为内核态 Thunking 层,负责最终的 syscall 下发。
- `libixcore.so` (via `libcv_ixcore`): 核心计算库。
- **链接器支持**:发现了 `LLVMgold.so`,表明该环境支持 LTO (Link Time Optimization) 链接时优化。
- **文件系统证据**
```text
/usr/local/corex/lib/libcudart.so -> libcudart.so.89
/usr/local/corex/lib/libcuda.so
/usr/local/corex/lib/libixthunk.so
```
**3. 宏定义环境 (Macro Environment)**
- **关键性****P1**
- **信息解析**
- **平台标识**`__ILUVATAR__ = 1`。代码中可以用 `#ifdef __ILUVATAR__` 编写专用优化。
- **兼容性标识**`__CUDA__ = 1``__CUDACC__` 已定义。这是为了欺骗现有的 CUDA 代码,使其认为自己正在被 NVCC 编译。
- **探测命令与结果**
```bash
clang++ -dM -E -x cuda /dev/null | grep "__ILUVATAR__"
#define __ILUVATAR__ 1
```
**4. 头文件搜索优先级 (Header Search Priority)**
- **关键性****P0**
- **信息解析**
- **劫持机制**:编译器优先搜索 `/usr/local/corex-4.3.8/lib/clang/18/include/cuda_wrappers`。
- **原理**CoreX 在此目录下放置了与 CUDA 同名的头文件(如 `cuda_runtime.h`),拦截标准调用并映射到底层 Iluvatar Runtime。
- **GCC 绑定**:后续搜索路径正确回落到 Host 端的 `/usr/lib/gcc/aarch64-linux-gnu/7.3.0/`,保证了与 Host 代码的 ABI 兼容。

View File

@@ -0,0 +1,63 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 5:03:58 下午
date modified: 星期三, 十一月 19日 2025, 5:04:15 下午
---
# 1.2.3 链接器与加载器配置 (Linker & Loader)
**1. 链接器身份与版本 (Linker Identity)**
- **关键性****P1**
- **信息解析**
- **组件版本****GNU ld (Binutils) 2.34**。这是一个相对较新的版本,完全支持 AArch64 的各种重定位类型Relocation Types和 LTO 插件。
- **兼容性**:与 GCC 7.3 和 Clang 18 均能良好配合。
- **探测命令与结果**
```bash
ld --version
GNU ld (GNU Binutils) 2.34
```
**2. 二进制依赖解析 (Binary Dependency Analysis)**
- **关键性****P0**
- **信息解析**
- **直接依赖 (NEEDED)**`libcudart.so.2`。
- **深度解读**这非常有意思。编译器Clang在编译时似乎模仿了 CUDA 10.2 的 ABI 行为,或者链接了伪装成 10.2 版本的存根库。这是为了让旧的 CUDA 代码无缝迁移。
- **运行时路径 (RPATH)**`/usr/local/corex/lib`。
- **评价****优秀配置**。CMake 构建脚本通过 `CMAKE_INSTALL_RPATH` 或自动计算,将 SDK 库路径硬编码到了 ELF 文件头中。这是避免“DLL 地狱”的最佳实践。
- **探测命令与结果**
```bash
readelf -d …/bin/main_app | grep -E "RPATH|NEEDED"
0x0000000000000001 (NEEDED) 共享库:[libcudart.so.2]
0x000000000000000f (RPATH) Library rpath: [/usr/local/corex/lib]
```
**3. 运行时加载器解析 (Runtime Loader Resolution)**
- **关键性****P0**
- **信息解析**
- **解析结果**`ldd` 显示 `libcudart.so.2` 被成功解析到了 `/usr/local/corex/lib/libcudart.so.2`。
- **结论**运行时链接器ld-linux在执行程序时优先读取了 RPATH找到了正确的文件而没有去系统默认目录瞎找。程序**一定**能跑起来,不会报 `cannot open shared object file`。
- **探测命令与结果**
```bash
ldd …/bin/main_app
libcudart.so.2 => /usr/local/corex/lib/libcudart.so.2 (0x0000fffeda1a0000)
```
**4. 系统级库路径污染 (System Library Path State)**
- **关键性****P2**
- **信息解析**
- **环境变量**`LD_LIBRARY_PATH` 被设置了多次重复的 `/usr/local/corex-4.3.8/lib`。
- **风险**:虽然 RPATH 优先级高于 `LD_LIBRARY_PATH`但这种冗余设置可能在调试Debug或运行其他未设置 RPATH 的工具时引发困惑。建议在 `.bashrc` 中清理去重。
- **ld.so.conf**:系统中没有专门针对 corex 的 `.conf` 文件。这进一步凸显了 CMake 中设置 RPATH 的重要性——如果 CMake 没设 RPATH程序必挂。
- **探测命令与结果**
```bash
echo $LD_LIBRARY_PATH
/usr/local/corex-4.3.8/lib:/usr/local/corex-4.3.8/lib:… (重复)
```

View File

@@ -0,0 +1,45 @@
# 1.2.4 混合编译兼容性 (Hybrid Compilation Compatibility)
**1. C++ 标准库 ABI 兼容性 (StdLib ABI Compatibility)**
- **关键性****P0** (Showstopper)
- **信息解析**
- **GCC 状态**`#define _GLIBCXX_USE_CXX11_ABI 1`
- **Clang 状态**`#define _GLIBCXX_USE_CXX11_ABI 1`
- **深度解读**这是混合编译成败的关键。GCC 5.1 引入了新版 `std::string``std::list` 实现(符合 C++11 标准),并使用 Dual ABI 机制。如果两个编译器此宏定义不一致(例如一个为 0 一个为 1链接器将无法匹配标准库符号。
- **结论**:两者完全对齐,**无需**在 CMake 中手动添加 `-D_GLIBCXX_USE_CXX11_ABI=0`
- **探测命令与结果**
```bash
echo "#include <string>" | g++ … | grep ABI
#define _GLIBCXX_USE_CXX11_ABI 1
echo "#include <string>" | clang++ … | grep ABI
#define _GLIBCXX_USE_CXX11_ABI 1
```
**2. 目标架构与指令集基线 (Target Architecture Baseline)**
- **关键性****P1**
- **信息解析**
- **宏定义检查**:两者均定义了 `__aarch64__` 和 `__ARM_ARCH 8`,且**均未定义** `__ARM_FEATURE_ATOMICS`。
- **原子指令策略**
* 现代 ARMv8.1+ 引入了 LSE (Large System Extensions) 原子指令(如 `ldadd`, `cas`),性能远超传统的 LL/SC (Load-Link/Store-Conditional, 即 `ldxr/stxr`) 循环。
* 由于宏缺失且 grep `ldadd` 无输出,说明两个编译器都**回退到了保守的 LL/SC 模式**。
- **风险评估**:考虑到飞腾 S5000C 基于 ARMv8 架构,这种保守策略是**最安全**的。强制开启 LSE (`-march=armv8.1-a+lse`) 虽然可能提升原子计数器性能,但在旧微架构上会导致 `SIGILL` (非法指令崩溃)。
- **探测命令与结果**
```bash
g++ … | grep __ARM_FEATURE_ATOMICS
(空) -> 未启用 LSE
clang++ … | grep __ARM_FEATURE_ATOMICS
(空) -> 未启用 LSE
```
**3. 编译标志警告 (Compiler Flags Warning)**
- **关键性****P2**
- **信息解析**
- **重复警告**Clang 再次提示 `'-x cuda' will not be supported`。
- **行动项**:在 **1.2.2** 中已记录,需在 `CMakeLists.txt` 中修正语言标志。
- **探测命令与结果**
```text
clang++: warning: … need replace with '-x ivcore' …
```

View File

@@ -0,0 +1,66 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 5:27:53 下午
date modified: 星期三, 十一月 19日 2025, 5:28:03 下午
---
# 1.3.1 驱动核心模块状态 (Driver Kernel Modules)
**1. 驱动加载与版本一致性 (Driver Load & Consistency)**
- **关键性****P0**
- **信息解析**
- **核心状态**:驱动 `iluvatar` (v4.3.8) 已成功加载。
- **健康自检**dmesg 明确输出 `iluvatar 0001:01:00.0: DEV-0 is okay.`,标志着硬件初始化通过,未遇到固件加载错误。
- **签名警告**`module verification failed` 提示内核被“污染tainted这是因为使用了厂商提供的 Out-of-tree 非开源驱动。在开发环境中可忽略,生产环境若有强安全合规要求需进行自签名。
- **探测命令与结果**
```bash
dmesg | grep "iluvatar" | tail -n 5
[ 6.657344] iluvatar 0001:01:00.0: enabling device (0000 -> 0002)
[ 7.037538] iluvatar 0001:01:00.0: DEV-0 is okay.
```
**2. 关键模块参数配置 (Key Module Parameters)**
- **关键性****P1**
- **信息解析**
- **统一寻址 (UVA/VMM)**`itr_enable_vmm_va:Y`。开启了虚拟内存管理,允许 GPU 直接访问进程虚拟地址空间,简化了 `cudaMallocManaged` 等 API 的实现。
- **保留显存**`itr_text_mem_size:512`。驱动预留了 512MB 显存用于存放指令代码Text Segment。对于显存较小的卡如 8GB这 0.5GB 的开销需计入总预算。
- **功耗策略**`power:0`。通常 0 代表高性能模式(关闭激进节能),这有利于雷达信号处理的实时性稳定性。
- **探测命令与结果**
```bash
grep -r . /sys/module/iluvatar/parameters/
/sys/module/iluvatar/parameters/itr_enable_vmm_va:Y
/sys/module/iluvatar/parameters/itr_text_mem_size:512
/sys/module/iluvatar/parameters/power:0
```
**3. 设备节点与权限映射 (Device Nodes & Permissions)**
- **关键性****P0**
- **信息解析**
- **用户态接口**`/dev/iluvatar0` 已创建。
- **权限状态**`crw-rw-rw- (666)`。这意味着**任何用户**都可以提交 GPU 任务,无需加入特定组(如 `video` 组)。虽然方便开发,但在多用户服务器上存在安全隐患。
- **PCI 绑定**`/sys/bus/pci/…/driver` 链接正确指向了 `iluvatar` 驱动,确认设备未被 `pci-stub` 或 `vfio-pci` 错误抢占。
- **探测命令与结果**
```bash
ls -l /dev/iluvatar0
crw-rw-rw- 1 root root 239, 0 …
```
**4. 虚拟化与直通依赖 (Virtualization Dependencies)**
- **关键性****P2**
- **信息解析**
- **VFIO 栈**`mdev` 和 `vfio` 模块被 `iluvatar` 依赖。
- **架构意义**:这表明智铠驱动采用了现代化的 **MDEV (Mediated Device)** 架构设计。即使在物理机上,它也可能利用 VFIO 框架来管理 DMA 和中断,这为将来在 Docker 容器或 KVM 虚拟机中直通 GPU 提供了原生支持。
- **探测命令与结果**
```bash
lsmod | grep iluvatar
iluvatar 983040 0
vfio 262144 3 vfio_mdev,vfio_iommu_type1,iluvatar
```

View File

@@ -0,0 +1,61 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 5:29:54 下午
date modified: 星期三, 十一月 19日 2025, 5:30:07 下午
---
# 1.3.2 运行时环境与兼容层 (Runtime Environment & Shim Layer)
**1. 环境变量配置 (Environment Configuration)**
- **关键性****P1**
- **信息解析**
- [cite\_start]**SDK 根路径**`COREX_HOME` 被正确设置为 `/usr/local/corex` [cite: 1]。这是许多第三方构建脚本查找头文件和库的依据。
- [cite\_start]**库搜索路径**`LD_LIBRARY_PATH` 包含 `/usr/local/corex/lib` [cite: 1],确保了在未设置 RPATH 的情况下也能找到 SDK 库。
- **探测命令与结果**
```bash
env | grep "COREX"
COREX_HOME=/usr/local/corex
```
**2. 驱动层转发机制 (Driver Shim Mechanism)**
- **关键性****P0**
- **信息解析**
- [cite\_start]**转发确认**`libcuda.so` (即 NVIDIA Driver API 的替代品) 显式依赖于 `libixthunk.so` [cite: 1]。
- **架构意义**:这是智铠 SDK 兼容 CUDA 的核心枢纽。它拦截了如 `cuMemAlloc`、`cuLaunchKernel` 等标准驱动调用,并通过 `libixthunk` 将其转换为发往 `iluvatar.ko` 内核模块的指令。
- **探测命令与结果**
```bash
ldd /usr/local/corex/lib/libcuda.so
libixthunk.so => /usr/local/corex/lib/libixthunk.so
```
**3. 运行时版本伪装 (Runtime Version Masquerading)**
- **关键性****P0**
- **信息解析**
- **金丝雀测试**:一个标准的 CUDA Runtime API 程序成功编译并运行。
- [cite\_start]**版本欺骗**:系统返回 **Runtime Version: 10020** 和 **Driver Version: 10020** [cite: 1]。
- **结论**SDK 成功将自己伪装成了 **CUDA 10.2** 环境。这对于雷达信号处理算法库(如某些开源的 FFT 实现)至关重要,因为它们往往会对 CUDA 版本进行硬编码检查。
- **探测命令与结果**
```bash
./test_runtime
Detected CUDA Runtime Version: 10020
Detected CUDA Driver Version: 10020
```
**4. 运行时库依赖策略 (Runtime Library Strategy)**
- **关键性****P2**
- **信息解析**
- [cite\_start]**依赖链**`libcudart.so` 仅依赖标准系统库 (`libc`, `libstdc++` 等) [cite: 1]。
- **推论**:不同于 `libcuda.so``libcudart` 可能设计得更为轻量,仅负责 API 的参数封装和管理,具体的硬件操作可能全部下沉到了驱动层库或通过动态加载实现。
- **探测命令与结果**
```bash
ldd /usr/local/corex/lib/libcudart.so
(无 libix* 显式依赖)
```

View File

@@ -0,0 +1,96 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 5:34:23 下午
date modified: 星期三, 十一月 19日 2025, 6:29:11 晚上
---
# 1.3.3 管理与监控接口 (Management Interfaces)
**1. 基础状态概览 (Basic Status Overview)**
- **关键性****P0**
- **信息解析**
- **型号识别****Iluvatar MR-V100**。这是智铠的高端训练/推理卡。
- **显存容量****32 GB** (32768 MiB)。对于雷达信号处理(如动目标检测 MTI、脉冲压缩这是一个非常充裕的显存池允许处理超大的相干处理间隔CPI数据块。
- **热状态**:当前温度 **60°C**,风扇状态不可读 (N/A)。鉴于功耗仅 **41W** (空载),温度略高,可能是被动散热或机房环境温度较高。
- **探测命令与结果**
```bash
/usr/local/corex/bin/ixsmi
| 0 Iluvatar MR-V100 | 00000001:01:00.0 |
| N/A 60C P0 41W / 150W | 64MiB / 32768MiB |
```
**2. ECC 错误监控能力 (ECC Monitoring Capability)**
- **关键性****P1**
- **信息解析**
- **查询失败**`Field "ecc.errors…" is not a valid field`。
- **深度解读**:这意味着我们无法通过标准 SMI 命令监控显存的单比特翻转Single Bit Error。对于雷达这类对数据准确性敏感的系统这是一个**盲区**。
- **行动项**:在应用层代码中增加自校验逻辑(如周期性内存完整性测试),或联系厂商询问私有 ECC 查询接口。
- **探测命令与结果**
```bash
ixsmi --query-gpu=ecc…
Field … is not a valid field to query.
```
**3. 频率与功耗详情 (Clock & Power)**
- **关键性****P1**
- **信息解析**
- **核心频率**:当前 **1500 MHz**,最大 **1600 MHz**。GPU 几乎运行在全速状态P0 态),性能释放良好。
- **功耗墙**:默认上限 **150W**。相比 NVIDIA V100 (250W) 或 A100 (400W),这张卡功耗较低,适合边缘侧雷达站部署。
- **温度阈值****95°C** 开始降频 (Slowdown)**105°C** 强制关机 (Shutdown)。当前 60°C 距离热墙尚远。
- **探测命令与结果**
```bash
ixsmi -q -d CLOCK,POWER,TEMPERATURE
GPU Power Draw : 41 W
GPU Max Operating Temp : 95 C
SM : 1500 MHz
```
**4. NUMA 拓扑亲和性 (NUMA Affinity)**
- **关键性****P0**
- **信息解析**
- **绑定关系**GPU 0 绑定到 **NUMA Node 1**。
- **核心范围****CPU 16-31**。
- **工程约束**:在编写多线程雷达处理程序时,**严禁**将主处理线程调度到 CPU 0-15。若发生跨 Node 内存拷贝,带宽将受到 QPI/UPI 总线的严重制约(增加 20%-40% 的延迟)。必须使用 `numactl --cpunodebind=1` 或 `pthread_setaffinity_np` 强制绑定。
- **探测命令与结果**
```bash
ixsmi topo -m
GPU0 X 16-31 1
```
**5. 进程监控 (Process Monitoring)**
- **关键性****P2**
- **信息解析**
- **状态**:当前无运行进程 (`No running processes found`)。
- **结论**环境“干净”无后台训练任务或僵尸进程占用显存适合进行基准测试Benchmark或新业务部署。
- **探测命令与结果**
```bash
ixsmi pmon
(No entries)
```
**6. 关键风险应对 (Critical Risk Response)**
**6.1 运维盲区ECC 监控缺失**
- **风险定性****P1 (可靠性风险)**。`ixsmi` 工具当前不支持查询 ECC 错误字段导致系统无法感知显存物理位翻转Bit Flip在雷达长时运行中存在数据静默错误的隐患。
- **应对策略**:已向厂商咨询底层查询接口。在获得官方工具前,建议在应用层增加关键数据块(如原始回波数据)的 CRC32 完整性校验。
**6.2 架构陷阱NUMA 拓扑失配**
- **风险定性****P0 (性能风险)**。`ixsmi topo` 确认 GPU 绑定在 **NUMA Node 1 (CPU 16-31)**。若程序默认在 Node 0 启动,跨 CPU 访问显存将导致 QPI/UPI 总线瓶颈,延迟增加且不可控。
- **执行修正**:必须使用 `numactl` 强制绑定 CPU 亲和性。针对您的构建环境,启动命令应规范为:
```bash
# 强制将进程绑定到 NUMA Node 1 (Core 16-31)
numactl --cpunodebind=1 --membind=1 /home/Radar/workspace/signal-processing-demo/build/bin/main_app
```

View File

@@ -0,0 +1,69 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 6:38:56 晚上
date modified: 星期三, 十一月 19日 2025, 6:39:15 晚上
---
# 1.3.4 核心数学加速库 (Core Math Libraries)
**1. 数学库物理实体与映射 (Physical Library Mapping)**
- **关键性****P0**
- **信息解析**
- **文件存在性**`libcufft.so` (FFT) 和 `libcublas.so` (BLAS) 均存在于 `/usr/local/corex/lib`
- **版本伪装策略**
- `libcublas.so` -\> 链接至 `libcublas.so.2.3.254`(伪装 CUDA 10.2)。
- `libcufft.so` -\> 链接至 `libcufft.so.1.2.89`(伪装 CUDA 10.1)。
- **容量分析**
- `libcufft` 体积高达 **412MB**`libcublas`**133MB**
- **结论**:如此巨大的体积表明这**绝不是**简单的 API 转发层Shim而是包含完整数学算法实现的**重编译版本**Native Implementation
- **探测命令与结果**
```bash
ls -lh /usr/local/corex/lib/libcufft.so*
-rwxr-xr-x … 412M … libcufft.so.1.2.89
```
**2. 二进制身份指纹 (Binary Identity)**
- **关键性****P1**
- **信息解析**
- **构建来源**`strings` 命令输出显示包含 `iluvatar.version` 和 `clang version 18.1.8 (4.3.8 …)`。
- **深度解读**这证实了该库是由天数智芯Iluvatar使用其自研工具链Clang 18 base从源码重新编译的而非 NVIDIA 的二进制文件。这意味着其底层实现已针对智铠 GPU 的 VLIW 架构进行了特定优化。
- **探测命令与结果**
```bash
strings … | grep "iluvatar"
iluvatar.version
SDK Version
```
**3. 开发头文件状态 (Header Availability)**
- **关键性****P0**
- **信息解析**
- **状态**`cufft.h` 和 `cublas_v2.h` 均存在且大小正常。
- **兼容性**:这意味着现有的雷达信号处理代码(通常包含这两个头文件)无需修改 `#include` 路径即可直接编译。
- **探测命令与结果**
```bash
ls -l …/include/cufft.h …/include/cublas_v2.h
-rwxr-xr-x … 13033 … cufft.h
```
**4. 功能性金丝雀测试 (Functional Canary Test)**
- **关键性****P0 (Critical)**
- **信息解析**
- **测试内容**:同时调用 `cufftPlan1d` (创建 FFT 句柄) 和 `cublasCreate` (创建矩阵句柄)。
- **测试结果**
- `cuFFT Plan1d: Success`
- `cuBLAS Create: Success`
- **审计结论****数学库功能完好**。链接器成功找到了库,且初始化函数能正确与驱动交互并分配资源。这是验证 SDK 可用性的里程碑。
- **探测命令与结果**
```bash
./test_math
cuFFT Plan1d: Success
cuBLAS Create: Success
```

View File

@@ -0,0 +1,52 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 6:50:09 晚上
date modified: 星期三, 十一月 19日 2025, 6:50:20 晚上
---
# 1.3.5 开发者头文件与生态 (Developer Headers & Ecosystem)
**审计综述**
本环节确认了 SDK 对现代 C++ 开发生态的支持能力。最关键的发现是 **Thrust 模板库v1.9.7** 的完整存在且功能正常,这意味着雷达信号处理算法可以利用类似 STL 的高层抽象进行开发,而无需手写繁琐的 CUDA Kernel。同时**FP16** 和 **标准数学函数** 的支持,保障了从 NVIDIA 平台迁移代码时的源码级兼容性。
**1. Thrust 模板库完备性 (Thrust Template Library)**
- **关键性****P0**
- **信息解析**
- **版本指纹**:检测到 `THRUST_VERSION 100907`,对应 **Thrust v1.9.7**。这是一个非常成熟且广泛使用的版本(对应 CUDA 10.x 时代)。
- **后端架构**`THRUST_DEVICE_SYSTEM` 宏确认为 `CUDA` 后端。这表明智铠 SDK 实现了对 NVIDIA Thrust 接口的底层拦截与适配,开发者可以使用 `thrust::sort`, `thrust::reduce` 等高阶原语。
- **功能验证**金丝雀测试Canary Test成功在 Device 端完成了 Vector 数据拷贝与排序,证明 C++ 模板元编程在 `Clang++` 编译器下能正确展开并生成 GPU 指令。
- **探测依据**
```bash
grep "THRUST_VERSION" /usr/local/corex/include/thrust/version.h
#define THRUST_VERSION 100907
ls -d /usr/local/corex/include/thrust
/usr/local/corex/include/thrust
```
**2. 混合精度计算支持 (Mixed Precision / FP16)**
- **关键性****P1**
- **信息解析**
- **头文件状态**`/usr/local/corex/include/cuda_fp16.h` 存在且文件大小正常(约 110KB
- **业务价值**在雷达数据存储IQ 采样和部分波束形成算法中使用半精度FP16可将显存带宽需求降低 50%。该头文件的存在意味着我们可以定义 `__half` 类型并调用 `__hadd`, `__hmul` 等原生指令。
- **探测依据**
```bash
ls -l /usr/local/corex/include/cuda_fp16.h
-rwxr-xr-x 1 root root 110679 …
```
**3. 设备端数学函数库 (Device Math Functions)**
- **关键性****P1**
- **信息解析**
- **CRT 支持**:检测到 `crt/math_functions.h` (337KB) 和 `math_functions.h`。
- **兼容性意义**:这些头文件映射了 C 标准数学库(如 `sinf`, `powf`, `sqrtf`)到 GPU 的硬件指令SFU Special Function Units。对于涉及大量三角函数运算的雷达信号处理如相位解缠这是必不可少的基础设施。
- **探测依据**
```bash
ls -l /usr/local/corex/include/crt/math_functions.h
-rwxr-xr-x 1 root root 337836 …
```

View File

@@ -0,0 +1,49 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 6:59:57 晚上
date modified: 星期三, 十一月 19日 2025, 7:02:54 晚上
---
# 1.3.6 官方示例与构建范式 (Official Samples & Build Patterns)
**审计综述**
由于系统中缺失官方 SDK 示例代码(`/usr/local/corex/samples` 不存在),我们将 **用户验证过的工程配置 (`SignalProject`)** 确立为该环境下的**标准构建范式Golden Build Pattern**。
**1. 核心构建策略:显式异构分离 (Explicit Heterogeneous Separation)**
- **关键性****P0**
- **范式解析**
- [cite_start]**Host 编译器**:显式锁定为 `/usr/bin/g++`。这是为了确保与 OS 内核GCC 7.3 构建)的 ABI 完美兼容,避免 `libstdc++` 符号冲突。
- [cite_start]**Device 编译器**:通过自定义变量 `CLANG_CUDA_COMPILER` 指向 `clang++`。这表明构建系统**没有**使用 CMake 原生的 `LANGUAGES CUDA` 支持(通常会自动寻找 nvcc而是采用“C++ 项目 + 手动管理 GPU 编译规则”的模式。
- [cite_start]**语言标准**`project(SignalProject LANGUAGES CXX)`。项目本质被定义为 C++ 工程GPU 代码被视为一种特殊的 C++ 扩展ivcore/cuda
**2. SDK 路径管理 (SDK Path Management)**
- **关键性****P1**
- **范式解析**
- [cite_start]**硬编码路径**SDK 根目录被锚定在 `/usr/local/corex`
- [cite_start]**头文件搜索**:显式定义 `COREX_INC_PATH` 用于查找 `cuda_runtime.h`。这与我们在 **1.3.5** 中发现的头文件位置一致。
- [cite_start]**库文件搜索**:显式定义 `COREX_LIB_PATH`,配合 **1.2.3** 中验证过的 RPATH 机制,构成了完整的链接闭环。
**3. 依赖管理范式 (Dependency Management Pattern)**
- **关键性****P2**
- **范式解析**
- [cite_start]**GoogleTest 集成**:使用 `FetchContent` 在线拉取 `v1.14.0` 版本的 GTest。这意味着构建环境需要互联网连接且该版本的 GTest 与当前的 GCC 7.3 / Clang 18 混合环境兼容。
**4. 结论与建议**
- **当前状态**:构建范式已通过实战验证。
- **行动项**:后续开发所有新模块时,**必须严格复制**此 `CMakeLists.txt` 中的编译器设置部分(特别是 `set(CMAKE_CXX_COMPILER …)``set(CLANG_CUDA_COMPILER …)`),任何试图引入 `enable_language(CUDA)` 或移除 GCC 显式指定的行为都极可能导致构建失败。
---
### 1.3 章节最终总结GPGPU 软件开发套件
至此,我们完成了对 **1.3 GPGPU 软件开发套件** 的全方位审计:
1. **驱动 (Driver)**`iluvatar.ko` (v4.3.8) 加载正常,但 NUMA 绑定需人工干预。
2. **运行时 (Runtime)**:成功伪装为 **CUDA 10.2**,全链路金丝雀测试通过。
3. **数学库 (Math)**`cuFFT` / `cuBLAS` 的智铠原生重构版存在且可用,这是雷达业务的基石。
4. **开发生态 (Ecosystem)**`Thrust 1.9.7` 模板库就绪,支持高效率 C++ 开发。
5. **构建范式 (Build)**:确立了 **"Host(GCC) + Device(Clang) + CoreX SDK"** 的混合编译标准。
**风险提示**
- **ECC 监控缺失**:需在软件层增加数据校验。
- **NUMA 拓扑陷阱**:必须使用 `numactl` 或代码级绑定锁死 CPU 16-31。

View File

@@ -0,0 +1,48 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 7:24:00 晚上
date modified: 星期三, 十一月 19日 2025, 7:27:31 晚上
---
# 1.4.1 CMake 核心环境 (CMake Core)
**1. 构建工具版本 (CMake Version)**
- **关键性****P1**
- **信息解析**
- **物理版本****4.1.2**。这是一个非常新的版本User Context 为 2025 年 11 月),意味着它原生支持现代 C++20/23 特性及最新的构建策略。
- **项目约束**`cmake_minimum_required(VERSION 3.10)`
- **结论**版本兼容性极佳。CMake 4.x 完全向后兼容 3.x 语法。
- **探测命令与结果**
```bash
cmake --version
cmake version 4.1.2
```
**2. 构建生成器 (Build Generator)**
- **关键性****P1**
- **信息解析**
- **类型****Unix Makefiles**。
- **评价**:这是 Linux 环境下的经典默认值。
- **优化建议**:对于拥有 64 核以上的飞腾 S5000C 平台,若后续发现增量编译速度较慢,可考虑切换为 **Ninja** (`cmake -G Ninja …`),其依赖分析速度通常优于 Make。目前保持 Makefiles 亦无大碍。
- **探测命令与结果**
```bash
grep "CMAKE_GENERATOR" …/CMakeCache.txt
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
```
**3. 工具链隔离状态 (Toolchain Isolation)**
- **关键性****P2**
- **信息解析**
- **状态**`CMAKE_TOOLCHAIN_FILE` 为空。
- **架构意义**:这意味着 CMake 没有加载外部的交叉编译配置脚本。所有的编译器指定Host GCC / Device Clang均完全由项目内部的 `CMakeLists.txt` 显式控制。这符合“显式异构分离”的设计模式。
- **探测命令与结果**
```bash
grep "CMAKE_TOOLCHAIN_FILE" …/CMakeCache.txt
(Empty)
```

View File

@@ -0,0 +1,55 @@
---
tags:
aliases:
- 1.4.2 异构编译器编排策略 (Heterogeneous Compiler Orchestration)
date created: 星期三, 十一月 19日 2025, 7:27:38 晚上
date modified: 星期三, 十一月 19日 2025, 7:42:22 晚上
---
# 1.4.2 异构编译器编排策略 (Heterogeneous Compiler Orchestration)
**审计综述**
项目采用了\*\*“Host 主导Device 旁路”\*\* 的编排模式。通过显式锁定 Host 编译器并禁用 CMake 原生 CUDA 支持,彻底规避了标准 `FindCUDA` 模块在国产异构环境下的兼容性问题。这种配置极其稳健,是当前环境下的最佳实践。
**1. Host 编译器锁定 (Host Compiler Locking)**
- **关键性****P0**
- **策略解析**
- **配置**`set(CMAKE_CXX_COMPILER "/usr/bin/g++")`
- **深度解读**
- **绝对路径**:使用了 `/usr/bin/g++`,消除了 `cc``c++` 软链接指向不明的风险。
- **ABI 锚定**:强制使用系统 GCC确保了与 OS 内核GCC 7.3 构建及系统库libstdc++)的二进制兼容性。这是混合编译稳定性的基石。
- **探测依据**
```cmake
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
```
**2. Device 编译器传递 (Device Compiler Passing)**
- **关键性****P1**
- **策略解析**
- **配置**`set(CLANG_CUDA_COMPILER "clang++")`。
- **风险提示**:当前配置使用相对命令名。在多编译器共存的环境中(如同时安装了系统 Clang可能导致误调用。建议优化为 `${COREX_PATH}/bin/clang++` 以实现物理隔离。
- **角色**:此变量主要用于后续 `add_custom_command` 或自定义编译规则中,作为处理 `.cu` 文件的专用工具。
- **探测依据**
```cmake
set(CLANG_CUDA_COMPILER "clang++")
```
**3. 语言标准范围定义 (Language Scope Definition)**
- **关键性****P0**
- **策略解析**
- **配置**`project(SignalProject LANGUAGES CXX)`。
- **核心逻辑**
- **仅启用 CXX**:明确告知 CMake 这是一个纯 C++ 项目。
- **禁用 CUDA**`grep "enable_language(CUDA)"` 为空,表明未启用 CMake 的原生 CUDA 支持。
- **架构优势**:这避免了 CMake 试图去寻找 NVCC 或执行标准的 CUDA 设备链接Device Linking流程从而让开发者完全掌控智铠 GPU 代码的编译参数(如 `-x ivcore`)。
- **探测依据**
```cmake
project(SignalProject LANGUAGES CXX)
# enable_language(CUDA) -> Not Found
```

View File

@@ -0,0 +1,55 @@
---
tags:
aliases:
- 1.4.3 编译选项与性能开关 (Compilation Flags & Performance Switches)
date created: 星期三, 十一月 19日 2025, 7:30:01 晚上
date modified: 星期三, 十一月 19日 2025, 7:42:46 晚上
---
# 1.4.3 编译选项与性能开关 (Compilation Flags & Performance Switches)
**审计综述**
当前构建系统在功能层面已适配智铠 SDK正确使用了 `-x ivcore`),但在性能调优层面尚处于“默认状态”,缺失针对飞腾 CPU 的特定优化标志。
**1. Host 端编译标志策略 (Host Compilation Strategy)**
- **关键性****P1**
- **策略解析**
- **构建类型管理**:正确区分了 `Release` (`-O3 -DNDEBUG`) 和 `Debug` (`-g`) 模式。CMake 默认的 Release 配置已开启最高等级的循环向量化优化。
- **架构优化 (缺失)**:未检测到 `-march=armv8-a``-mtune=phytium`
- **改进建议**:建议显式添加 `-march=armv8-a` 以启用 ARMv8 指令集特性。鉴于 1.2.4 审计显示编译器未启用 LSE 原子指令,暂不建议添加 `+lse`,以免引入兼容性问题。
- **警告等级 (缺失)**:主业务代码 (`signal_lib`) 未开启 `-Wall`,建议补全。
- **探测依据**
```bash
grep "CMAKE_CXX_FLAGS_RELEASE" …/CMakeCache.txt
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
```
**2. Device 端方言与架构标志 (Device Dialect & Arch Flags)**
- **关键性****P0**
- **策略解析**
- **核心方言标志**:检测到关键标志 **`-x ivcore`**。
- **深度解读**这是智铠编译器Clang-based识别 `.cu` 文件的“暗号”。不同于 NVCC 自动处理后缀Clang 需要显式告知语言类型。该标志的存在证明构建脚本已针对 CoreX SDK v4.x 进行了正确适配。
- **包含路径**:正确注入了 `-I/usr/local/corex/include`,确保 `cuda_runtime.h` 等头文件可见。
- **位置无关代码**:虽然未显式 grep 到 `-fPIC`,但通常 CMake 处理动态库时会自动添加。若构建静态库(当前情况),此选项非必须。
- **探测依据**
```bash
grep -r "clang++" …
/bin/clang++ -x ivcore …
```
**3. 宏定义管理 (Macro Management)**
- **关键性****P2**
- **策略解析**
- **调试宏**`NDEBUG` 在 Release 模式下正确定义,禁用了 `assert()` 检查,减少运行时开销。
- **平台宏**:未在 CMake 中显式定义 `__ILUVATAR__`。这不是问题,因为 1.2.2 审计已确认 Device 编译器会在预处理阶段自动注入该宏。
- **探测依据**
```bash
grep "CMAKE_CXX_FLAGS_RELEASE" …
… -DNDEBUG
```

View File

@@ -0,0 +1,70 @@
---
tags:
aliases:
- 1.4.4 依赖管理与链接逻辑 (Dependency Management & Linking Logic)
date created: 星期三, 十一月 19日 2025, 7:48:04 晚上
date modified: 星期三, 十一月 19日 2025, 7:48:14 晚上
---
# 1.4.4 依赖管理与链接逻辑 (Dependency Management & Linking Logic)
**1. 依赖获取策略 (Dependency Acquisition Strategy)**
- **关键性****P1**
- **策略解析**
- **在线拉取**:使用了现代 CMake 的 `FetchContent` 模块在线管理 GoogleTest。
- **优势**:相比传统的 `ExternalProject_Add``FetchContent` 在配置阶段即下载源码,使得子项目可以直接参与主构建树的编译,非常适合 CI/CD 自动化环境。
- **配置状态**:已配置 `gtest_force_shared_crt` 等缓存变量,确保运行时库兼容。
- **探测依据**
```cmake
include(FetchContent)
FetchContent_Declare(…)
FetchContent_MakeAvailable(googletest)
```
**2. 头文件暴露与隔离 (Header Visibility & Isolation)**
- **关键性****P0**
- **策略解析**
- **目标级管理**:全面采用 `target_include_directories`。
- **传递性控制**
- `signal_lib` 使用了 **PUBLIC** 属性。这意味着任何链接了 `signal_lib` 的目标(如 `main_app`都会自动继承其头文件搜索路径。这是构建库Library的标准范式。
- GTest 使用了 **SYSTEM INTERFACE**,有效屏蔽了第三方库可能产生的编译器警告。
- **探测依据**
```cmake
target_include_directories(signal_lib PUBLIC …)
```
**3. 链接传递性与作用域 (Linking Transitivity & Scope)**
- **关键性****P0**
- **策略解析**
- **层级清晰**
- `signal_lib` 封装了底层的 SDK 细节(链接 `cudart`),对外暴露为高级接口。
- `main_app` 仅需链接业务库 `signal_lib` 和系统库 `numa`,无需关心底层是否使用了 CUDA。
- **链接模式**
- `main_app` 使用 **PRIVATE** 链接 `numa`(仅自己用,不传递)。
- `signal_lib` 使用 **PUBLIC** 链接 `cudart`(依赖传递)。
- **探测依据**
```cmake
target_link_libraries(main_app PRIVATE signal_lib numa)
target_link_libraries(signal_lib PUBLIC cudart)
```
**4. 运行时路径注入 (RPATH Mechanism)**
- **关键性****P0 (Critical)**
- **策略解析**
- **物理状态**`readelf` 确认二进制文件头部包含 `Library rpath: [/usr/local/corex/lib]`。
- **生成机制**:尽管源码中未显式设置 `CMAKE_INSTALL_RPATH`,但由于链接时使用了库的绝对路径(推测 `cudart` 变量解析为 `/usr/local/corex/lib/libcudart.so`CMake 默认会将非系统路径Non-standard Path自动添加到 Build Tree 的 RPATH 中。
- **运维价值**:这确保了程序部署到生产环境时,**不需要**配置 `LD_LIBRARY_PATH` 环境变量即可运行,极大地降低了运维出错率。
- **探测依据**
```bash
readelf -d …/bin/main_app | grep RPATH
0x000000000000000f (RPATH) Library rpath: [/usr/local/corex/lib]
```

View File

@@ -0,0 +1,64 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 7:50:36 晚上
date modified: 星期三, 十一月 19日 2025, 7:51:09 晚上
---
# 1.4.5 产物输出与安装规则 (Artifact Output & Installation Rules)
**审计综述**
项目采用了\*\*“集中式输出”**策略,极大地方便了开发阶段的调试与运行。然而,主构建脚本**完全缺失了安装规则 (`install`)\*\*,这意味着无法通过 `make install` 将产物打包或部署到系统目录当前仅限于在构建目录Build Tree内运行。
**1. 输出目录布局 (Output Directory Layout)**
- **关键性****P1**
- **策略解析**
- **集中管理**:通过设置 `CMAKE_RUNTIME_OUTPUT_DIRECTORY` 等变量,强制将所有生成物归档到 `${CMAKE_BINARY_DIR}/bin``${CMAKE_BINARY_DIR}/lib`
- **优势**
- 避免了编译产物散落在源码目录深处In-source build pollution
- 简化了 `RPATH` 的管理,因为所有库都在同一个相对路径下。
- 方便了 `numactl` 等工具的调用路径书写(如 1.3.3 中所示)。
- **探测依据**
```cmake
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
```
**2. 安装规则状态 (Installation Rule Status)**
- **关键性****P2 (Missing)**
- **策略解析**
- **现状**`grep "install("` 显示主项目(`app` 和 `signal_lib`**未定义任何安装规则**。仅有的安装指令来自第三方依赖GTest和 SDK 内部文件。
- **影响**:运行 `make install` 将不会复制雷达主程序或库文件。对于目前的 Demo / 原型开发阶段,这是可接受的。
- **改进建议**:若项目进入生产交付阶段,必须补充 `install(TARGETS main_app DESTINATION bin)` 等指令以便生成发布包RPM/DEB
- **探测依据**
```bash
grep -r "install(" …
# (无主项目相关输出)
```
**3. 调试符号与剥离策略 (Debug Symbol Strategy)**
- **关键性****P2**
- **策略解析**
- **物理状态**`file` 命令显示 `not stripped`说明符号表Symbol Table保留可支持 `nm` 或 `gdb` 查看函数名堆栈。
- **调试信息**`readelf` 未找到 `.debug` 段。这是因为当前处于 **Release** 模式(`-O3 -DNDEBUG`),编译器默认不生成 DWARF 源码级调试信息。
- **结论**:这是标准的 Release 构建产物,兼顾了性能(优化开启)和基础可维护性(崩溃时能看到函数名)。
- **探测依据**
```bash
file …/main_app
… not stripped
```
-----
### 1.4 章节最终总结:构建系统与工程配置
至此,我们完成了对 **1.4 构建系统** 的全方位审计。我们确立了该项目的\*\*“构建基线”\*\*
1. **核心**CMake 4.1 + Unix Makefiles。
2. **编排****Host(GCC) + Device(Clang) 显式分离**,禁用原生 CUDA 语言支持。
3. **标志**:适配了 CoreX SDK 的 `-x ivcore` 方言,但缺少 Host 端的架构优化 (`-march=armv8-a`)。
4. **布局**:产物集中输出到 `build/bin`RPATH 自动注入,安装规则待补。

View File

@@ -0,0 +1,65 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 8:00:42 晚上
date modified: 星期三, 十一月 19日 2025, 8:01:00 晚上
---
# 1.5.1 系统运行时与 ABI 基线 (System Runtime & ABI Baseline)
**1. C++ 标准库 ABI 边界 (C++ StdLib ABI Horizon)**
- **关键性****P0**
- **信息解析**
- **当前版本**`GLIBCXX_3.4.24`
- **对应编译器****GCC 7.3.0**。
- **工程约束**
- **C++ 标准**:完美支持 **C++14**
- **C++17 风险**:尽管 GCC 7.3 宣称支持 C++17`std::filesystem` 等特性此时仍位于 `std::experimental` 命名空间,且 ABI 与 GCC 8/9GLIBCXX\_3.4.26+)不兼容。
- **第三方库选型**:在引入预编译的第三方库(如 TensorRT, Arrow必须下载 **CentOS 7 / Ubuntu 18.04** 兼容版本,严禁使用依赖 GCC 9+ 的新版库,否则必报 `version 'GLIBCXX_3.4.26' not found`
- **探测依据**
```bash
strings /usr/lib64/libstdc++.so | grep "GLIBCXX" | tail -n 1
GLIBCXX_3.4.24
ls -l /usr/lib64/libstdc++.so
… -> libstdc++.so.0.24
```
**2. 系统基础 C 运行库 (System Glibc)**
- **关键性****P0**
- **信息解析**
- **版本****glibc 2.28**。
- **评价**:这是 Kylin V10 SP1 的出厂标配。相比 CentOS 7 的 glibc 2.17,它提供了更好的 `memcpy` 性能和更现代的 syscall 封装,足以支撑绝大多数现代雷达信号处理中间件。
- **探测依据**
```bash
ldd --version
ldd (GNU libc) 2.28
```
**3. 安全与压缩基础设施 (Security & Compression Infra)**
- **关键性****P1**
- **信息解析**
- **OpenSSL**:版本 **1.1.1f** (LTS)。支持 TLS 1.3。这是构建安全数据链路(如 HTTPS, Secure gRPC的基石且版本未过时无需手动升级。
- **Zlib**:版本 **1.2.11**。标准且稳定,用于 HDF5 或 Log 压缩无压力。
- **探测依据**
```bash
openssl version
OpenSSL 1.1.1f 31 Mar 2020
```
**4. 全局库冲突检测 (Global Conflict Detection)**
- **关键性****P2**
- **信息解析**
- **状态****Clean (无污染)**。
- **解读**:在 `/usr/local` 下未发现“私藏”的 `libstdc++.so` 或 `libc.so`。这意味着系统加载器Loader不会因为搜索路径顺序问题加载到错误的运行时库极大地降低了调试难度。
- **探测依据**
```bash
find /usr/local -name "libstdc++.so*" …
(Empty Result)
```

View File

@@ -0,0 +1,51 @@
---
tags:
date created: 星期三, 十一月 19日 2025, 8:01:59 晚上
date modified: 星期三, 十一月 19日 2025, 8:10:41 晚上
---
# 1.5.2 Host 端信号处理与数学库 (Host Signal Processing & Math Libs)
**1. 快速傅里叶变换库 (FFTW3)**
- **关键性****P0**
- **信息解析**
- **版本****3.5.8**。这是 FFTW3 系列非常稳定的版本。
- **精度支持**
- `libfftw3f.so` (单精度 float):用于处理雷达原始 IQ 数据(通常为 float 或 int16
- `libfftw3.so` (双精度 double):用于高精度后处理算法。
- `libfftw3l.so` (长双精度 long double):用于极端精度需求(较少用)。
- **并行能力**:提供了 `_omp` (OpenMP) 和 `_threads` (Pthreads) 版本。建议在代码中优先链接 `libfftw3f_omp` 以利用多核优势。
- **探测依据**
```bash
ls -l /usr/lib64/libfftw3f.so
… libfftw3f.so.5.8
```
**2. 线性代数加速库 (OpenBLAS)**
- **关键性****P0**
- **信息解析**
- **版本****0.3.10**。
- **架构优化**OpenBLAS 0.3.x 系列对 ARMv8 (Cortex-A57/A72 等微架构) 有良好的支持,能自动检测并使用 NEON 指令集。这对于 CPU 端波束合成(矩阵乘法)至关重要。
- **头文件**`/usr/include/openblas/cblas.h` 已就绪,可直接使用标准 CBLAS 接口。
- **探测依据**
```bash
ls -l /usr/lib64/libopenblas.so
… libopenblas-r0.3.10.so
```
**3. C++ 矩阵模板库 (Eigen3)**
- **关键性****P1**
- **信息解析**
- **状态****Installed**。
- **特性**Eigen 是纯头文件库Header-only无需编译链接。它能自动检测并调用后端的 BLAS 库(如 OpenBLAS进行加速是现代 C++ 算法开发的首选。
- **探测依据**
```bash
ls -d /usr/include/eigen3
/usr/include/eigen3
```

View File

@@ -0,0 +1,56 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 8:16:48 晚上
date modified: 星期三, 十一月 19日 2025, 8:17:14 晚上
---
# 1.5.3 通信、存储与基础设施中间件 (Comm, Storage & Infra Middleware)
**审计综述**
Host 端数据基础设施已经补齐。我们确认 Protobuf 编译器已安装可支持控制协议的开发ZeroMQ 和 HDF5 库均已正确链接到系统库,数据传输和落盘能力已具备。
**1. 通信与协议中间件 (Comm & Protocols)**
- **关键性****P0**
- **信息解析**
- **Protobuf 编译器**`protoc` (v3.14.0) 已就绪。这使得开发者可以编译最新的 `.proto` 文件,用于控制指令或数据结构的版本化管理。
- **ZeroMQ (ZMQ)**:库文件 `libzmq.so.2.4` 存在。这是构建雷达后端实时数据发布/订阅Pub/Sub消息总线的核心传输层。
- **评估**ZeroMQ (v5.x) 和 Protobuf (v3.x) 均为现代版本Host 端具备高性能数据通信能力。
- **探测依据**
```bash
protoc --version
libprotoc 3.14.0
ls -l /usr/lib64/libzmq.so*
lrwxrwxrwx … /usr/lib64/libzmq.so -> libzmq.so.2.4
```
**2. 数据存储中间件 (Storage Middleware)**
- **关键性****P0**
- **信息解析**
- **HDF5 编译器**`h5cc` 已就绪。`h5cc` 是 HDF5 库的专用编译器 Wrapper它的存在证明 HDF5 的头文件和开发库已正确安装。
- **用途**HDF5 是存储雷达高维原始回波数据IQ Data的首选标准格式。
- **探测依据**
```bash
which h5cc
/usr/bin/h5cc
ls -l /usr/include/hdf5.h
-rw-r--r-- 1 root root 2561 … /usr/include/hdf5.h
```
**3. 日志与配置设施 (Logging & Config Infra)**
- **关键性****P1**
- **信息解析**
- **日志 (Glog)**`libglog.so.0.0` 存在。Glog 提供了高性能的线程安全日志、VLOG 分级和断言机制,有助于雷达后端代码的稳定运行和故障排除。
- **配置 (YAML)**`libyaml-cpp.so.6.3` 存在。YAML 是比 JSON 更适合人工维护的配置文件格式,常用于存储复杂的雷达波位表或系统参数。
- **探测依据**
```bash
ls -l /usr/lib64/libglog.so*
… /usr/lib64/libglog.so.0.0
ls -l /usr/lib64/libyaml-cpp.so*
… /usr/lib64/libyaml-cpp.so.6.3
```

View File

@@ -0,0 +1,55 @@
---
tags: []
aliases:
- 1.6.1 异构调试与内存安全 (Heterogeneous Debugging & Memory Safety)
date created: 星期三, 十一月 19日 2025, 8:31:15 晚上
date modified: 星期三, 十一月 19日 2025, 8:31:38 晚上
---
# 1.6.1 异构调试与内存安全 (Heterogeneous Debugging & Memory Safety)
**审计综述**
系统在调试层面具备极高的能力Host 端 GDB 基础稳固Device 端拥有专用调试器。然而ASAN 库的安装路径不标准,需要手动配置系统链接器以启用。
**1. GDB 调试前端 (GDB Debugging Frontend)**
- **关键性****P0**
- **信息解析**
- **版本与支持**GDB 版本为 **9.2** (Kylin 定制版),且 **Python 接口已激活**
- **价值**Python 接口是 VSCode / CLion 等 IDE 实现高级断点、复杂结构体可视化以及 GDB 脚本扩展的必要条件。
- **探测依据**
```bash
gdb --version
GNU gdb (GDB) KylinOS 9.2-3…
gdb -q -ex 'pi print(…)' -ex quit
Python support is active
```
**2. 异构调试工具链 (Heterogeneous Debugger Tools)**
- **关键性****P0**
- **信息解析**
- **专用调试器****ixgdb** (Iluvatar GDB) 存在。这是用于 GPU Kernel 级断点调试的专用工具,等同于 NVIDIA 的 `cuda-gdb`。
- **远程支持**`gdbserver` 存在。可用于在远程开发机器(如 Windows/MacOS上通过 VSCode/SSH 附件到 Kylin 服务器上的进程进行调试。
- **探测依据**
```bash
ls -l /usr/local/corex/bin/*gdb*
/usr/local/corex/bin/ixgdb
/usr/local/corex/bin/gdbserver
```
**3. 内存安全检测工具 (Memory Safety Checkers)**
- **关键性****P1**
- **信息解析**
- **Valgrind****v3.13.0** 已安装,可用于 Host 端代码的内存泄漏和越界访问检测。
- **ASAN (Address Sanitizer)**:库文件 `libasan.so` **已安装**在 GCC 7.3 的私有路径 (`/usr/lib/gcc/…`)。
- **风险与修正**ASAN 库默认对系统链接器不可见。已通过创建 `/etc/ld.so.conf.d/gcc7-asan.conf` 文件并执行 `ldconfig` 解决了此路径问题。
- **探测依据**
```bash
which valgrind && valgrind --version
/usr/bin/valgrind valgrind-3.13.0
```

View File

@@ -0,0 +1,57 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 8:34:02 晚上
date modified: 星期三, 十一月 19日 2025, 8:34:18 晚上
---
# 1.6.2 性能分析与实时监控 (Performance Analysis & Real-time Monitoring)
**审计综述**
系统在 Host 端和 Device 端均具备强大的性能监控和分析能力。已确认关键工具 `perf``ixprof` 存在且内核支持完整的事件追踪。NUMA 内存分配均衡,为高性能雷达应用提供了可靠的诊断基础。
**1. GPU 性能分析工具链 (GPU Profiling Toolchain)**
- **关键性****P0**
- **信息解析**
- **CUpti 接口**`libcupti.so.2.89` 存在。**CUpti (CUDA Profiling Tools Interface)** 是所有高级 GPU 性能工具与驱动通信的底层接口,它的存在证明 GPU 侧的性能数据采集功能已激活。
- **专用 Profiler**`ixprof` (Iluvatar Profiler) 存在。这是用于采集 GPU 单元利用率、显存带宽和 Kernel 时序等指标的专用工具,可用于替代 `nvprof`
- **探测依据**
```bash
ls -l /usr/local/corex/lib/libcupti.so*
… libcupti.so.2.89
ls -l /usr/local/corex/bin/ixprof
/usr/local/corex/bin/ixprof
```
**2. Linux 内核级性能分析 (Kernel Performance Analysis)**
- **关键性****P0**
- **信息解析**
- **Perf 工具**`/usr/bin/perf` 存在。Perf 已识别出 **Bus Cycles**、**Cache Misses**、**CPU Cycles** 等 ARMv8 硬件性能计数器事件。
- **内核追踪 (Ftrace)**`/sys/kernel/debug/tracing/available_tracers` 文件存在(虽然大小为 0证明 `debugfs` 已挂载,内核支持 **ftrace**。这为分析锁竞争、调度延迟等实时性问题提供了深度追踪能力。
- **探测依据**
```bash
which perf && perf list
/usr/bin/perf [Hardware events listed]
ls -l /sys/kernel/debug/tracing/available_tracers
… available_tracers
```
**3. 实时系统与 NUMA 监控 (Real-time & NUMA Monitoring)**
- **关键性****P1**
- **信息解析**
- **增强任务管理**`htop` 已安装。这是比 `top` 更直观的实时任务管理器,有利于在运行雷达程序时实时观察 CPU 亲和性Affinity是否正确绑定在 Node 1 (CPU 16-31) 上。
- **NUMA 内存分配**`numastat -m` 显示 Node 0 和 Node 1 的物理内存总量和使用量**大致均衡**。当前没有明显的跨节点内存压力。
- **默认策略**`numactl --show` 显示当前 shell 默认策略是 `policy: default`,且绑定到所有 CPU (0-31) 和所有 Node (0/1)。
- **重申风险**:这再次印证了为什么必须在启动 `main_app` 时使用 `numactl --cpunodebind=1 --membind=1` 强制覆盖默认策略。
- **探测依据**
```bash
which htop
/usr/bin/htop
numactl --show
policy: default
```

View File

@@ -0,0 +1,50 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 8:38:01 晚上
date modified: 星期三, 十一月 19日 2025, 8:40:07 晚上
---
# 1.6.3 版本控制与数据基线管理 (Versioning & Data Baseline Management)
**审计综述**
系统具备稳固的版本控制基础,且已补齐了管理大型二进制文件所需的关键工具 **Git LFS**。Docker 的存在为构建标准化 CI/CD 流程提供了运行环境。
**1. Git 版本状态 (Git Version Status)**
- **关键性****P1**
- **信息解析**
- **版本****Git 2.27.0**。该版本较为新近,支持所有现代 Git 功能(如稀疏检出、新版 Diff 算法)。
- **平台**:运行于 `linux arm64`
- **探测依据**
```bash
git --version
git version 2.27.0
```
**2. 大文件存储支持 (Git LFS Support)**
- **关键性****P0**
- **信息解析**
- **状态****Git LFS v2.10.0** 已安装,且已通过 `install --system` 进行全局初始化。
- **价值**:解决了雷达项目管理大文件(如校准系数、模型权重)的痛点,确保 Git 仓库体积不会过度膨胀。
- **探测依据**
```bash
which git-lfs && git lfs version
/usr/bin/git-lfs
git-lfs/2.10.0 (…)
```
**3. CI/CD 环境工具 (Automation Tools)**
- **关键性****P1**
- **信息解析**
- **容器化****Docker** 运行时已安装 (`/usr/bin/docker`)。
- **价值**:这是将项目构建环境标准化(例如:将 GCC 7.3 和 Clang 18.1 封装在 Docker 镜像中)的关键,可确保 CI/CD 流程的构建结果具有高度可复现性。
- **探测依据**
```bash
which docker
/usr/bin/docker
```