NUMA架构介绍
NUMA 架构详解
NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问)架构不同,NUMA 架构中每个处理器访问不同内存区域的速度可能不同。以下是 NUMA 架构的详细介绍,包括架构细节、CPU 和内存的组合方式、缓存层次、涉及的硬件及其作用,以及 NUMA 架构的优势和原因。
1. NUMA 架构的基本概念
-
NUMA 节点(NUMA Node):
-
一个 NUMA 节点通常由一个或多个 CPU 核心(Processor Cores)和与之直接连接的本地内存(Local Memory)组成。
-
每个 NUMA 节点可以独立运行,拥有自己的内存控制器和内存通道。
-
多个 NUMA 节点通过高速互联网络(如 Intel 的 QPI 或 AMD 的 Infinity Fabric)连接。
-
-
本地内存(Local Memory):
-
每个 NUMA 节点的内存是其本地内存,访问速度最快,延迟最低。
-
-
远程内存(Remote Memory):
-
当一个 NUMA 节点访问另一个 NUMA 节点的内存时,需要通过互联网络,访问速度较慢,延迟较高。
-
-
内存访问延迟的不一致性:
-
在 NUMA 架构中,内存访问延迟取决于内存的位置。本地内存访问速度快,远程内存访问速度慢,因此称为“非统一内存访问”。
-
2. NUMA 架构的细节
(1)CPU 和内存的组合方式
-
多处理器系统:
-
NUMA 架构通常用于多处理器系统,每个处理器(或处理器组)与一部分内存直接相连。
-
例如,一个系统可能有 2 个 NUMA 节点,每个节点包含 16 个 CPU 核心和 64GB 本地内存,总内存为 128GB。
-
-
内存控制器:
-
每个 NUMA 节点有自己的内存控制器,负责管理本地内存的访问。
-
内存控制器直接连接到 CPU 和本地内存,减少了访问延迟。
-
-
互联网络:
-
NUMA 节点之间通过高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric 或 PCIe)连接。
-
当一个 NUMA 节点需要访问另一个节点的内存时,数据通过互联网络传输。
-
(2)缓存层次(Cache Hierarchy)
-
L1 缓存:
-
每个 CPU 核心有自己的 L1 缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
L1 缓存速度最快,容量最小,通常为几十 KB。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享 L2 缓存。
-
L2 缓存速度比 L1 缓存稍慢,容量较大,通常为几百 KB 到几 MB。
-
-
L3 缓存:
-
每个 NUMA 节点内的所有 CPU 核心共享 L3 缓存。
-
L3 缓存速度比 L2 缓存慢,容量最大,通常为几十 MB。
-
L3 缓存在 NUMA 架构中起到重要作用,可以减少对内存的访问次数,尤其是远程内存访问。
-
(3)内存访问路径
-
本地内存访问:
-
CPU 访问本地内存时,数据直接通过内存控制器读取或写入,延迟低,带宽高。
-
-
远程内存访问:
-
CPU 访问远程内存时,数据需要通过互联网络传输到目标 NUMA 节点,延迟较高,带宽较低。
-
(4)NUMA 拓扑结构
-
NUMA 架构的拓扑结构可以是多种形式,例如:
-
对称 NUMA:所有 NUMA 节点之间的互联延迟相同。
-
非对称 NUMA:某些 NUMA 节点之间的互联延迟可能比其他节点更高。
-
3. NUMA 架构涉及的硬件及其作用
(1)CPU 核心(Processor Cores)
-
作用:执行计算任务。
-
特点:每个核心有自己的 L1 和 L2 缓存,核心之间通过共享的 L3 缓存和内存控制器访问内存。
(2)内存控制器(Memory Controller)
-
作用:管理 CPU 对内存的访问。
-
特点:每个 NUMA 节点有自己的内存控制器,负责本地内存的访问。
(3)高速缓存(Cache)
-
L1 缓存:最快但容量最小,用于存储核心最常用的指令和数据。
-
L2 缓存:速度较快,容量较大,用于存储核心或核心组的常用数据。
-
L3 缓存:速度较慢但容量最大,用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
(4)互联网络(Interconnect)
-
作用:连接多个 NUMA 节点,实现节点之间的数据传输。
-
特点:高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric)决定了远程内存访问的延迟和带宽。
(5)内存(Memory)
-
本地内存:每个 NUMA 节点的本地内存,访问速度快。
-
远程内存:其他 NUMA 节点的内存,访问速度较慢。
4. NUMA 架构的优势
(1)扩展性
-
NUMA 架构支持更多的处理器和更大的内存容量。
-
每个 NUMA 节点可以独立扩展,系统可以通过增加 NUMA 节点来提升计算能力和内存容量。
(2)性能优化
-
数据局部性:
-
NUMA 架构通过将任务和数据分配到本地内存,减少了远程内存访问的次数,从而降低了内存访问延迟。
-
操作系统和应用程序可以通过 NUMA 感知的调度策略,优化任务和数据的分布。
-
-
高带宽:
-
每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
-
(3)资源隔离
-
NUMA 架构可以将任务和内存资源隔离到不同的 NUMA 节点,减少资源竞争,提高系统稳定性。
5. NUMA 架构优势的原因
(1)内存访问延迟的优化
-
在传统的 UMA 架构中,所有处理器共享同一个内存池,随着处理器数量的增加,内存访问竞争加剧,导致延迟增加。
-
NUMA 架构通过将内存分布到多个节点,减少了内存访问竞争,降低了延迟。
(2)带宽的提升
-
每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
-
在 UMA 架构中,所有处理器共享有限的内存带宽,容易成为性能瓶颈。
(3)扩展性的提升
-
NUMA 架构通过增加 NUMA 节点来扩展系统,避免了 UMA 架构中总线带宽和内存控制器的瓶颈问题。
6. NUMA 架构的应用场景
-
高性能计算(HPC):
-
NUMA 架构适合需要大量内存和计算资源的科学计算、气象模拟等场景。
-
-
大型数据库系统:
-
数据库系统(如 OLAP、数据仓库)通常需要处理大量数据,NUMA 架构可以优化内存访问性能。
-
-
虚拟化环境:
-
在云计算和数据中心中,NUMA 架构可以优化虚拟机的资源分配,提高虚拟化性能。
-
7. NUMA 架构的挑战
-
编程复杂性:
-
开发者需要显式管理数据局部性,增加了编程难度。
-
-
负载均衡:
-
任务分配需要兼顾 NUMA 节点的计算能力和内存访问延迟,避免性能瓶颈。
-
-
操作系统支持:
-
操作系统需要提供 NUMA 感知的调度和内存分配策略,以充分发挥 NUMA 架构的优势。
-
总结
NUMA 架构通过将内存分布到多个节点,解决了多处理器系统中的内存访问瓶颈问题,提升了系统的扩展性和性能。其优势主要体现在内存访问延迟的优化、带宽的提升和扩展性的增强。尽管 NUMA 架构在编程和负载均衡方面存在挑战,但在高性能计算、大型数据库和虚拟化环境中,NUMA 架构表现出色。通过操作系统、应用程序和硬件的协同优化,可以充分发挥 NUMA 架构的优势。
NUMA架构中的本地内存是指L1、L2、L3 cache缓存还是RAM
在 NUMA(Non-Uniform Memory Access)架构 中,本地内存 并不是指 CPU 的 L1、L2 或 L3 缓存,而是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。缓存(L1、L2、L3)和本地内存是两个不同的概念,它们在 NUMA 架构中扮演不同的角色。以下是对这些概念的详细解释:
1. 本地内存(Local Memory)
-
定义:
-
本地内存是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。
-
每个 NUMA 节点都有自己的本地内存,由该节点的内存控制器管理。
-
本地内存的访问延迟最低,带宽最高,因为数据不需要通过互联网络传输。
-
-
位置:
-
本地内存位于 SoC(System on Chip)之外,通常是主板上的 DRAM 模块。
-
例如,在一个双路服务器中,每个 CPU 插槽(Socket)连接一部分 DRAM,这部分 DRAM 就是该 CPU 的本地内存。
-
-
作用:
-
本地内存用于存储操作系统和应用程序的数据。
-
在 NUMA 架构中,操作系统和应用程序会尽量将数据分配到本地内存,以减少访问延迟。
-
2. 缓存(Cache)
缓存是 CPU 内部的高速存储器,用于加速对内存数据的访问。缓存分为三级:L1、L2 和 L3。
-
L1 缓存:
-
每个 CPU 核心独享的缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
速度最快,容量最小(通常为几十 KB)。
-
用于存储核心最常用的指令和数据。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享的缓存。
-
速度比 L1 缓存稍慢,容量较大(通常为几百 KB 到几 MB)。
-
用于存储核心或核心组的常用数据。
-
-
L3 缓存:
-
所有 CPU 核心共享的缓存,通常在一个 NUMA 节点内共享。
-
速度比 L2 缓存慢,但容量最大(通常为几十 MB)。
-
用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
-
-
缓存的作用:
-
缓存用于减少 CPU 访问内存的次数,从而降低内存访问延迟。
-
在 NUMA 架构中,缓存的作用尤为重要,因为它可以减少对远程内存的访问。
-
3. 本地内存与缓存的关系
-
缓存是 CPU 内部的高速存储器,而 本地内存是外部的物理内存(DRAM)。
-
缓存用于加速对内存数据的访问,而本地内存是实际存储数据的地方。
-
当 CPU 需要访问数据时,会首先检查缓存(L1 → L2 → L3),如果缓存中没有所需数据(缓存未命中),才会访问本地内存或远程内存。
4. SoC 上的内存
-
SoC(System on Chip) 是一种将 CPU、内存控制器、I/O 接口等集成在一个芯片上的设计。
-
在 SoC 中,内存控制器通常集成在芯片上,但 物理内存(DRAM) 仍然位于芯片外部。
-
因此,本地内存 是指与 SoC 上的内存控制器直接连接的物理内存,而不是 SoC 内部的缓存。
缓存、RAM、ROM分别是什么
在计算机系统中,缓存(Cache)、RAM(Random Access Memory,随机存取存储器) 和 ROM(Read-Only Memory,只读存储器) 是三种常见的内存类型,它们在系统中扮演不同的角色。除此之外,还有其他一些常见的内存类型。以下是它们的详细介绍:
1. 缓存(Cache)
-
定义:
-
缓存是一种高速存储器,用于存储 CPU 频繁访问的数据和指令,以减少访问主内存(RAM)的次数。
-
缓存通常集成在 CPU 内部,速度远快于主内存。
-
-
特点:
-
速度快:缓存的访问速度比 RAM 快得多,通常以纳秒(ns)为单位。
-
容量小:缓存的容量远小于 RAM,通常为几 KB 到几十 MB。
-
层级结构:现代 CPU 通常有多级缓存(L1、L2、L3),L1 最快但容量最小,L3 最慢但容量最大。
-
-
作用:
-
缓存用于加速 CPU 对数据的访问,减少 CPU 等待数据的时间,从而提高系统性能。
-
2. RAM(Random Access Memory,随机存取存储器)
-
定义:
-
RAM 是计算机的主内存,用于临时存储正在运行的程序和数据。
-
RAM 是易失性存储器,断电后数据会丢失。
-
-
特点:
-
速度快:RAM 的访问速度比 ROM 快,但比缓存慢。
-
容量大:RAM 的容量通常为几 GB 到几百 GB。
-
随机访问:可以随机访问任意地址的数据,访问时间与数据位置无关。
-
-
类型:
-
DRAM(Dynamic RAM,动态随机存取存储器):
-
需要定期刷新以保持数据,速度较慢但成本低,常用于主内存。
-
-
SRAM(Static RAM,静态随机存取存储器):
-
不需要刷新,速度快但成本高,通常用于缓存。
-
-
-
作用:
-
RAM 用于存储操作系统、应用程序和用户数据,是计算机运行时的主要工作区域。
-
3. ROM(Read-Only Memory,只读存储器)
-
定义:
-
ROM 是一种非易失性存储器,用于存储固件或永久性数据。
-
数据在出厂时写入,通常不能修改或只能通过特殊方式修改。
-
-
特点:
-
非易失性:断电后数据不会丢失。
-
只读性:数据通常只能读取,不能随意写入。
-
速度较慢:ROM 的访问速度比 RAM 慢。
-
-
类型:
-
PROM(Programmable ROM,可编程只读存储器):
-
出厂后可以通过特殊设备写入数据,但只能写入一次。
-
-
EPROM(Erasable Programmable ROM,可擦除可编程只读存储器):
-
可以通过紫外线擦除并重新写入数据。
-
-
EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程只读存储器):
-
可以通过电信号擦除并重新写入数据。
-
-
Flash Memory(闪存):
-
一种特殊的 EEPROM,广泛应用于 U 盘、SSD 和嵌入式系统中。
-
-
-
作用:
-
ROM 用于存储固件(如 BIOS、UEFI)和嵌入式系统的程序代码。
-
4. 其他常见的内存类型
(1)虚拟内存(Virtual Memory)
-
定义:
-
虚拟内存是一种内存管理技术,通过将部分数据存储到磁盘(如硬盘或 SSD)来扩展可用内存。
-
-
作用:
-
当物理内存(RAM)不足时,操作系统会将不常用的数据转移到磁盘,腾出空间给当前运行的程序。
-
虚拟内存使得程序可以使用比物理内存更大的地址空间。
-
(2)显存(Video RAM,VRAM)
-
定义:
-
显存是显卡上的专用内存,用于存储图形数据(如纹理、帧缓冲区)。
-
-
特点:
-
显存通常比主内存更快,专为图形处理优化。
-
常见的显存类型包括 GDDR(Graphics Double Data Rate)和 HBM(High Bandwidth Memory)。
-
-
作用:
-
显存用于加速图形渲染和显示输出,是游戏和图形设计等应用的关键。
-
(3)寄存器(Register)
-
定义:
-
寄存器是 CPU 内部的高速存储器,用于存储指令、地址和临时数据。
-
-
特点:
-
速度最快,容量最小(通常为几十到几百字节)。
-
寄存器直接参与 CPU 的运算和控制。
-
-
作用:
-
寄存器用于存储 CPU 当前正在处理的数据和指令,是 CPU 运行的核心部分。
-
(4)非易失性存储器(Non-Volatile Memory,NVM)
-
定义:
-
非易失性存储器是一种断电后数据不会丢失的存储器。
-
-
类型:
-
NAND Flash:用于 SSD、U 盘和存储卡。
-
NOR Flash:用于嵌入式系统和固件存储。
-
3D XPoint:一种新型非易失性存储器,速度接近 DRAM,用于高性能存储设备(如 Intel 的 Optane)。
-
-
作用:
-
非易失性存储器用于长期存储数据和程序。
-
5. 内存的层级结构
计算机系统中的内存通常按速度和容量分为多个层级,从快到慢依次为:
-
寄存器:速度最快,容量最小。
-
缓存(L1、L2、L3):速度较快,容量较小。
-
主内存(RAM):速度较慢,容量较大。
-
虚拟内存(磁盘):速度最慢,容量最大。
这种层级结构通过将频繁访问的数据存储在速度更快的存储器中,优化了系统的整体性能。
总结
-
缓存:高速存储器,用于加速 CPU 对数据的访问。
-
RAM:主内存,用于临时存储运行中的程序和数据。
-
ROM:只读存储器,用于存储固件和永久性数据。
-
其他内存:包括虚拟内存、显存、寄存器和非易失性存储器等,各自在系统中扮演不同的角色。
这些内存类型共同协作,构成了计算机系统的存储层次结构,确保了系统的高效运行。
NUMA架构和sched_domain的关系
NUMA(Non-Uniform Memory Access)架构和 sched_domain 是操作系统调度和内存管理中的核心概念,尤其在多核系统中,它们的关系非常紧密。以下将详细介绍它们的关系,并结合代码和适用场景进行说明。
1. NUMA 架构简介
NUMA 是一种多处理器系统的内存设计架构,其特点是:
-
非均匀内存访问:每个处理器(或处理器组)有自己的本地内存,访问本地内存速度快,访问其他处理器的内存(远程内存)速度慢。
-
节点(Node):NUMA 系统将处理器和内存划分为多个节点,每个节点包含一组 CPU 和本地内存。
-
性能优化:通过减少远程内存访问,提升系统性能。
2. sched_domain 简介
sched_domain 是 Linux 内核调度器中的一个数据结构,用于描述 CPU 的调度层次结构。调度域将 CPU 分组,每个组内的 CPU 共享某些特性(如缓存、NUMA 节点等),调度器根据这些特性优化任务调度和负载均衡。
-
层次结构:调度域可以分层,例如:
-
核心级:同一物理核心的 CPU。
-
套接字号:同一 CPU 插槽的 CPU。
-
NUMA 节点级:同一 NUMA 节点的 CPU。
-
-
负载均衡:调度器会在同一调度域内的 CPU 之间进行负载均衡,避免某些 CPU 过载。
3. NUMA 和 sched_domain 的关系
在 NUMA 系统中,sched_domain 的层次结构与 NUMA 节点紧密相关。调度器会根据 NUMA 节点的特性优化任务调度和负载均衡,具体关系如下:
3.1 NUMA 节点作为调度域
-
每个 NUMA 节点可以作为一个调度域。
-
调度器会优先在同一 NUMA 节点内的 CPU 之间进行负载均衡,以减少远程内存访问的开销。
3.2 任务绑定
-
调度器会尽量将任务绑定到同一 NUMA 节点的 CPU 上,以利用本地内存的优势。
-
如果任务需要访问大量内存,调度器会优先将其分配到内存所在的 NUMA 节点。
3.3 跨节点调度
-
当本地节点负载过高时,调度器可能会将任务迁移到其他 NUMA 节点的 CPU 上。
-
跨节点迁移会带来性能损失(远程内存访问),因此调度器会尽量避免频繁的跨节点迁移。
4. 代码分析
Linux 内核中,sched_domain 和 NUMA 的关系主要通过以下代码体现:
4.1 调度域初始化
在 Linux 内核中,调度域的初始化是通过 build_sched_domains() 函数完成的。该函数会根据系统的拓扑结构(包括 NUMA 节点)创建调度域。
// 内核源码:kernel/sched/core.c
static int build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *attr)
{// 遍历所有 CPU,构建调度域for_each_cpu(cpu, cpu_map) {// 根据 NUMA 节点创建调度域sd = build_sched_domain(topology_core_cpumask(cpu), attr, sd, cpu);if (!sd)goto error;}return 0;
error:return -ENOMEM;
}
4.2 NUMA 节点与调度域绑定
在调度域的构建过程中,内核会通过 topology.c 中的函数获取 NUMA 节点的信息,并将其与调度域绑定。
// 内核源码:arch/x86/kernel/smpboot.c
static void __init init_sched_domains(void)
{// 获取 NUMA 节点信息for_each_online_node(node) {// 为每个 NUMA 节点创建调度域sd = build_sched_domain(node_to_cpumask(node), NULL, NULL, 0);if (!sd)panic("Failed to build sched domains for node %d", node);}
}
4.3 负载均衡与 NUMA
在负载均衡过程中,调度器会优先选择同一 NUMA 节点内的 CPU。
// 内核源码:kernel/sched/fair.c
static int load_balance(int this_cpu, struct rq *this_rq, struct sched_domain *sd, enum cpu_idle_type idle)
{// 检查 NUMA 节点if (sd->flags & SD_NUMA) {// 优先选择同一 NUMA 节点内的 CPUgroup = find_busiest_group(sd, this_cpu, &imbalance, &sd_idle);}// 执行负载均衡return __load_balance(this_cpu, this_rq, sd, idle, &imbalance);
}
5. 适用场景
5.1 高性能计算(HPC)
-
场景:在 HPC 应用中,任务需要频繁访问内存。
-
优化:通过将任务绑定到同一 NUMA 节点的 CPU 上,减少远程内存访问,提升性能。
5.2 虚拟化环境
-
场景:在虚拟机(VM)中运行内存密集型应用。
-
优化:将虚拟机的 vCPU 绑定到同一 NUMA 节点,避免跨节点内存访问。
5.3 数据库服务器
-
场景:数据库服务器需要高效处理大量数据。
-
优化:通过 NUMA 感知的调度策略,将数据库进程绑定到本地内存节点,减少延迟。
6. 总结
NUMA 架构和 sched_domain 的关系主要体现在调度器如何利用 NUMA 节点的特性来优化任务调度和负载均衡。通过将 NUMA 节点作为调度域的一部分,调度器可以更好地管理多核系统中的资源,提升整体性能。在实际应用中,合理配置调度域和 NUMA 绑定可以显著提升内存密集型应用的性能。
相关文章:
NUMA架构介绍
NUMA 架构详解 NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问…...
计算机二级MS之PPT
声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点1cm25px…...
python中采用opencv作常规的图片处理的方法~~~
在python中,我们经常会需要对图片做灰度/二值化/模糊等处理,这时候opencv就是我们的好帮手了,下面我来介绍一下相关用法: 首先,需要安装opencv-python库: 然后,在你的代码中引用: import cv2 最后就是代码了&#x…...
deepseek在pycharm 中的配置和简单应用
对于最常用的调试python脚本开发环境pycharm,如何接入deepseek是我们窥探ai代码编写的第一步,熟悉起来总没坏处。 1、官网安装pycharm社区版(免费),如果需要安装专业版,需要另外找破解码。 2、安装Ollama…...
Redis数据结构,渐进式遍历,数据库管理
1.Redis的其他数据结构 前面我们主要讲述了Redis中比较常用的集中数据结构String,List,Hash,Set,Zset,但这并不代表Redis只用这几种数据结构还有如Streams,Geospatial,Hyperloglog,…...
【CSS 】Class Variance Authority CSS 类名管理工具库
1.背景、什么是 CVA? Class Variance Authority (CVA) 是一个用于管理 CSS 类名 的工具库,特别适合在 React 或 Vue 等前端框架中使用。它可以帮助你更轻松地处理组件的 样式变体(Variants),比如按钮的不同状态&#…...
[Python入门学习记录(小甲鱼)]第5章 列表 元组 字符串
第5章 列表 元组 字符串 5.1 列表 一个类似数组的东西 5.1.1 创建列表 一个中括号[ ] 把数据包起来就是创建了 number [1,2,3,4,5] print(type(number)) #返回 list 类型 for each in number:print(each) #输出 1 2 3 4 5#列表里不要求都是一个数据类型 mix [213,"…...
《量子潮涌下,DataWorks中AI模型训练框架的变革征途》
在科技迅猛发展的当下,量子计算技术犹如一颗璀璨新星,正以惊人的速度改写着人类的计算格局。这一颠覆性的技术,为人工智能(AI)领域带来了前所未有的发展契机,尤其是在处理海量数据方面,展现出传…...
【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程
记录工作实践 这是全新的系列,一直有个游戏制作梦 感谢AI时代,让这一切变得可行 长欢迎共同见证,期更新,欢迎保持关注,待到游戏上架那一天,一起玩 面向AI编程的godot独立游戏制作流程实录001 本期是第…...
LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
vs2019中属性设置 报错: vs2019中属性设置为 报错: 设置为 报错: 设置为 报错: 原因:是由于ncnn和paddleLite的库同时使用会冲突。只能用其中之一。 后面部署降lite都换成了ncnn就可以了。 要么都用ncnn&a…...
docker-compose部署mongodb副本集集群
生成密钥文件 openssl rand -base64 756 > mongodb.key chmod 400 mongodb.key # 权限必须为400:ml-citation{ref="4" data="citationList"} chown 999:999 mongodb.key # MongoDB容器用户ID为999:ml-citation{ref="4" data="…...
SpringBoot校园管理系统设计与实现
在现代校园管理中,一个高效、灵活的管理系统是不可或缺的。本文将详细介绍基于SpringBoot的校园管理系统的设计与实现,涵盖管理员、用户和院校管理员三大功能模块,以及系统的部署步骤和数据库配置。 管理员功能模块 管理员是系统的核心管理…...
[QT]开发全解析:从概念到实战
文章目录 Qt 框架入门与应用开发指南一、Qt 框架概述1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt 的应用场景1.7 Qt 的成功案例 二、Qt 的开发工具概述Qt CreatorVisual StudioEclipse 三、认识 Qt Creator3.1 Qt Creator 概览3.2 使用 Qt C…...
【pyqt】(十二)文本框
控件-文本框 文本框主要有两类,为富文本框(QTextEdit)和纯文本框(QPlainTextEdit),在学习新的控件的时候, 需要掌握的内容主要除了属性之外,其信号触发方法也非常重要。还可以利用Designer来辅助我们进行学习,尤其是利…...
汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障
故障现象 一辆2023款丰田雷凌汽油版车,搭载1.5 L发动机,累计行驶里程约为4700 km。车主反映,行驶中偶尔组合仪表上的发动机转速信号丢失,转向变重,且有“闯车”感,同时车辆故障警报蜂鸣器鸣响。 故障诊断…...
关于OceanBase与CDH适配的经验分享
CDH是Cloudera早期推出的一个开源平台版本,它实质上成为了Apache Hadoop生态系统内公认的安装与管理平台,专为企业级需求量身打造。CDH为用户提供了即装即用的企业级解决方案。通过整合Hadoop与另外十多项关键开源项目,Cloudera构建了一个功能…...
基于国产芯片的AI引擎技术,打造更安全的算力生态 | 京东零售技术实践
近年来,随着国产AI芯片的日益崛起,基于国产AI芯片的模型适配、性能优化以及应用落地是国产AI应用的一道重要关卡。如何在复杂的京东零售业务场景下更好地使用国产AI芯片,并保障算力安全,是目前亟需解决的问题。对此,京…...
第五十四:渲染数据 v-text 和 v-html
v-text : 解析成文本 v-html: 解析成 html <div id"app"><h3>{{ web.title }}</h3><!-- v-text 将数据解析为纯文本格式 --><h3 v-text"web.title"></h3><!-- v-html 将数据解析为 html 格式 --><h3 v-htm…...
HTML label 标签使用
点击 <label> 标签通常会使与之关联的表单控件获得焦点或被激活。 通过正确使用 <label> 标签,可以使表单更加友好和易于使用,同时提高整体的可访问性。 基本用法 <label> 标签通过 for 属性与 id 为 username 的 <input> 元素…...
GB28181开发--ZLMediaKit+WVP+Jessibuca
一、核心组件功能 1、ZLMediaKit 定位:基于 C++11 的高性能流媒体服务框架,支持 RTSP/RTMP/HLS/HTTP-FLV 等协议互转,具备低延迟(最低 100ms)、高并发(单机 10W 级连接)特性,适用于商用级流媒体服务器部署。 特性:跨平台(Linux/Windows/ARM 等)、支持 …...
Linux和gcc/g++常用命令总结
目录 Linux命令总结 文件操作相关命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本处理操作命令 grep awk sed 进程管理操作相关命令 ps top htop kill pkill killall chmod chown 网络操作相关命令 ping ifconfig netstat ss lsof curl …...
Sqoop从入门到使用
安装和配置 修改文件配置:修改文件名将(sqoop-env-template.sh改为sqoop-env.sh) 编辑sqoop-env.sh内部文本,修改调用文件位置 将sqoop-env.sh,配置到全局变量中,方便调用。 查看正常运用 第一类࿱…...
2024华为OD机试真题-磁盘容量排序算法(C++)-E卷B卷-100分
2024华为OD机试题库-(E卷+C卷+D卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 用例2 考点 题目解析 代码 c++ 题目描述 磁盘的容量单位常用的有 M,G,T 这三个等级,它们之间的换算关系为: 1T = 1024G 1G = 1024M 现在给定 n 块磁盘的容量,…...
【数据结构】堆(挑战从零基础到进阶)
我们从概念开始一步步来学习堆,下面我们来从零基础来解剖该种数据结构。先提前透明:实现堆其实就是基于数组来实现一个完全二叉树而已 ! 目录 堆的概念 堆的性质 堆的物理逻辑&思维逻辑 堆的节点对应关系 堆的核心操作 (…...
阿里 DataWorks:数据治理、安全中心、数据质量核心功能梳理
文章目录 阿里 DataWorks:云原生数据治理与安全一体化实践指南一、数据治理中心1.1 数据治理体系1.2 产品架构全图1.3 概要使用路径1.4 治理现状评估数据治理健康分评估模型 1.5 检查项 & 治理项(1) 检查项(2) 治理项 1.6 治理工具箱1.7 治理结果查看 二、安全中…...
DeepSeek精品课分享 清北
AI淘金潮上热搜!有人已经靠DeepSeek日入过万了! 北大清华等高校也相继出品DeepSeek高质量精品课程,在网上传疯。帮助学者高效学习AI从入门到精通! 完整版资料已经帮大家整理好了,免费领! 资料链接: htt…...
获取当前页面的 url 参数
一、使用 URLSearchParams(现代浏览器支持) URLSearchParams 是 JavaScript 提供的一个内置对象,用于处理 URL 的查询字符串,它提供了一系列方便的方法来获取、设置和删除查询参数。 // 获取当前页面的 URL 参数 const queryStr…...
解锁健康密码,开启养生之旅
在这个生活节奏飞快、压力如影随形的时代,健康养生不再是一句空泛的口号,而是我们对高品质生活的热切追求。它就像一把神奇的钥匙,能够打开通往活力与幸福的大门。 日常习惯与养生息息相关。晨起后,空腹喝一杯温水,如…...
Mybatis集合嵌套查询,三级嵌套
三个表:房间 玩家 玩家信息 知识点:Mybatis中级联有关联(association)、集合(collection)、鉴别器(discriminator)三种。其中,association对应一对一关系、collectio…...
Python的Pandas和matplotlib库:让数据可视化贼简单
在数据爆炸的时代,数据可视化已成为数据分析的关键环节。Python 作为强大的编程语言,拥有众多用于数据可视化的库,而 pandas 库在其中扮演着重要角色。它不仅能高效处理和分析数据,还具备强大的数据可视化功能,让我们轻…...
