RHEL6.8 において、RHEL6.7 カーネルからアップデートすると CPUの消費が多くなり、 sparse_irq_lock spin_lock で多くのプロセスが競い、多くのプロセスが /proc/stat を読み込む
Issue
- カーネルを 2.6.32-573.26.1.el6 から 2.6.32-642.1.1.el6 にアップデートすると、CPU の使用量が高くなります。
- CPU 使用量は、2.6.32-573.26.1 では 0% (99.9% アイドル) でしたが、2.6.32-642.1.1 では 46% (54.4% アイドル) になりました。
-
アップグレード前は以下のようでした。
# uname -a Linux foo.example.com 2.6.32-573.26.1.el6.x86_64 #1 SMP Tue Apr 12 01:47:01 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux # top top - 23:01:40 up 8 min, 1 user, load average:1.69, 1.07, 0.53 Tasks:1650 total, 1 running, 1648 sleeping, 0 stopped, 1 zombie Cpu(s):0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st ... -
アップグレード後は以下のようになります。
Linux foo.example.com 2.6.32-642.1.1.el6.x86_64 #1 SMP Fri May 6 14:54:05 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux top - 22:45:15 up 2 days, 5:27, 1 user, load average:54.24, 50.71, 50.24 Tasks:1684 total, 26 running, 1657 sleeping, 0 stopped, 1 zombie Cpu(s):1.3%us, 44.3%sy, 0.0%ni, 54.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st ... -
kstat_irq_usrからの_spin_lock_irqsaveにおける以下のバックトレースに多数のプロセスがあり、CPU の使用量が高くなっています。crash> bt 53441 PID:53441 TASK: ffff8830669fe040 CPU:75 COMMAND:"Agent Heartbeat" #0 [ffff8830b8bc6e90] crash_nmi_callback at ffffffff810366e6 #1 [ffff8830b8bc6ea0] notifier_call_chain at ffffffff8154dd45 #2 [ffff8830b8bc6ee0] atomic_notifier_call_chain at ffffffff8154ddaa #3 [ffff8830b8bc6ef0] notify_die at ffffffff810aceae #4 [ffff8830b8bc6f20] do_nmi at ffffffff8154b9c3 #5 [ffff8830b8bc6f50] nmi at ffffffff8154b283 [exception RIP:_spin_lock_irqsave+0x2f] RIP: ffffffff8154a97f RSP: ffff8830669dbc78 RFLAGS:00200083 RAX:0000000000000206 RBX:00000000000006ad RCX:00000000000001fd RDX:0000000000200286 RSI:0000000000000001 RDI: ffffffff81f17c88 RBP: ffff8830669dbc78 R8:00000000fffffffb R9:00000000fffffffe R10:0000000000000000 R11:0000000000000014 R12:00000000000006ae R13: ffff8840631264c0 R14:000000000006fd3b R15:0000000000000001 ORIG_RAX: ffffffffffffffff CS:0010 SS:0018 --- <NMI exception stack> --- #6 [ffff8830669dbc78] _spin_lock_irqsave at ffffffff8154a97f #7 [ffff8830669dbc80] kstat_irqs_usr at ffffffff810f3894 #8 [ffff8830669dbca0] show_stat at ffffffff8120f7e4 #9 [ffff8830669dbe20] seq_read at ffffffff811bfe12 #10 [ffff8830669dbea0] proc_reg_read at ffffffff81205a1e #11 [ffff8830669dbef0] vfs_read at ffffffff8119a585 #12 [ffff8830669dbf30] sys_read at ffffffff8119a8d1 #13 [ffff8830669dbf80] system_call_fastpath at ffffffff8100b0d2
Environment
- Red Hat Enterprise Linux 6.7
- カーネルのバージョンが 2.6.32-573*.el6 以降
- Red Hat Enterprise Linux 6.8
- さまざまな kernel-2.6.32-642*..el6 発生している
- 多くのプロセスが /proc/stat を並行して読み込んでいる
- パフォーマンス監視ツールで発生している
- 以下のようになります。Interscope CA アプリケーション監視
- ハードウェア
- IBM BladeCenter Hx5 -[7873AC1]-/Node 1、システムカード、BIOS -[HIE179AUS-1.79]- 04/23/2013
- 80 個の CPU
- /proc/stat の
intr行に 2,000 個以上あり、システムの IRQ 数が非常に高くなっている - CPU のハイパースレッドにより、この問題の重大性が増加している
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.