版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、NUMA架构下的软件性能挑战目录1. Why NUMANUMA是什么NUMA优化新挑战CPU与MemoryCPU就像一个高速公路,不停的从Memory中加载数据,计算数据,再写回Memroy。数据读 取和写回的速度,是制约系统性能的一个关键因素。CacheMemorySCM SSDHDD性能好 昂贵性能低 低廉ALURegisterCacheMemory处理器的性能与功耗墙GateDrainSourceOxide2002年左右,由于功耗的限制,CPU的主频、单处理器的 性能发展开始变缓,单处理器转向多处理器发展。随着芯片上晶体管的密度越来越高,制程工艺越来越小,晶体 管中的绝缘层也将越来越薄,
2、导致漏电流增加,功耗上升。随着制程工艺的发展,芯片上晶体管的密度越来越高,功耗墙的存在迫使CPU从单核走向多核。晶体管示意图从单核到SMP在SMP(Symmetric multiprocessing system)对处理器系统中,所有的核均通过总线访问 内存。每一个进程都可以被分配到任何一个核上运行,达到很好的负载均衡。从SMP到NUMA在SMP系统中,核数的扩展受到内存总线的限制。非统一内存访问架构(Non-uniform memory access)很好的解决了这一问题。内存在物理上是分布式的,不同的核访问不同内存的时间不同,因此有了Node和Distance。NUMA架构的特点123xx
3、ns高于1高于24 略高于3让进程在给定的Core上尽可能长时间的运行,而不被迁移到其他处理器的倾向性。CPU亲和性均衡调度大量进程在多个处理器上 并行计算,实现更均衡的 任务调度提高Cache 命中率减少进程在不同处理器上 调度切换时,所带来的Cache miss实时性对时间敏感的进程可以分配 独立的处理器调度,确保处 理时间稳定,可预期利用CPU亲和性与内存分配策略,让进程与内存的距离更“短”NUMA资源规划Process 1Process 2Core 0Process 3Process 4Core 1NUMA NODE 0Process 5Process 6Core 2Process 7
4、Process 8Core 3NUMA NODE 1NUMA node 0 MemoryNUMA node 1 MemoryProcess 1Process 2Core 0Process 3Process 4Core 1NUMA NODE 0Process 5Process 6Core 2Process 7Process 8Core 3NUMA NODE 1NUMA node 0 MemoryNUMA node 1 Memory使用numactl设置CPU亲和性(绑核)+内存分配策略NUMA配置方法在代码中设置CPU亲和性(绑核)int sched_setaffinity(pid_t pid,
5、 size_t cpusetsize, cpu_set_t *mask) pid: 进程id,对当前进程设置亲和性可以使用0cpusetsize:参数mask的长度 mask:cpu位掩码numactl -C 0-15 进程名 memory policy -C:Core 范围memory policy:-interleave | -i, -preferred | -p, -membind | -m, -localalloc | -l很多开源软件提供修改进程/线程亲和性的参数如:nginx.conf文件中的worker_cpu_affinity参数将worker进程分布到各个NUMA node之
6、内,让系统整体的负载比较均衡,按照中断号将中断 服务和work绑定在一个NUMA内。性能将会有非常明显的提升。案例Nginx绑核优化requestrequestrequestWorkerWorkerWorkerBackground server中断处理第1次内存copyWorker进程 第2次内存copyNginx业务处理流程网卡队列1Socket缓冲1应用程序内存Socket缓冲2应用程序内存Socket缓冲n应用程序内存网卡队列2网卡队列3Socket缓冲3应用程序内存网卡队列nNUMANode0NUMANode1NUMANode2NUMANode3新的挑战NUMA突破内存总线带宽的瓶颈,
7、让核数更大的扩展成为可能 但是随着成百上千的线程出现,我们又要面对新的挑战锁锁的模型以自旋锁为例分析锁的时间模型,假设“线程n”持有锁,“线程1”等待锁。a: 服务间隔时间。同一个线程两次连续 的申请锁的平均时间间隔W: 线程1从开始请求锁到线程n释放锁 的时间(假设线程n释放锁后线程1拿到 锁)Tc: 锁的数据结构(内存)从线程n同步 到线程1的时间s: 锁的使用时间awTcs在多线程竞争激烈的情况下,使用无锁算法的整体吞吐量会优于加锁的 算法,因为它避免了调度延时和频繁的上下文切换。如:单生产者单消 费者的无锁队列。锁性能优化(一)无锁编程并发任务高的场景下,如果系统中存在唯一的全局变量,
8、那么每个CPU core都会申请这个全局变量对应的锁,导致这个锁的争抢严重。可以基 于业务逻辑,为每个CPU core或者线程分配对应的资源。大锁变小锁推荐使用GCC(7.3.0)实现的atomic系列 代码,跨平台移植性好,性能也非常好锁性能优化(二)使用GCC自带的原 子操作推荐使用ldaxr/stlxr指令实现锁或原子操作 替换ldxr/stxr +内存屏障(dmb)的实现,。使用自带内存屏障 的指令std:atomic cnt = 0; cnt.fetch_add(1, std:memory_order_relaxed);多线程可以提升系统吞吐量,但是却会增 加锁的争抢,更会增加线程切换带来的CPU损耗。锁性能优化(三)调整线程数达到最 佳并发效果通过数据结构优化或字节对齐,将频繁读 和频繁写的数据放入不同Cache line, 减少“锁”数据结构的伪共享。避免 Cache line 伪共享A=1,B=2Cache line 1C=3,D=4Cache line 2E=5,F=6Cache line 3X=100,Y=101Cache line n-1readHighFreqwriteHighFreqCache line n小结1、NUMA是非统一的内存访问架构,不同NUMA节点间的内存访问时间不同2、减少跨NUMA内存copy将大幅提升性能,不要忘记网卡中断的内存co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年房产认购专项协议范本
- 2024年成品油销售协议模板
- 2023-2024学年珠海市全国大联考(江苏卷)高三第二次数学试题试卷
- 2024年高效代理合作招募协议模板
- 2024年幼教岗位聘用协议范本
- 彩钢瓦安装工程协议模板2024年
- 2024年海水产品长期供应协议模板
- 2024年度润滑油分销协议范本
- 文书模板-《硬件设计合同》
- 2024房产居间服务协议模板
- 卫浴产品世界各国认证介绍
- 江苏省职工代表大会操作办法.doc
- 湘教版小学音乐五年级上册教学计划
- sch壁厚等级对照表
- 高新技术企业认定自我评价表
- 药物分类目录
- 中石油-细节管理手册 03
- 柿子品种介绍PPT课件
- 全国重点文物保护单位保护项目安防消防防雷计划书
- 护士对预防患者跌倒的问卷调查表
- 道路开口施工方案
评论
0/150
提交评论