ホームページ データベース 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

コンピューターの CPU のクロック周波数を上げる方法 コンピューターの CPU のクロック周波数を上げる方法 Feb 20, 2024 am 09:54 AM

コンピュータの CPU をオーバークロックする方法 テクノロジーの継続的な進歩に伴い、コンピュータのパフォーマンスに対する人々の要求もますます高くなっています。コンピューターのパフォーマンスを向上させる効果的な方法は、オーバークロックによって 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にはvectorが搭載されています。

WIN10サービスホストの動作プロセスがCPUを過剰に占有している WIN10サービスホストの動作プロセスがCPUを過剰に占有している Mar 27, 2024 pm 02:41 PM

1. まず、タスクバーの空白スペースを右クリックして[タスクマネージャー]オプションを選択するか、スタートロゴを右クリックして[タスクマネージャー]オプションを選択します。 2. 開いたタスク マネージャー インターフェイスで、右端の [サービス] タブをクリックします。 3. 開いた[サービス]タブで、下の[サービスを開く]オプションをクリックします。 4. 表示される[サービス]ウィンドウで、[InternetConnectionSharing(ICS)]サービスを右クリックし、[プロパティ]オプションを選択します。 5. 表示されたプロパティ画面で[プログラムから開く]を[無効]に変更し、[適用]をクリックして[OK]をクリックします。 6. スタートロゴをクリックし、シャットダウンボタンをクリックして[再起動]を選択し、コンピュータの再起動を完了します。

AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと Jun 05, 2024 pm 09:43 PM

6 月 1 日のこの Web サイトのニュースによると、ソースの @CodeCommando が本日ツイートし、Computex2024 イベントでの AMD の今後のプレゼンテーション資料のスクリーンショットを共有しました。ツイートの内容は「AM4 は決して死ぬことはない」であり、添付の写真には 2 つの新しいものが示されていました。 Ryzen5000XTシリーズプロセッサ。スクリーンショットによると、次の 2 つの製品が示されています。 Ryzen95900XTR Ryzen95900XT は、AMD の Ryzen95950X よりもわずかに遅いクロック速度を持つ、比較的ハイエンドに位置する新しい 16 コア AM4 プロセッサです。 Ryzen75800XT AMD の既存の Ryzen75800X プロセッサの高速バージョンです。両方のプロセッサのクロックは最大 4.8G です。

リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに Jun 15, 2024 pm 09:49 PM

IntelArrowLake は、LunarLake と同じプロセッサ アーキテクチャに基づいていると予想されており、つまり、Intel の新しい Lion Cove パフォーマンス コアが経済的な Skymont 効率コアと組み合わされることになります。

超実用的! Linux マスターになれる Sar コマンド 超実用的! Linux マスターになれる Sar コマンド Mar 01, 2024 am 08:01 AM

1. 概要 sar コマンドは、システムアクティビティから収集されたデータを通じてシステム使用状況レポートを表示します。これらのレポートはさまざまなセクションで構成されており、各セクションにはデータの種類とデータが収集された時期が含まれます。 sar コマンドのデフォルト モードでは、CPU にアクセスするさまざまなリソース (ユーザー、システム、I/O スケジューラなど) の CPU 使用率がさまざまな時間増分で表示されます。さらに、特定の期間におけるアイドル状態の CPU の割合も表示されます。各データ ポイントの平均値はレポートの下部にリストされます。 sar レポートはデフォルトで 10 分ごとにデータを収集しますが、さまざまなオプションを使用してこれらのレポートをフィルタリングおよび調整できます。 uptime コマンドと同様に、sar コマンドも CPU 負荷の監視に役立ちます。 sarにより過負荷の発生が把握できる

Chrome ブラウザの CPU 使用率が高い問題に対する完璧な解決策 Chrome ブラウザの CPU 使用率が高い問題に対する完璧な解決策 Mar 14, 2024 pm 12:25 PM

コンピュータの実行中に、タスク マネージャの Google Chrome が CPU を非常に多く占有していることに気づく人もいます。処理が時間内に行われないと、コンピュータはますますスタックし、クラッシュすることもあります。では、Chrome ブラウザの CPU 使用率が高い場合はどうすればよいでしょうか?この問題について一緒に考えてみましょう。 Google Chrome での CPU 使用率の高さの問題は、通常、タスク マネージャーで「SoftwareReporterTool」が異常に実行されていることが原因です。このツールは実際には Chrome ブラウザのクリーニング ツールで、不要または有害な拡張機能、アプリケーション、ホームページ ハイジャッカーをクリーンアップするために使用されます。 Chrome がインストールされている場合、Software_reporter_tool.exe も SwR にダウンロードされます

2024年最新CPUラダーチャート共有(詳細高画質) 2024年最新CPUラダーチャート共有(詳細高画質) Mar 13, 2024 pm 08:19 PM

ゲームのパフォーマンスのレベルは CPU と大きな関係があります。ゲーム愛好家にとって、特に LOL や CS:GO では CPU のパフォーマンスがコンピュータ構成の焦点です。シングルコアを直接見る方がより正確で客観的です。一部の大規模 3D ゲームのパフォーマンスは、主にグラフィックス カードと CPU のスケジューリングに依存します。どの CPU のパフォーマンスが優れているのでしょうか?この記事では天体図について紹介します。最新の高精細完全版CPUラダー図

See all articles