首页 数据库 mysql教程 hadoop集群System Cpu消耗过高问题分析 by 杂货店店长

hadoop集群System Cpu消耗过高问题分析 by 杂货店店长

Jun 07, 2016 pm 04:29 PM
cpu hadoop system 消耗 问题 集群

Hadoop集群服务器升级为rhel6内核后,System Cpu占用非常高,有任务运行的时候经常到50%以上。对其中一台机器一天的运行状态采样的数据: idle: 76%?? sys:14%? user: 9% 从采样数据中,可以发现System Cpu比User Cpu还要高,这在Hadoop集群环境中很不寻常。

Hadoop集群服务器升级为rhel6内核后,System Cpu占用非常高,有任务运行的时候经常到50%以上。对其中一台机器一天的运行状态采样的数据:

idle: 76%?? sys:14%? user: 9%

从采样数据中,可以发现System Cpu比User Cpu还要高,这在Hadoop集群环境中很不寻常。

先简单地用strace看了一下占用cpu高的java程序经常去调哪些系统调用,发现sched_yield调用频率非常之高,莫非是锁的问题?分析了下内核中的文档和代码,发现CFS调度下sched_yield的行为与以前的O(1)算法略有出入——CFS下sched_yield返回非常快,对于一些借助sched_yield实现锁的应用来说,开销会很大。内核提供了一个proc参数sched_compat_yield,设置该参数为1,就可以解决这个问题。于是设置了该参数,仍然没有效果,分析代码后,竟然发现sched_compat_yield在rhel6内核中并没有实现,只是留下了一个接口兼容而已。于是乎将upstream中的相关部分的代码port到rhel6的内核中,sched_compact_yield终于能干活了,但出乎意料的是,系统态cpu仍然非常高。

没办法了,上个大招:oprofile,结果如下:

samples???????? %???????? ?symbol name

2822865? ?71.2192?? ?compact_zone

160729??? ?4.0551?????? clear_page_c

156913?? ?? 3.9588???? ?compaction_alloc

47691?????? ?1.2032????? ?copy_user_generic_string

一看到结果,一头雾水。compact_zone为何物?为何cpu占用如此之高?不懂了就看代码。

__alloc_pages_slowpath

__alloc_pages_direct_compact

try_to_compact_pages

compact_zone_order

compact_order

有点头绪了,内核要分配一块高阶物理内存,buddy system中又没有满足条件的,似乎内核要在compact_zone中做些什么事,来满足对高阶物理内存的分配。

下一步,快速验证下是不是compact_zone的问题,修改config文件,去掉CONFIG_COMPACTION,重新编译,换内核,竟然真的OK了 。 那基本断定是compact_zone的问题了,后面就得分析下代码,研究下其中的原理了。

经过几天的艰苦奋战,终于把compaction的基本原理搞明白了。

linux物理内存的管理采用的是经典的伙伴系统,当然也就存在伙伴系统的问题——内存碎片。当然,此处的内存碎片问题并不算大,因为伙伴系统是以页为单位为管理内存的,碎片也是以“页”为单位,4k的物理内存还算不上是“碎片”。对于用户态的程序,几乎不需要超过4k的连续空间。但是对内核来说,碎片永远都不是好东西。某些硬件相关的操作会需要连续的物理内存,如果无法满足,内核就只能panic。

clip_image002

另外,引入compaction的另一个重要因素就是使用THP(Transparent hugepages)。4k的页面大小已经出现了很多年了,就像文件系统上1k-4k的block_size一样,都是适应二十年前硬件的容量与速度而出现的,对于现在的硬件来说它们都显得太小了。使用更大的物理页,可以带来两个好处:TLB缓存命中率的提高和page_fault的次数降低。compaction正是为了支持THP而出现的。

在以前版本的内核中,要获得连续的物理内存只有一个办法:释放掉一部分内存,一般是释放page cache、脏页,或者进行页面swap。

而compaction提出了另外一个思路:重新组织内存。为此,提出了“可移动”页面的概念。在内核中的物理内存,有一部分是“可移动”的,内核使用的反碎片技术的基本原理,就是根据页的“可移动性”将页面分组。

clip_image004

