奇妙なDステータスプロセス、ページエラーハンドラにハングできますか?

奇妙なDステータスプロセス、ページエラーハンドラにハングできますか?

D状態のプロセスがありますが、システムコールが進行していないようです。これはCPU集約的なプロセス(tensorflow)であり、他のCPU集約的なプロセス(bazel)の実行中に中断されます。以下はいくつかの診断情報です(以降cd /proc/4088)。

➜  4088 uname -a
Linux  4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
➜  4088 sudo cat status
Name:   python3
State:  D (disk sleep)
(output omitted)
➜  4088 sudo cat syscall
-1 0x7ffd69619900 0x7f0bec881390
➜  4088 cat wchan
call_rwsem_down_read_failed%
➜  4088 sudo cat stack
[] call_rwsem_down_read_failed+0x14/0x30
[] __do_page_fault+0x375/0x400
[] do_page_fault+0x22/0x30
[] page_fault+0x28/0x30
[] 0xffffffffffffffff

また、コンテキスト切り替え回数が増加しないことを確認しました。持ついいえdmesgに疑わしいアイテムがあります:

[69396.390301] BUG: unable to handle kernel paging request at ffffea020f767740
[69396.390306] IP: [] mem_cgroup_try_charge+0x2f/0x1e0
[69396.390308] PGD 25edee067 PUD 0 
[69396.390310] Oops: 0000 [#3] SMP 
[69396.390338] Modules linked in: dm_snapshot drbg ansi_cprng ctr ccm pci_stub vboxpci(OE) vboxnetadp(OE) vboxnetflt(OE) vboxdrv(OE) binfmt_misc intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel uvcvideo kvm snd_hda_codec_hdmi videobuf2_vmalloc videobuf2_memops arc4 videobuf2_v4l2 irqbypass videobuf2_core v4l2_common snd_hda_codec_realtek videodev snd_hda_codec_generic crct10dif_pclmul media crc32_pclmul ghash_clmulni_intel snd_hda_intel aesni_intel snd_hda_codec aes_x86_64 lrw ath9k snd_hda_core nvidia_uvm(POE) gf128mul snd_hwdep glue_helper ath9k_common ablk_helper ath9k_hw cryptd snd_pcm ath snd_seq_midi snd_seq_midi_event mac80211 input_leds joydev snd_rawmidi serio_raw snd_seq cfg80211 snd_seq_device snd_timer rtsx_pci_ms memstick snd mei_me soundcore shpchp mei lpc_ich wmi mac_hid
[69396.390353]  nfsd auth_rpcgss nfs_acl lockd grace sunrpc parport_pc ppdev lp parport autofs4 dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c hid_generic usbhid hid psmouse rtsx_pci_sdmmc i915 nvidia_drm(POE) nvidia_modeset(POE) i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops nvidia(POE) drm ahci alx libahci rtsx_pci mdio video fjes
[69396.390356] CPU: 4 PID: 4176 Comm: python3 Tainted: P      D    OE   4.4.0-62-generic #83-Ubuntu
[69396.390357] Hardware name: Hasee QTC6/HM76, BIOS SR161 02/04/2013
[69396.390358] task: ffff8801d987d400 ti: ffff8801c4bd8000 task.ti: ffff8801c4bd8000
[69396.390362] RIP: 0010:[]  [] mem_cgroup_try_charge+0x2f/0x1e0
[69396.390363] RSP: 0000:ffff8801c4bdbdd0  EFLAGS: 00010246
[69396.390364] RAX: 017fffc000000000 RBX: ffffea0006565140 RCX: ffff8801c4bdbe68
[69396.390365] RDX: 00000000024000c0 RSI: ffff8801d5401400 RDI: ffffea0006565140
[69396.390365] RBP: ffff8801c4bdbe00 R08: ffffffff81cd2dc4 R09: ffffffff81cd2db3
[69396.390366] R10: 0000000000000000 R11: ffffffff81cd2da2 R12: ffffea020f767740
[69396.390367] R13: ffff8801c4bdbe68 R14: 00000000024000c0 R15: ffff8801d5401400
[69396.390369] FS:  00007f0b9d431700(0000) GS:ffff88025f300000(0000) knlGS:0000000000000000
[69396.390370] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[69396.390371] CR2: ffffea020f767740 CR3: 000000007c070000 CR4: 00000000001406e0
[69396.390371] Stack:
[69396.390373]  0000000000000000 ffffea0006565140 ffff88020b726640 0000000000000000
[69396.390375]  ffff88020cf7b4d8 00007f0b53600008 ffff8801c4bdbed0 ffffffff811c1e32
[69396.390377]  0000000000000000 0000000000000000 00007f0b9d42fe00 0000000000000001
[69396.390377] Call Trace:
[69396.390382]  [] handle_mm_fault+0x14b2/0x1820
[69396.390386]  [] ? do_futex+0x107/0x540
[69396.390389]  [] ? blk_finish_plug+0x2c/0x40
[69396.390393]  [] ? SyS_madvise+0x48d/0x7d0
[69396.390395]  [] ? __schedule+0x3b6/0xa30
[69396.390398]  [] __do_page_fault+0x197/0x400
[69396.390401]  [] do_page_fault+0x22/0x30
[69396.390404]  [] page_fault+0x28/0x30
[69396.390424] Code: 00 55 48 89 e5 41 57 41 56 41 55 41 54 49 89 cd 53 48 83 ec 08 0f 1f 44 00 00 49 09 fc 49 89 f7 41 89 d6 48 8b 07 f6 c4 80 75 6c  8b 04 24 f6 c4 40 0f 84 f0 00 00 00 49 8b 04 24 f6 c4 40 0f 
[69396.390427] RIP  [] mem_cgroup_try_charge+0x2f/0x1e0
[69396.390427]  RSP 
[69396.390428] CR2: ffffea020f767740
[69396.390429] ---[ end trace a8c24237c7d97c39 ]---

興味深いことに/proc/4088/tasks416841834176

この問題は、以下に関連する可能性があります。https://github.com/bazelbuild/bazel/issues/2445

なぜ立ち往生していますか?どうですか?

ベストアンサー1

プロセスのページエラーは、現在RAMにマップされていないメモリ位置にアクセスすることによって発生します。プロセスがSIGSEGVハンドラを使用して汚れたトリックを実行しない限り、これは2つの理由で発生する可能性があります。プロセスがマップされていないアドレスへのアクセスである可能性があります。この場合、プロセスがクラッシュする可能性があります(バグ)。マップされているが現在RAMにないアドレスへのアクセス。後者は完全に合法的です。現在キャッシュされていないメモリーマップされたファイルの場所、または現在スワップアウトされている割り当てられたメモリーの場所。

ページエラーは、プロセスにエラーが発生したことを意味します。プロセッサトラップ(マッピングされていないメモリアドレスにアクセスした結果です。)トラップはカーネルコードを呼び出し、そのカーネルコードが実行されている間、プロセスはステータスD(無中断)です。

ページエラーが原因でカーネルに「バグ」が発生します。バグはバグです。発生してはいけません。この時点で、プロセスは無効な状態にあります。つまり、カーネルはメモリアクセス操作を実行できません。システムの状態も悪く、根本的な原因に応じて回復が可能な場合や不可能な場合があります。

「ffffea020f767740でカーネルページング要求を処理できません」というログメッセージは、プロセスがアクセスしようとしているアドレスを示します。これはコアページング要求、カーネルコードがページエラーを処理したときに発生するエラー。このアドレスはカーネルアドレスの範囲内です。私は問題を特定するためにLinuxカーネルのエラートレースを分析するのにうまくいきません。プロセスに必要なデータを読み取るために必要ないくつかのデータ構造のメモリがカーネルに欠けている可能性があります。これが問題にならない場合は、使用しているカーネルのバージョンに既知のバグがあることを確認してください。

おすすめ記事