Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

メモリーの使用量が高いときに大規模な NUMA システムでソフトロックアップが検出される

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 7.1
  • Red Hat Enterprise Linux 6.6
  • 大規模な NUMA システム (たとえば、12TB のメモリーと 288 個の CPU が搭載され、numa 係数が 30 以下のシステム)

Issue

  • numa 係数が 30 以下となるシステムで負荷が高くなるとハングアップします。
  • 大規模な NUMA システムでメモリーの逼迫が高いとソフトロックアップが検出されます。

Resolution

  • RHEL 7 の場合は、ソフトロックアップが発生しないように、以下の手順に注意する必要があります。
    • Transparent Huge Page (THP) を無効にし、ビジーなメモリコンパクションを回避します。
    • "numa_balancing=disable" をカーネルパラメーターに追加し、再起動します。
    • もしくは、/proc/sys/vm/zone_reclaim_mode を 1 に設定します。
  • RHEL 6 の場合:
    • Transparent Huge Page (THP) を無効にし、ビジーなメモリコンパクションを回避します。
    • もしくは、/proc/sys/vm/zone_reclaim_mode を 1 に設定します。
  • 注意: THP を無効にした時に既知の問題があります。詳細については、以下のスクリプトを参照してください。

Root Cause

  • ファイルが CPU の小さいサブセットのページキャッシュにファイルを読み込むときに、 ロードが高くなると、ページキャッシュメモリーが numa ノード間に均等に分配されなくなります。メモリーページが断片化して短くなるため、カーネルがメモリーを圧縮し、THP に 2MB ページを取得します。
  • THP については How to use, monitor, and disable transparent hugepages in Red Hat Enterprise Linux 6? を参照してください。
  • これにより、一部の numa ノードがメモリーをすべて使い、残りのノードがメモリーを使用しなくなります。
  • /proc/sys/vm/zone_reclaim_mode のデフォルト値により、メモリーを使い切るノードで実行している CPU が利用可能なメモリーを持つ次のノードを飛ばして、メモリーを割り当てようとします。
  • /proc/sys/vm/zone_reclaim_mode を設定する起動時初期化コードがアップストリームで変更され、RHEL7.1 および RHEL 6.6 にバックポートされました。
  • RHEL6.6 以降または 7.0 では、最大の numa 係数が 30 以上になると、変更セットが /proc/sys/vm/zone_reclaim_mode 設定を 1 に増やします。変更前のこの設定は 20 でした。
  • 288CPU (Haswell) が搭載された 12TB のシステムなどでは問題が発生する可能性があるため、/proc/sys/vm/zone_reclaim_mode を変更する必要があります。

Diagnostic Steps

  • syslog で "BUG: soft lockup" メッセージを探します。以下の例を参照してください。