那哪些页面是可以移动的呢? 非空闲的物理内存,当然要么是用户态进程在用,要么内核本身在用。对于前者,进程在访问物理内存的时候,实际上要通过页表的映射来访问。页表是一个可以做文章的地方:如果把一个页移动到另一个地方,如果可以同时修改页表,那么对应用程序就不会有影响。而对于内核访问物理内存时,是通过简单的常量偏移来做的。因此内核使用的物理页面无法移动。

定义了“可移动”的页面,具体到某一个页面,内核怎样知道它是否是可移动的?分配内存的函数,kmalloc,alloc_pages等在任何地方都可能被调用。内核又是怎样知道在这些地方分配的页面属于哪种类型呢?看这几个函数的原型

void *kmalloc(size_t size, gfp_t flags)

struct page * alloc_pages(gfp_t gfp_mask, unsigned int order)

内核自然不知道kmalloc分配的内存是作什么用途的,但是kernel 开发者知道,一个页面是否可移动,自然也是开发者们告诉内核的。gft_t中有个标志位:GFP_MOVABLE,开发者需要根据相应的内存是否要移动来设置该位。

了解了如何识别“可移动”页面,下面看看页面移动的流程:

1.???????? 锁定页,以避免在移动页的过程中有进程修改页面。页面记为oldpage

2.???????? 确保“writeback”已经完成

3.???????? 删除当前页面的全部映射,并将指向该页的页表项标记MIGRATION

4.???????? 查找新页,记为newpage

5.???????? 获取radix tree的锁,以阻塞所有试图通过radix tree来访问页面的进程。将radix tree中oldpage的指针指向newpage。释放radix tree的锁。

6.???????? 旧页的内容被拷到新页面中,设置新页面的各项标志

7.???????? 将所有页表项指向新页面

了解了compaction的目标和原理,那么该怎样查看系统中当前的碎片情况呢?/proc/pagetypeinfo文件提供了“可移动”和“不可移动”页面的分布数据, 一方面方便开发者调试,另一方面可以让系统管理员了解当前的系统运行状态。

Compaction在hadoop上所带来的性能问题,目前还不知道是在这种特定场景下才出现还是compaction本身就影响了性能。不过现在看来,在其它机器上还没有发现这种情况。

Compaction的目的是减少内存碎片,主要和THP搭配使用,适合需要大量连续内存的应用,比如KVM,能提升TLB效率和减少page fault次数,从而提高应用程序的执行效率。因此,去掉Compaction的支持,会对此类应用的性能所有影响。

参考:http://lwn.net/Articles/359158/你也许会喜欢:

  • Mem Cgroup目录无法清理问题分析
  • 深入剖析 linux GCC 4.4 的 STL string
  • 利用 Flash 漏洞的木马程序分析报告 by 师兄
  • 一个淘宝客劫持木马的分析
  • 从Dump到POC系列一:Win32k内核提权漏洞分析
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何增加电脑CPU的时钟频率 如何增加电脑CPU的时钟频率 Feb 20, 2024 am 09:54 AM

电脑CPU如何超频随着科技的不断进步,人们对于电脑性能的需求也越来越高。而一种有效的提升电脑性能的方法就是通过超频(overclocking)来增加CPU的工作频率。超频可以使CPU更快地处理数据,从而提供更高的计算能力。那么,电脑CPU如何超频呢?下面将为大家介绍超频的基本原理和具体操作方法。首先,让我们了解一下超频的原理。CPU的工作频率是由主板上的晶振

144 核心,3D 堆叠 SRAM:富士通详细介绍下一代数据中心处理器 MONAKA 144 核心,3D 堆叠 SRAM:富士通详细介绍下一代数据中心处理器 MONAKA Jul 29, 2024 am 11:40 AM

本站7月28日消息,据外媒TechRader报道,富士通详细介绍了计划于2027年出货的FUJITSU-MONAKA(以下简称MONAKA)处理器。MONAKACPU基于“云原生3D众核”架构,采用Arm指令集,面向数据中心、边缘与电信领域,适用于AI计算,能实现大型机级别的RAS1。富士通表示,MONAKA将在能效和性能方面实现飞跃:得益于超低电压(ULV)工艺等技术,该CPU可实现2027年竞品2倍的能效,冷却无需水冷;此外该处理器的应用性能也可达对手2倍。在指令方面,MONAKA配备的矢量

