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.

CPU のワークキューが hpsa ドライバーによって停止しているため、タスクがブロックされる

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 6.5
  • Red Hat Enterprise Linux 6.6
  • 以下のパッケージに含まれるバージョン 3.4.4-1-RH1 または 3.4.4-1-RH2 の HP HPSA ドライバー
    • kmod-hpsa-3.4.4_1_RH1-1.el6_5.x86_64
    • kernel-2.6.32-504.el6.x86_64
    • kernel-2.6.32-504.1.3.el6.x86_64
    • kernel-2.6.32-504.3.3.el6.x86_64
    • kernel-2.6.32-504.8.1.el6.x86_64
    • kernel-2.6.32-504.12.2.el6.x86_64
    • i686 32 ビットバージョンも影響を受ける可能性があります。
  • Firmware のバージョンが 2.143.04、または 3.22 である HP Smart Array P220i または P420i
  • オプションで hp-snmp-agents パッケージ (このパッケージを使用するとこの事象を早く引き起こします)

Issue

  • "INFO: task foo:666 blocked for more than 120 seconds." メッセージがコンソールまたはログに表示されます。

  • 遅延した作業が完了するまで、タスクが停止します。

  • サーバーは、以下のメッセージでハングアップまたはパニックになります。

    INFO: task sshd:6425 blocked for more than 120 seconds.
          Not tainted 2.6.32-431.11.2.el6.x86_64 #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    sshd          D 000000000000000e     0  6425   6418 0x00000080
     ffff88032926f768 0000000000000086 0000000000000000 0000000000000000
     ffff88032926f848 ffffffff8105a924 ffff88032926f7e8 ffff88032926f758
     ffff8803262625f8 ffff88032926ffd8 000000000000fbc8 ffff8803262625f8
    Call Trace:
     [<ffffffff81528dd5>] schedule_timeout+0x215/0x2e0
     [<ffffffff81528a53>] wait_for_common+0x123/0x180
     [<ffffffff81528b6d>] wait_for_completion+0x1d/0x20
     [<ffffffff81095927>] flush_work+0x77/0xc0
     [<ffffffff81095b44>] flush_delayed_work+0x54/0x70
     [<ffffffff8133b525>] tty_flush_to_ldisc+0x15/0x20
     [<ffffffff81336197>] n_tty_poll+0x67/0x1d0
     [<ffffffff81331cda>] tty_poll+0x8a/0xa0
     [<ffffffff811a0c92>] do_select+0x392/0x6c0
     [<ffffffff811a114a>] core_sys_select+0x18a/0x2c0
     [<ffffffff811a14d7>] sys_select+0x47/0x110
     [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
    

    または、

    INFO: task mingetty:5371 blocked for more than 120 seconds.
          Not tainted 2.6.32-504.1.3.el6.x86_64 #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    mingetty      D 0000000000000008     0  5371      1 0x00000080
     ffff880439c81b88 0000000000000086 0000000000000000 ffff8804bc549087
     ffff880439c81b78 ffffffff812966a0 0000002debbb7c24 0000000100000001
     ffffffffffffffff 00000000fffe3a75 ffff88043a08b098 ffff880439c81fd8
    Call Trace:
     [<ffffffff8152a8e5>] schedule_timeout+0x215/0x2e0
     [<ffffffff8152a563>] wait_for_common+0x123/0x180
     [<ffffffff8152a67d>] wait_for_completion+0x1d/0x20
     [<ffffffff810983b1>] flush_cpu_workqueue+0x61/0x90
     [<ffffffff81098e84>] flush_workqueue+0x54/0x80
     [<ffffffff81098ec5>] flush_scheduled_work+0x15/0x20
     [<ffffffff813383bc>] tty_ldisc_release+0x3c/0x90
     [<ffffffff813326db>] tty_release_dev+0x40b/0x5e0
     [<ffffffff813328ce>] tty_release+0x1e/0x30
     [<ffffffff8118f8d5>] __fput+0xf5/0x210
     [<ffffffff8118fa15>] fput+0x25/0x30
     [<ffffffff8118ac6d>] filp_close+0x5d/0x90
     [<ffffffff8118ad45>] sys_close+0xa5/0x100
     [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b
    

Resolution

  • 解決策

    • kernel-2.6.32-504.16.2.el6 は、エラータ RHSA-2015:0864 で入手できます。
    • この問題は、bugzilla BZ#1193639 (非公開) で対応していました。
  • 回避方法

    • Smart Array のファームウェアを 3.42 にアップデートするとこの問題を回避することが報告されています。その他のバージョンのファームウェア (3.544.685.426.006.34) でも問題が修正されることが報告されています。
    • 以下の組み合わせを使用すると、この問題が発生しないことが報告されています。
HP Smart Array ファームウェア HPSA ドライバー
2.14、3.04、3.22 3.4.0-1-RH1
3.42、3.54、4.68、5.42、6.00、6.34 3.4.0-1-RH1、3.4.4-1-RH1-1、3.4.4-1-RH2

Root Cause

hpsa ドライバーは 10 分でタイムアウトになるまでコントローラーの応答を待つため、CPU ワークキューをブロックします。これが発生すると、ワークキューが停止します。tty ワークが同じ CPU ワークキューにあるため、ハングアップしているタスクがあります。

以下は、kmod-hpsa ソースの抜粋です。

  62 #define MAX_CONFIG_WAIT 30000
<...>
6439 static void hpsa_wait_for_clear_event_notify_ack(struct ctlr_info *h)
6440 {
6441         int i;
6442         u32 doorbell_value;
6443         unsigned long flags;
6444         /* wait until the clear_event_notify bit 6 is cleared by controller.*/
6445         for (i = 0; i < MAX_CONFIG_WAIT; i++) {
6446                 spin_lock_irqsave(&h->lock, flags);
6447                 doorbell_value = readl(h->vaddr + SA5_DOORBELL);
6448                 spin_unlock_irqrestore(&h->lock, flags);
6449                 if (!(doorbell_value & DOORBELL_CLEAR_EVENTS))
6450                         break;
6451                 /* delay and try again */
6452                 msleep(20);
6453         }
6454 }

Diagnostic Steps

  • hpsa のバージョンを確認します。

    $ modinfo hpsa | grep "^version:"
    version:        3.4.0-1-RH1
    
  • sosreport を収集します。

  • 問題が発生したりハングアップしたときにカーネルからコアダンプを取得してください。

    • バックトレース

      crash> bt sshd
      PID:6425   TASK: ffff880326262040  CPU:14  COMMAND:"sshd"
       #0 [ffff88032926f6a8] schedule at ffffffff81527ee2
       #1 [ffff88032926f770] schedule_timeout at ffffffff81528dd5
       #2 [ffff88032926f820] wait_for_common at ffffffff81528a53
       #3 [ffff88032926f8b0] wait_for_completion at ffffffff81528b6d
       #4 [ffff88032926f8c0] flush_work at ffffffff81095927
       #5 [ffff88032926f930] flush_delayed_work at ffffffff81095b44
       #6 [ffff88032926f950] tty_flush_to_ldisc at ffffffff8133b525
       #7 [ffff88032926f960] n_tty_poll at ffffffff81336197
       #8 [ffff88032926f990] tty_poll at ffffffff81331cda
       #9 [ffff88032926f9d0] do_select at ffffffff811a0c92
      #10 [ffff88032926fd70] core_sys_select at ffffffff811a114a
      #11 [ffff88032926ff10] sys_select at ffffffff811a14d7
      
    • tty_flush_to_ldisk は、ただ、tty->buf.work のキューに入った作業がすべて終了するのを待ちます。

      void tty_flush_to_ldisc(struct tty_struct *tty)
      {
              flush_delayed_work(&tty->buf.work);
      }
      
    • cpu_workqueue_struct で関数またはスレッドを確認します。

      crash> cpu_workqueue_struct 0xffff880032e19540
      struct cpu_workqueue_struct {
        lock = {
          raw_lock = {
            slock = 1548770384
          }
        }, 
        worklist = {
          next = 0xffffffff81b1d6d0 <arp_tbl+240>, 
          prev = 0xffff880336943290
        }, 
        more_work = {
          lock = {
            raw_lock = {
              slock = 905852414
            }
          }, 
          task_list = {
            next = 0xffff880032e19560, 
            prev = 0xffff880032e19560
          }
        }, 
        current_work = 0xffff880339dec3e0, 
        wq = 0xffff88063a50f400, 
        thread = 0xffff88033acdf540 <<<
      }
      
    • cpu_workqueue_struct のスレッドを確認します。

      crash> kmem 0xffff88033acdf540
      CACHE            NAME                 OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE
      ffff88063c880140 task_struct             2656       1247      1323    441     8k
      SLAB              MEMORY            TOTAL  ALLOCATED  FREE
      ffff88033acde040  ffff88033acde080      3          3     0
      FREE / [ALLOCATED]
        [ffff88033acdf540]
      
          PID:99
      COMMAND:"events/0"
         TASK: ffff88033acdf540  [THREAD_INFO: ffff88033ace8000]
          CPU:0
        STATE:TASK_UNINTERRUPTIBLE 
      
            PAGE        PHYSICAL      MAPPING       INDEX CNT FLAGS
      ffffea000b4dd0c8 33acdf000                0        0  0 40000000000080 slab
      
    • スレッドのバックトレース:

      crash> bt 99
      PID:99     TASK: ffff88033acdf540  CPU:0   COMMAND:"events/0"
       #0 [ffff88033ace9c00] schedule at ffffffff81527ee2
       #1 [ffff88033ace9cc8] schedule_timeout at ffffffff81528d52
       #2 [ffff88033ace9d78] schedule_timeout_uninterruptible at ffffffff81528ebe
       #3 [ffff88033ace9d88] msleep at ffffffff81086380
       #4 [ffff88033ace9d98] hpsa_wait_for_clear_event_notify_ack at ffffffffa003668d [hpsa]
       #5 [ffff88033ace9dc8] hpsa_monitor_ctlr_worker at ffffffffa003ee42 [hpsa]
       #6 [ffff88033ace9e38] worker_thread at ffffffff81094d10
       #7 [ffff88033ace9ee8] kthread at ffffffff8109aee6
       #8 [ffff88033ace9f48] kernel_thread at ffffffff8100c20a
      
    • したがって、hpsa_wait_for_clear_event_notify_ack で hpsa によってブロックされています。

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