首頁 資料庫 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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的工作頻率是由主機板上的晶振

WIN10服務主機太佔cpu的處理操作過程 WIN10服務主機太佔cpu的處理操作過程 Mar 27, 2024 pm 02:41 PM

1.首先我們右鍵點選任務列空白處,選擇【任務管理器】選項,或右鍵開始徽標,然後再選擇【任務管理器】選項。 2.在開啟的任務管理器介面,我們點選最右邊的【服務】選項卡。 3.在開啟的【服務】選項卡,點選下方的【開啟服務】選項。 4.在開啟的【服務】窗口,右鍵點選【InternetConnectionSharing(ICS)】服務,然後選擇【屬性】選項。 5.在開啟的屬性窗口,將【開啟方式】修改為【禁用】,點選【應用程式】後點選【確定】。 6.點選開始徽標,然後點選關機按鈕,選擇【重啟】,完成電腦重啟就行了。

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配備的向量

洩漏揭示了英特爾 Arrow Lake-U、-H、-HX 和 -S 的關鍵規格 洩漏揭示了英特爾 Arrow Lake-U、-H、-HX 和 -S 的關鍵規格 Jun 15, 2024 pm 09:49 PM

英特爾ArrowLake預計將基於與LunarLake相同的處理器架構,這意味著英特爾全新的LionCove效能核心將與經濟體的Skymont效率核心結合。

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處理器,其時脈速度略低於A​​MD的Ryzen95950X。 Ryzen75800XT它是AMD現有Ryzen75800X處理器的更快變體,這兩款處理器的主頻最高可達4.8G

超實用!讓你成為Linux大神的Sar命令 超實用!讓你成為Linux大神的Sar命令 Mar 01, 2024 am 08:01 AM

一、概述sar命令透過從系統活動中收集的資料來展示系統的使用報告。這些報告由不同部分組成,每個部分都包含資料類型和收集資料的時間。 sar指令的預設模式顯示存取CPU的各種資源(如使用者、系統、I/O調度等)在不同時間增量下的CPU使用率。此外,它還顯示給定時間段內空閒CPU的百分比。報告底部列出了每個數據點的平均值。 sar預設每10分鐘報告一次收集的數據,但您可以使用各種選項來篩選和調整這些報告。與uptime指令類似,sar指令也可協助您監控CPU的負載狀況。透過sar,您可以了解過度負載發

2024最新CPU天梯圖分享(詳細高清) 2024最新CPU天梯圖分享(詳細高清) Mar 13, 2024 pm 08:19 PM

遊戲表現的高低和cpu有很大的關係,對於愛好遊戲的用戶來說cpu的性能是電腦配置的重點,尤其LOL,CS:GO這些,直接看單核性能比較準確客觀,一些大型的3D遊戲主要看顯示卡+CPU調度狀況,那麼哪些cpu效能較好呢?本篇文章就來為大家介紹天體圖。  最新CPU天梯圖高清完整版

完美解決Chrome瀏覽器CPU佔用過高問題的方法 完美解決Chrome瀏覽器CPU佔用過高問題的方法 Mar 14, 2024 pm 12:25 PM

  有用戶在電腦運作過程中,發現任務管理器裡谷歌瀏覽器佔用了極高的CPU,如果不及時處理的話,電腦就變得越來越卡,甚至出現死機。那麼Chrome瀏覽器CPU佔用過高要如何處理呢?下面就來一起看看這個問題。谷歌瀏覽器的高CPU佔用問題通常是由於「SoftwareReporterTool」在工作管理員中異常運作。這個工具實際上是Chrome瀏覽器的清理工具,用於清理掉不必要或有害的擴充功能、應用程式或首頁劫持等。當安裝Chrome時,Software_reporter_tool.exe也會被下載到SwR

See all articles