首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    nginx共享内存:共享内存的实现

    nginx中, 作者为我们提供了方便共享内存的使用的接口,关于共享内存的使用在我之前的文章中有介绍。这次我们来研究一下nginx是如何实现的。 我们知道,如果我们的模块中要使用一个共享内存,需要调用ngx_shared_memory_add来创建共享内存。而ngx_shared_memory_add不会马上创建一个共享内存,它是先登记一下共享内存的使用信息,比如名称、大小等,然后在进程初始化的时候再进行共享内存的创建与初始化。 那么,ngx_shared_memory_add这个函数是将共享内存的分配登记在哪的呢?在ngx_cycle_s这个结构体中有一个成员,即ngx_cycle_s->shared_memory,它是一个list,用来保存所有登记的共享内存,这个list中保存的是ngx_shm_zone_t类型的数据。下面是ngx_shm_zone_t这个结构体的实现源码:

    03

    Hyper-V性能加速之NUMA

    根据 CPU 访问内存中地址所需时间和距离我们可以将CPU和内存结构分为SMP(SMP,Symmetric Multi-Processor,也称之为一致内存访问UMA)、NUMA和MPP(Massive Parallel Processing)三种结构。而我们在虚拟化环境中常用的结构包括SMP和NUMA这两种。相对SMP(UMA)来说,NUMA具有更加好的扩展性。NUMA将CPU和相近的内存配对组成节点,在每个NUMA节点里,CPU都有本地内存,访问距离短,性能好。NUMA比SMP具有更好的扩展性,SMP使用共享内存控制器,所有的CPU使用共享内存总线访问内存,如图1所示。在CPU不多的时候,SMP可以很好地工作,但是一旦CPU的数量很大的时候,这些 CPU 既可能造成内存总线的压力,也可能发生CPU之间相互“争夺”对共享内存总线的访问。NUMA采用分组的形式,限制一个NUMA节点里面的CPU数量和内存大小,并使用缓存一致性内部连接总线将各个NUMA节点连接起来,如图2所示。在服务器CPU日益增多和虚拟化普及的时代,NUMA更能适应高密度虚拟化环境的要求。

    03
    领券