Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Nov 2016 15:17:13 -0500
From:      David Cross <dcrosstech@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Re: FreeBSD 11 i386 disk deadlock (I think) (now with reproduction steps!)
Message-ID:  <CAM9edeMYMhnkWid7Lig5D-FjhahniFm0VbFRm8ysyb85h29wXg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
So, narrowing this down, I think it has something to do with geli swap
(since I can easily reproduce it with geli swap, but have yet to reproduce
it without).. and I have a bit of a convoluted way almost anyone can
reproduce it with bhyve.  (Note, I haven't been able to get a crashdump,
since apparently the VM system being locked up prevents that, but with
watchdogd, I have been able to get into DDB)

Anyway, my reproduction steps, I used the 11.0 Retail DVD, but I fully
suspect the 11.0-RELEASE image will be fine to install an i386 image into
bhyve; I install to vtbd disks (even though my 'real' case is to an ada
device, that this can be repro-ed across such wide "hardware" really
reduces the likelyhood of a device driver issue)

After its installed, I start my VM with the following (dropping memory to
the floor, well below my "real" machine, but the emulated machine is much
faster and I suspsect this is a race condition somewhere), note the options
to the virtio-blk device to pin it to "real" and not hit the host vmcache,
again speed seems to be key here, and slowing things down makes it more
likely to happen.

bhyveload -m 64M -d /usr/bhyve/11.0.1-i386.img fbsd11-i386
bhyve -u -A -c 1 -H -m 64M -C -s 0,hostbridge -s 1,lpc -s 2,virtio-net,tap0
-s 3,virtio-blk,/usr/bhyve/11.0.1-i386.img,nocache,direct -l
com1,/dev/nmdm0A fbsd11-i386

At this point:
Log into the VM
cd /usr/src
/usr/bin/make buildkernel
<wait>

For me this has hung 99% of the time at:
objcopy --strip-debug kernel

Once you've gotten here once, I have been able to just skip the rest of the
compile, cd /usr/obj/usr/src/sys/GENERIC run that command directly and
trigger the condition.

What I have at this point is the following DDB ps list:

db> ps
  pid  ppid  pgrp   uid   state   wmesg     wchan    cmd
  645   633   633     0  DV      pfault   0xc1c4f6d8 watchdogd
  641   621   641     0  D+      pfault   0xc1c4f6d8 objcopy
  633     1   633     0  Ds      ppwait   0xc37f9994 watchdogd
  621   620   621     0  SW+     pause    0xc3cb03a8 csh
  620     1   620     0  SWs+    wait     0xc3cb0688 login
  619     1   619     0  Ss+     ttyin    0xc35d0470 getty
  618     1   618     0  Ss+     ttyin    0xc35d0670 getty
  617     1   617     0  Ss+     ttyin    0xc35d0870 getty
  616     1   616     0  Ss+     ttyin    0xc35d0a70 getty
  615     1   615     0  Ss+     ttyin    0xc35d0c70 getty
  614     1   614     0  Ss+     ttyin    0xc35d0e70 getty
  613     1   613     0  Ss+     ttyin    0xc35d1c70 getty
  612     1   612     0  Ss+     ttyin    0xc35d1a70 getty
  567     1   567     0  Ss      nanslp   0xc1bcd248 cron
  563     1   563    25  SWs     pause    0xc3a9ba30 sendmail
  560     1   560     0  Ss      select   0xc37e1124 sendmail
  557     1   557     0  Ss      select   0xc3728ca4 sshd
  363     1   363     0  Ss      select   0xc37e0f24 syslogd
  290     1   290     0  Ds      pfault   0xc1c4f6d8 devd
   50     0     0     0  DL      vmwait   0xc1c4f6d8 [g_eli[0] vtbd0p3]
   21     0     0     0  DL      vlruwt   0xc37f7688 [vnlru]
   20     0     0     0  DL      syncer   0xc1bee444 [syncer]
   19     0     0     0  DL      -        0xc1bede7c [bufspacedaemon]
   18     0     0     0  DL      (threaded)          [bufdaemon]
