热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义调度器负载均衡之概念篇(一)

cputopology参考文章:参考文章基本概念NUMANon-uniformmemoryaccess(NUMA)isacomputermemorydesig

cpu topology

参考文章:参考文章


基本概念


NUMA

Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory faster than non-local memory (memory local to another processor or memory shared between processors). The benefits of NUMA are limited to particular workloads, notably on servers where the data is often associated strongly with certain tasks or users.[1]

NUMA architectures logically follow in scaling from symmetric multiprocessing (SMP) architectures.

**非统一内存访问(NUMA)**是一种用于多处理器的电脑内存体设计,内存访问时间取决于处理器的内存位置。 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。

NUMA架构在逻辑上遵循对称多处理(SMP)架构。


DIE/SoC


MC


SMT


SMP

cpu-topology

一个NUMA node包括一个或者多个Socket,以及与之相连的local memory。一个多核的Socket有多个Core。如果CPU支持HT,OS还会把这个Core看成 2个Logical Processor。


查看cpu拓扑

以使用的服务器为例:其拓扑结构如下

Topology 2 Processors, 28 Cores, 56 Threads

node节点

numactl命令可以查看node节点信息

[root@localhost /]# numactl --hardware
available: 2 nodes (0-1) #有个node节点
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 28 29 30 31 32 33 34 35 36 37 38 39 40 41
node 0 size: 78848 MB
node 0 free: 836 MB
node 1 cpus: 14 15 16 17 18 19 20 21 22 23 24 25 26 27 42 43 44 45 46 47 48 49 50 51 52 53 54 55
node 1 size: 62091 MB
node 1 free: 289 MB
node distances: #表示跨node之间的距离,这里表示跨node之间访问成本是本node之内访问成本的2倍
node 0 10: 10 211: 21 10

查看node节点的详细信息

[root@localhost /]# ls /sys/devices/system/node/
has_cpu has_memory has_normal_memory node0 node1 online possible power uevent

查看node0节点

[root@localhost /]# ls /sys/devices/system/node/node0/
compact cpu12/ cpu3/ cpu34/ cpu39/ cpu6/ cpumap memory10/ memory15/ memory2/ memory24/ memory29/ memory33/ memory38/ memory6/ power/
cpu0/ cpu13/ cpu30/ cpu35/ cpu4/ cpu7/ distance memory11/ memory16/ memory20/ memory25/ memory3/ memory34/ memory39/ memory7/ subsystem/
cpu1/ cpu2/ cpu31/ cpu36/ cpu40/ cpu8/ hugepages/ memory12/ memory17/ memory21/ memory26/ memory30/ memory35/ memory4/ memory8/ uevent
cpu10/ cpu28/ cpu32/ cpu37/ cpu41/ cpu9/ meminfo memory13/ memory18/ memory22/ memory27/ memory31/ memory36/ memory40/ memory9/ vmstat
cpu11/ cpu29/ cpu33/ cpu38/ cpu5/ cpulist memory0/ memory14/ memory19/ memory23/ memory28/ memory32/ memory37/ memory5/ numastat

以cpu0举例:

index0: 1级数据cache
index1: 1级指令cache
index2: 2级cache
index3: 3级cache ,对应cpuinfo里的cache

目录里的文件是cache信息描述,以本机的cpu0/index0为例简单解释一下:


文件内容说明
typeData数据cache,如果查看index1就是Instruction
Level1L1
Size32K大小为32K
coherency_line_size64644128=32K
physical_line_partition1
ways_of_associativity4
number_of_sets128
shared_cpu_map00000101表示这个cache被CPU0和CPU8 share

[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index0/size
32K
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index1/size
32K
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index2/size
256K
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index3/size
35840K[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index0/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index1/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index2/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu0/cache/index3/shared_cpu_map
0003ff,f0003fff[root@localhost /]# cat /sys/devices/system/node/node0/cpu28/cache/index0/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu28/cache/index1/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu28/cache/index2/shared_cpu_map
000000,10000001
[root@localhost /]# cat /sys/devices/system/node/node0/cpu28/cache/index3/shared_cpu_map
0003ff,f0003fff[root@localhost /]# cat /sys/devices/system/node/node0/cpu2/cache/index3/shared_cpu_map
0003ff,f0003fff

processor/socket

[root@localhost /]# cat /proc/cpuinfo | grep "physical id" | cut -d: -f2 | sort -un01

表示系统含有2个socket。


core

[root@localhost /]# cat /proc/cpuinfo | grep "cpu cores" | cut -d: -f2 | sort -un14

说明系统每个socket上有14个cores。

[root@localhost /]# cat /proc/cpuinfo | grep "core id" | cut -d: -f2 | sort -un0123456891011121314

但是core id不一定连续的,这里就没有core id “7”。


logical processor

[root@localhost /]# cat /proc/cpuinfo | grep "processor" | cut -d: -f2 | sort -un012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

OS认为有56个逻辑CPU,这是因为开启了HT超线程技术,每个core同时运行两个线程,让OS看做实际上有56个逻辑cpu。


推荐阅读
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • mysql 授权!!
    为什么80%的码农都做不了架构师?MySQL的权限系统围绕着两个概念:认证-确定用户是否允许连接数据库服务器授权-确定用户是否拥有足够的权限执 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 本文详细介绍了Windows网络编程中常用的几个关键结构体,包括sockaddr_in、in_addr和hostent,解释了它们的定义和用途,并提供了实际应用中的示例。 ... [详细]
  • 本文详细介绍了`android.os.Binder.getCallingPid()`方法的功能和应用场景,并提供了多个实际的代码示例。通过这些示例,开发者可以更好地理解如何在不同的开发场景中使用该方法。 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • MOSS2007 中型服务场配置指南:网络负载均衡集群设置
    本文详细介绍了如何在MOSS2007环境中配置网络负载均衡集群,包括安装和配置网络负载均衡功能的具体步骤。通过本文,读者可以了解如何在多台Web服务器上安装并配置网络负载均衡,以实现高效的服务分发。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
author-avatar
专业长膘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有