Thread (6 messages) 6 messages, 4 authors, 2017-01-19

Re: Hang in bcache/qemu

From: Andre Noll <hidden>
Date: 2017-01-18 09:48:12

On Wed, Jan 18, 04:35, Kai Krakow wrote
quoted
Mainboard: Asrock Rack EP2C602
CPU: 2x Intel Xeon E5-2670
Linux: 4.8.13-1-ARCH
Cache-device: Partition on Samsung SSD 850 EVO 500GB
Backing-device: 500GB Western Digital Black


Bcache is running in writeback mode. On top of bcache, I'm running
LVM, which provides a Games-LV for a Qemu Windows-10 VM (Games-HD
with drive letter 'D'. Drive C is hosted on a non-bcache block
device. Each VM has its own GPU via passthrough). For a second/third
VM, I create snapshots of the Games-LV.

When playing the game Overwatch, the first VM suddenly stops to
respond (after about >20min), some seconds later the second VM, too.

Currently I'm not near the machine with the problem, but I'm
appending as much information as possible.
Bcache doesn't seem to be involved in the backtrace - at least I
couldn't spot it but I'm not a kernel dev. Are you maybe using bfq
block scheduler? Try to switch to deadline and see if the problem
persists. I personally had similar problems with bfq.
Bcache IS involved. E.g.
quoted
[ 4068.253203] Call Trace:
[ 4068.253205]  [<ffffffff815f40ec>] schedule+0x3c/0x90
[ 4068.253207]  [<ffffffff815f67f2>] rwsem_down_write_failed+0x132/0x2b0
[ 4068.253209]  [<ffffffff8130bb37>] call_rwsem_down_write_failed+0x17/0x30
[ 4068.253211]  [<ffffffff815f5f44>] down_write+0x24/0x40
[ 4068.253214]  [<ffffffffa005747b>] bch_writeback_thread+0x6b/0x7f0 [bcache]
[ 4068.253218]  [<ffffffffa0057410>] ? write_dirty+0xb0/0xb0 > > [bcache]
[ 4068.253220]  [<ffffffff8109be38>] kthread+0xd8/0xf0
[ 4068.253221]  [<ffffffff8102c782>] ? __switch_to+0x2d2/0x630
[ 4068.253223]  [<ffffffff815f823f>] ret_from_fork+0x1f/0x40
[ 4068.253225]  [<ffffffff8109bd60>] ? kthread_worker_fn+0x170/0x170
FWIW, I'm seeing this as well on different hardware, and with both
deadline and CFQ, so it's not a scheduler issue. The problem seems to
be the bcache writeback thread calling down_write(&dc->writeback_lock)
while already holding this lock.

Calling down_write_trylock() instead of plain down_write() and
scheduling an interruptible timeout if ->writeback_lock could not be
acquired seems to cure the problem. This only papers over the real
bug though, so that's not a proper solution.

Kent: Any idea?

Thanks
Andre
-- 
Max Planck Institute for Developmental Biology
Spemannstraße 35, 72076 Tübingen, Germany. Phone: (+49) 7071 601 829
http://people.tuebingen.mpg.de/maan/

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help