100046                   D       psleep   0xc1bed284 [bufdaemon]
100056                   D       sdflush  0xc398f484 [/ worker]
100060                   D       sdflush  0xc398f084 [/usr worker]
100061                   D       sdflush  0xc398ec84 [/var worker]
   17     0     0     0  DL      pgzero   0xc1bf3a28 [pagezero]
   16     0     0     0  DL      psleep   0xc1bf38a4 [vmdaemon]
   15     0     0     0  DL      (threaded)          [pagedaemon]
100043                   D       wswbuf0  0xc1bf30d4 [pagedaemon]
100050                   D       umarcl   0xc1bf34a0 [uma]
   14     0     0     0  DL      -        0xc1becd1c [soaiod4]
    9     0     0     0  DL      -        0xc1becd1c [soaiod3]
    8     0     0     0  DL      -        0xc1becd1c [soaiod2]
    7     0     0     0  DL      -        0xc1becd1c [soaiod1]
    6     0     0     0  DL      -        0xc1aa6eec [rand_harvestq]
    5     0     0     0  DL      waiting_ 0xc1c4c540 [sctp_iterator]
    4     0     0     0  DL      (threaded)          [cam]
100019                   D       -        0xc19f2f80 [doneq0]
100038                   D       -        0xc19f2e2c [scanner]
    3     0     0     0  DL      crypto_r 0xc1bf27d8 [crypto returns]
    2     0     0     0  DL      crypto_w 0xc1bf2718 [crypto]
   13     0     0     0  DL      (threaded)          [geom]
100013                   D       -        0xc1c47660 [g_event]
100014                   D       -        0xc1c47664 [g_up]
100015                   D       -        0xc1c47668 [g_down]
   12     0     0     0  WL      (threaded)          [intr]
100004                   I                           [swi4: clock (0)]
100005                   I                           [swi3: vm]
100006                   I                           [swi1: netisr 0]
100007                   I                           [swi6: Giant taskq]
100010                   I                           [swi5: fast taskq]
100012                   I                           [swi6: task queue]
100023                   I                           [irq264: virtio_pci0]
100024                   I                           [irq265: virtio_pci0]
100025                   I                           [irq266: virtio_pci0]
100028                   I                           [irq267: virtio_pci1]
100029                   I                           [irq268: virtio_pci1]
100030                   I                           [irq1: atkbd0]
100031                   I                           [irq12: psm0]
100032                   I                           [swi0: uart uart]
100033                   I                           [irq14: ata0]
100034                   I                           [irq15: ata1]
   11     0     0     0  RL      CPU 0               [idle: cpu0]
    1     0     1     0  SLs     wait     0xc35ee9cc [init]
   10     0     0     0  DL      audit_wo 0xc1c4f430 [audit]
    0     0     0     0  DLs     (threaded)          [kernel]
100000                   D       vmwait   0xc1c4f6d8 [swapper]
100008                   D       -        0xc35f4f00 [aiod_kick taskq]
100009                   D       -        0xc35f4e80 [thread taskq]
100011                   D       -        0xc35f4d00 [kqueue_ctx taskq]
100016                   D       -        0xc35f4380 [firmware taskq]
100020                   D       -        0xc35f3680 [acpi_task_0]
100021                   D       -        0xc35f3680 [acpi_task_1]
100022                   D       -        0xc35f3680 [acpi_task_2]
100026                   D       -        0xc35f6d00 [vtnet0 rxq 0]
100027                   D       -        0xc35f6c80 [vtnet0 txq 0]
100037                   D       -        0xc35f3a00 [CAM taskq]

I note that the swapper and that geli are both in vmwait, and a bunch of
other processes are in pfault, and the "crypto" drivers are in disk wait??

I am not sure what else to do here.  I also started bhyve with -C, so I can
control-\ and get a process dump that includes guestvm.. but i am likewise
unsure where else to proceed.  I am happy to provide core dumps/etc to
people, this is a dedicated VM with nothing in it.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAM9edeMYMhnkWid7Lig5D-FjhahniFm0VbFRm8ysyb85h29wXg>