WIN10服务主机太占cpu的处理操作过程 WIN10服务主机太占cpu的处理操作过程 Mar 27, 2024 pm 02:41 PM

1、首先我们右击任务栏空白处,选择【任务管理器】选项,或者右击开始徽标,然后再选择【任务管理器】选项。2、在打开的任务管理器界面,我们点击最右端的【服务】选项卡。3、在打开的【服务】选项卡,点击下方的【打开服务】选项。4、在打开的【服务】窗口,右击【InternetConnectionSharing(ICS)】服务,然后选择【属性】选项。5、在打开的属性窗口,将【打开方式】修改为【禁用】,点击【应用】后点击【确定】。6、点击开始徽标,然后点击关机按钮,选择【重启】,完成电脑重启就行了。

AM4 拒绝死亡,消息称 AMD 将推出 Ryzen 9 5900XT /7 5800XT:主频最高 4.8GHz AM4 拒绝死亡,消息称 AMD 将推出 Ryzen 9 5900XT /7 5800XT:主频最高 4.8GHz Jun 05, 2024 pm 09:43 PM

本站6月1日消息,消息源@CodeCommando今天发布推文,分享了AMD即将在Computex2024活动中的部分演示文档截图,推文内容为“AM4永不消亡”,配图展示了两款新的Ryzen5000XT系列处理器。根据截图内容显示以下两款产品:Ryzen95900XTRyzen95900XT定位相对高端,这是一款全新的16核AM4处理器,其时钟速度略低于AMD的Ryzen95950X。Ryzen75800XT它是AMD现有Ryzen75800X处理器的更快变体,这两款处理器的主频最高可达4.8G

泄漏揭示了英特尔 Arrow Lake-U、-H、-HX 和 -S 的关键规格 泄漏揭示了英特尔 Arrow Lake-U、-H、-HX 和 -S 的关键规格 Jun 15, 2024 pm 09:49 PM

英特尔ArrowLake预计将基于与LunarLake相同的处理器架构,这意味着英特尔全新的LionCove性能核心将与经济的Skymont效率核心相结合。而LunarLake仅作为ava推出

超实用!让你成为Linux大神的Sar命令 超实用!让你成为Linux大神的Sar命令 Mar 01, 2024 am 08:01 AM

一、概述sar命令通过从系统活动中收集的数据来展示系统的使用情况报告。这些报告由不同部分组成,每个部分都包含数据类型和收集数据的时间。sar命令的默认模式显示访问CPU的各种资源(如用户、系统、I/O调度等)在不同时间增量下的CPU使用率。此外,它还显示给定时间段内空闲CPU的百分比。报告底部列出了每个数据点的平均值。sar默认每10分钟报告一次收集的数据,但您可以使用各种选项来筛选和调整这些报告。与uptime命令类似,sar命令也可帮助您监测CPU的负载情况。通过sar,您可以了解过度负载发

完美解决Chrome浏览器CPU占用过高问题的办法 完美解决Chrome浏览器CPU占用过高问题的办法 Mar 14, 2024 pm 12:25 PM

  有用户在电脑运行过程中,发现任务管理器里谷歌浏览器占用了极高的CPU,如果不及时处理的话,电脑就变得越来越卡,甚至出现死机。那么Chrome浏览器CPU占用过高要如何处理呢?下面就来一起看看这个问题。谷歌浏览器的高CPU占用问题通常是由于“SoftwareReporterTool”在任务管理器中异常运行。这个工具实际上是Chrome浏览器的清理工具,用于清理掉不必要或有害的扩展、应用程序或首页劫持等。当安装Chrome时,Software_reporter_tool.exe也会被下载到SwR

2024最新CPU天梯图分享(详细高清) 2024最新CPU天梯图分享(详细高清) Mar 13, 2024 pm 08:19 PM

  游戏性能的高低和cpu有很大的关系,对于爱好游戏的用户来说cpu的性能是电脑配置的重点,尤其LOL,CS:GO这些,直接看单核性能比较准确客观,一些大型的3D游戏主要看显卡+CPU调度情况,那么哪些cpu性能较好呢?本篇文章就来为大家介绍一下天体图。  最新CPU天梯图高清完整版

See all articles