Heap contention ----- 4核以上系统的超级性能杀手

简介:
   系统的heap 是整个操作系统全局共享的,以windows 为例,抄作heap 的API 有GlobalAlloc和GlobalFree。 C和C++的 malloc 和 new 最后实现还是调用的windows的 GlobalAlloc API。多核,多线程环境中,两个并行run 的线程经常有同时调用 heap 操作, heap 是全局共享一个线程访问全局heap的时候另一个线程就不可能去访问(OS API heap操作的实现保证了这一点),本来应该并行的多个线程就因为Heap 操作thread safe 的实现,强制变成了串行执行。这种现象就叫做 Heap contention。
       在4核和以下的系统里面, 一般的经验是只有heap contention 而没有其他毛病的多线程程序,4核上面总归会比关掉两个核的两核系统有30% 左右的性能提高。 然而当核数再加一倍的时候, 在8核的系统上, 8核上的性能比关掉6个核还要差。 最简单的例子程序如下:
 #pragma omp parallel for
 for(i = 0;i < loop_num; i++)
{
 char * block;
block = (char *)malloc(block_size);
 double result = 0;
for(j = 0; j < 100000; j++)
result += j^2;
 free(block);
}
 这么严重的问题应该怎样解决呢, 答案将在下一个文章中给出。

本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/131462,如需转载请自行联系原作者
目录
打赏
0
0
0
0
69
分享
相关文章
|
10月前
|
直接内存(Direct Memory)牛刀小试
直接内存(Direct Memory)牛刀小试
60 0
【JVM原理探索】分析堆外内存(Direct Memory)使用和分析
【JVM原理探索】分析堆外内存(Direct Memory)使用和分析
1572 0
【JVM原理探索】分析堆外内存(Direct Memory)使用和分析
计算机基础-------硬盘、内存、cpu的理解
计算机基础-------硬盘、内存、cpu的理解
670 0
计算机基础-------硬盘、内存、cpu的理解
性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
440 0
性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
我的PGA我作主----搞清楚什么是真正的PGA
网上PGA资料确实不多,也讲的不够深入,我们一起来学习PGA。 讨论话题: 1、PGA是什么,包括哪些部分,PGA的作用? 2、pga_aggregate_target参数的意义? 3、Oracle中观察PGA,可以从工作区(排序、HASH连接、位图)、Cache Cursor、批量读取缓存(arraysize)等几方面做测试,大家可以动动手? 4、ORA-4030错误的可能原因? 5、PGA手工管理下的优化要点? 6、如何监控PGA?
内存占用高-AWE
分享一个AWE占用内存高的案例
内存占用高-AWE
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等