kernel:BUG: soft lockup - CPU#102 stuck for 22s![forkoff:235364]
kernel:Modules linked in: fuse btrfs zlib_deflate raid6_pq xor msdos ext4
mbcache jbd2 binfmt_misc xt_CHECKSUM iptable_mangle ipt_MASQUERADE
nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4
nf_defrag_ipv4 xt_conntrack nf_conntrack ipt_REJECT iptable_filter ip_tables
tun bridge stp llc dm_mirror dm_region_hash dm_log dm_mod iTCO_wdt
iTCO_vendor_support vfat fat intel_powerclamp coretemp intel_rapl kvm_intel
kvm crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel aesni_intel
lrw gf128mul glue_helper ablk_helper cryptd pcspkr sb_edac edac_core lpc_ich
i2c_i801 mfd_core shpchp ipmi_si ipmi_msghandler tpm_infineon nls_utf8 isofs
loop uinput xfs libcrc32c sd_mod crc_t10dif crct10dif_common mgag200
syscopyarea sysfillrect sysimgblt drm_kms_helper igb qla2xxx e1000e
kernel: ttm dca ptp scsi_transport_fc drm i2c_algo_bit pps_core scsi_tgt
megaraid_sas i2c_core
kernel:CPU:102 PID:235364 Comm: forkoff Not tainted 3.10.0-229.el7.x86_64
#1                                                                                                                                                                                                                                                                             
kernel:
kernel: task: ffff911d25eea220 ti: ffff927835154000 task.ti: ffff927835154000
kernel:RIP:0010:[<ffffffff811798ef>]  [<ffffffff811798ef>]
isolate_freepages_block+0xaf/0x380
kernel:RSP:0000:ffff927835157860  EFLAGS:00000286
kernel:RAX:00000000ffffffff RBX:00000014e4b60000 RCX: ffff927835157aa8
kernel:RDX:0000000053345c00 RSI:0000000053345a00 RDI: ffff927835157a50
kernel:RBP: ffff9278351578f8 R08:0000000000000000 R09: ffff8e007ffda000
kernel:R10:00000014cd168000 R11:0000000060080000 R12:0000000000000301
kernel:R13: ffff927835157850 R14:0000000000000000 R15:00007f4501f64000
kernel:FS:00007f4f4d540740(0000) GS:ffff90fa7f9a0000(0000)
knlGS:0000000000000000
kernel:CS:0010 DS:0000 ES:0000 CR0:0000000080050033
kernel:CR2:00007f4690400000 CR3:000009baa7060000 CR4:00000000001407e0
kernel:DR0:0000000000000000 DR1:0000000000000000 DR2:0000000000000000
kernel:DR3:0000000000000000 DR6:00000000fffe0ff0 DR7:0000000000000400
kernel:Stack:
kernel: ffffea2a02311040 0000000060080000 0000000000000094 ffff927835157948
kernel:0000000053345a00 ffff927835157a50 000000004808ec38 00ff8e0000000000
kernel: ffff927835157a90 ffff927835157aa8 ffff927835157a50 ffff8e007ffad000
kernel:Call Trace:
kernel:[<ffffffff81179d8f>] compaction_alloc+0x1cf/0x240
kernel:[<ffffffff811b15ce>] migrate_pages+0xce/0x610
kernel:[<ffffffff81179bc0>] ? isolate_freepages_block+0x380/0x380
kernel:[<ffffffff8117abb9>] compact_zone+0x299/0x400
kernel:[<ffffffff8117adbc>] compact_zone_order+0x9c/0xf0
kernel:[<ffffffff8117b171>] try_to_compact_pages+0x121/0x1a0
kernel:[<ffffffff815ff336>] __alloc_pages_direct_compact+0xac/0x196
kernel:[<ffffffff81160758>] __alloc_pages_nodemask+0x788/0xb90
kernel:[<ffffffff810b11c0>] ? task_numa_fault+0x8d0/0xbb0
kernel:[<ffffffff811a24aa>] alloc_pages_vma+0x9a/0x140
kernel:[<ffffffff811b674b>] do_huge_pmd_anonymous_page+0x10b/0x410
kernel:[<ffffffff81182334>] handle_mm_fault+0x184/0xd60
kernel:[<ffffffff8160f1e6>] __do_page_fault+0x156/0x520
kernel:[<ffffffff8118a945>] ? change_protection+0x65/0xa0
kernel:[<ffffffff811a0dbb>] ? change_prot_numa+0x1b/0x40
kernel:[<ffffffff810adb86>] ? task_numa_work+0x266/0x300
kernel:[<ffffffff8160f5ca>] do_page_fault+0x1a/0x70
kernel:[<ffffffff81013b0c>] ? do_notify_resume+0x9c/0xb0
kernel:[<ffffffff8160b808>] page_fault+0x28/0x30
kernel:Code:89 ee 48 89 4d b0 41 89 c5 eb 1d 90 49 83 c7 01 48 83 c3 40 4d
39 fc 0f 86 07 01 00 00 41 83 c5 01 4d 85 f6 4c 0f 44 f3 8b 43 18 <83> f8 80
75 dc 48 8b 45 b8 0f b6 55 c0 48 8d 75 c8 4c 8b 45 b0

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments