smp架构与numa架构对比

SMP架构是一种多处理器系统,其中所有处理器紧密耦合,共享系统的所有资源,包括总线、内存和I/O系统。操作系统或数据库管理系统只有一个副本。这种系统的显著特点是所有资源的共享。各个CPU之间没有差异,平等地访问内存、外设和单一操作系统。操作系统管理一个队列,各个处理器依次处理队列中的进程。如果两个处理器同时请求访问同一资源(如同一段内存地址),通过硬件和软件的锁机制解决资源争用问题。
NUMA架构的基本特征是包含多个CPU模块,每个模块由多个CPU(如4个)组成,并拥有独立的本地内存和I/O槽口。节点之间通过互联模块(如Crossbar Switch)连接和交换信息,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的关键区别)。显然,访问本地内存的速度远高于访问远程内存(系统内其他节点的内存),这就是非一致性内存访问(NUMA)的来源。由于这一特性,为了更好地发挥系统性能,开发应用程序时应尽量减少不同CPU模块之间的信息交互。
CPU亲和性指的是特定任务倾向于在给定的CPU上长时间运行,而不被迁移到其他处理器。这意味着进程或线程不需要在多个处理器之间频繁切换。在Linux内核中,进程或线程通常由task_struct结构体表示,其中表示CPU亲和性的字段是cpus_allowed位掩码。同时,Linux内核API提供了用户修改掩码以绑定CPU的功能。
// 用于绑定线程或进程在某个CPU上运行 sched_set_affinity() // 查看线程或进程在哪个CPU上运行 sched_get_affinity() // 线程绑定到某个CPU Core int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset); // 查看绑定情况 int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);
在多核CPU系统中,提高外设和程序工作效率的最有效方法是让每个物理核心负责专门的任务。每个核心都有L1、L2、L3缓存,进程或线程绑定到核心后会提高L1/L2/L3缓存的命中率,同时进程将持续在这个CPU核心上运行,不会被操作系统调度到其他CPU核心上,从而节省了反复调度带来的开销。对于NUMA架构,进程在多个CPU核心之间切换会导致大量的L3缓存失效,性能损耗非常大。
CPU绑核适用于计算密集型的进程、时间敏感的进程、核心进程、CPU进程或线程独占的场景。即使进程或线程绑定到某个CPU Core,仍可能发生线程或进程切换。为了进一步减少其他进程对该进程或线程的影响,可以将CPU Core从Linux内核调度中剥离出来。Linux内核提供了isolcpus参数,对于有4个CPU core的系统,在启动时加入isolcpus=2,3,那么系统启动后将不会使用CPU3和CPU4。这里的不使用不是绝对的,但可以通过taskset命令来设置。
// 1. 在Linux内核启动参数中添加isolcpus参数 vi /boot/grub2.cfg中添加isolcpus=2,3 // 2. 查看设置情况 cat /proc/cmdline
以上就是CPU绑核的意义的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号