From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: "Gonglei (Arei)" <arei.gonglei@huawei.com>
Cc: "ian.campbell@citrix.com" <ian.campbell@citrix.com>,
"stefano.stabellini@eu.citrix.com"
<stefano.stabellini@eu.citrix.com>,
"Zhangbo (Oscar)" <oscar.zhangbo@huawei.com>,
Yanqiangjun <yanqiangjun@huawei.com>,
Luonengjun <luonengjun@huawei.com>,
"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
"rjw@sisk.pl" <rjw@sisk.pl>,
"rshriram@cs.ubc.ca" <rshriram@cs.ubc.ca>,
"Jinjian (Ken)" <jinjian@huawei.com>
Subject: Re: pvops: Does PVOPS guest os support online "suspend/resume"
Date: Mon, 12 Aug 2013 08:49:34 -0400 [thread overview]
Message-ID: <20130812124934.GI2898@phenom.dumpdata.com> (raw)
In-Reply-To: <33183CC9F5247A488A2544077AF1902081592D12@SZXEMA503-MBS.china.huawei.com>
On Sat, Aug 10, 2013 at 08:29:43AM +0000, Gonglei (Arei) wrote:
>
>
> > -----Original Message-----
> > From: Konrad Rzeszutek Wilk [mailto:konrad.wilk@oracle.com]
> > Sent: Friday, August 09, 2013 3:17 AM
> > To: Gonglei (Arei)
> > Cc: xen-devel@lists.xen.org; Zhangbo (Oscar); Luonengjun; Hanweidong
> > Subject: Re: [Xen-devel] pvops: Does PVOPS guest os support online
> > "suspend/resume"
> >
> > On Thu, Aug 08, 2013 at 02:23:06PM +0000, Gonglei (Arei) wrote:
> > > Hi all,
> > >
> > > While suspend and resume a PVOPS guest os while it's running, we found that
> > it would get its block/net io stucked. However, non-PVOPS guest os has no such
> > problem.
> > >
> >
> > With what version of Linux is this? Have you tried with v3.10?
>
> Thanks for responding. We've tried kernel "3.5.0-17 generic" (ubuntu 12.10), the problem still exists.
So you have not tried v3.10. v3.5 is ancient from the upstream perspective.
> Although we are not sure about the result about kernel 3.10, but suspiciously it would also have the same problem.
Potentially. There were fixes added in 3.5:
commit 569ca5b3f94cd0b3295ec5943aa457cf4a4f6a3a
Author: Jan Beulich <JBeulich@suse.com>
Date: Thu Apr 5 16:10:07 2012 +0100
xen/gnttab: add deferred freeing logic
Rather than just leaking pages that can't be freed at the point where
access permission for the backend domain gets revoked, put them on a
list and run a timer to (infrequently) retry freeing them. (This can
particularly happen when unloading a frontend driver when devices are
still present, and the backend still has them in non-closed state or
hasn't finished closing them yet.)
and that seems to be triggered.
>
> Xen version: 4.3.0
>
> Another method to reproduce:
> 1) xl create dom1.cfg
> 2) xl save -c dom1 /path/to/save/file
> (-c Leave domain running after creating the snapshot.)
>
> As I mentioned before, the problem occurs because PVOPS guest os RESUMEes blkfront when the guest resumes.
> The "blkfront_resume" method seems unnecessary here.
It has to do that otherwise it can't replay the I/Os that might not have
hit the platter when it migrated from the original host.
But you are exercising the case where it does a checkpoint,
not a full save/restore cycle.
In which case you might be indeed hitting a bug.
> non-PVOPS guest os doesn't RESUME blkfront, thus they works fine.
Potentially. The non-PVOPS guests are based on an ancient kernels and
the upstream logic in the generic suspend/resume machinery has also
changed.
>
> So, here comes the 2 questions, is the problem caused because:
> 1) PVOPS kernel doesn't take this situation into accont, and has a bug here?
> or
> 2) PVOPS has other ways to avoid such problem?
Just to make sure I am not confused here. The problem does not
appear if you do NOT use -c, correct?
>
> -Gonglei
> >
> > Thanks.
> > > How reproducible:
> > > -------------------
> > > 1/1
> > >
> > > Steps to reproduce:
> > > ------------------
> > > 1)suspend guest os
> > > Note: do not migrate/shutdown the guest os.
> > > 2)resume guest os
> > >
> > > (Think about rolling-back(resume) during core-dumping(suspend) a guest,
> > such problem would cause the guest os unoprationable.)
> > >
> > >
> > ================================================================
> > ====
> > > we found warning messages in guest os:
> > > --------------------------------------------------------------------
> > > Aug 2 10:17:34 localhost kernel: [38592.985159] platform pcspkr: resume
> > > Aug 2 10:17:34 localhost kernel: [38592.989890] platform vesafb.0: resume
> > > Aug 2 10:17:34 localhost kernel: [38592.996075] input input0: type resume
> > > Aug 2 10:17:34 localhost kernel: [38593.001330] input input1: type resume
> > > Aug 2 10:17:34 localhost kernel: [38593.005496] vbd vbd-51712: legacy
> > resume
> > > Aug 2 10:17:34 localhost kernel: [38593.011506] WARNING: g.e. still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.016909] WARNING: leaking g.e.
> > and page still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.026204] xen vbd-51760: legacy
> > resume
> > > Aug 2 10:17:34 localhost kernel: [38593.033070] vif vif-0: legacy resume
> > > Aug 2 10:17:34 localhost kernel: [38593.039327] WARNING: g.e. still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.045304] WARNING: leaking g.e.
> > and page still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.052101] WARNING: g.e. still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.057965] WARNING: leaking g.e.
> > and page still in use!
> > > Aug 2 10:17:34 localhost kernel: [38593.066795] serial8250 serial8250:
> > resume
> > > Aug 2 10:17:34 localhost kernel: [38593.073556] input input2: type resume
> > > Aug 2 10:17:34 localhost kernel: [38593.079385] platform Fixed MDIO bus.0:
> > resume
> > > Aug 2 10:17:34 localhost kernel: [38593.086285] usb usb1: type resume
> > > ------------------------------------------------------
> > >
> > > which means that we refers to a grant-table while it's in use.
> > >
> > > The reason results in that:
> > > suspend/resume codes:
> > > --------------------------------------------------------
> > > //drivers/xen/manage.c
> > > static void do_suspend(void)
> > > {
> > > int err;
> > > struct suspend_info si;
> > >
> > > shutting_down = SHUTDOWN_SUSPEND;
> > >
> > > ………………
> > > err = dpm_suspend_start(PMSG_FREEZE);
> > > ………………
> > > dpm_resume_start(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
> > >
> > > if (err) {
> > > pr_err("failed to start xen_suspend: %d\n", err);
> > > si.cancelled = 1;
> > > }
> > > //NOTE: si.cancelled = 1
> > >
> > > out_resume:
> > > if (!si.cancelled) {
> > > xen_arch_resume();
> > > xs_resume();
> > > } else
> > > xs_suspend_cancel();
> > >
> > > dpm_resume_end(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
> > //blkfront device got resumed here.
> > >
> > > out_thaw:
> > > #ifdef CONFIG_PREEMPT
> > > thaw_processes();
> > > out:
> > > #endif
> > > shutting_down = SHUTDOWN_INVALID;
> > > }
> > > ------------------------------------
> > >
> > > Func "dpm_suspend_start" suspends devices, and "dpm_resume_end"
> > resumes devices.
> > > However, we found that the device "blkfront" has no SUSPEND method but
> > RESUME method.
> > >
> > > -------------------------------------
> > > //drivers/block/xen-blkfront.c
> > > static DEFINE_XENBUS_DRIVER(blkfront, ,
> > > .probe = blkfront_probe,
> > > .remove = blkfront_remove,
> > > .resume = blkfront_resume, // only RESUME method found here.
> > > .otherend_changed = blkback_changed,
> > > .is_ready = blkfront_is_ready,
> > > );
> > > --------------------------------------
> > >
> > > It resumes blkfront device when it didn't get suspended, which caused the
> > prolem above.
> > >
> > >
> > > =========================================
> > > In order to check whether it's the problem of PVOPS or hypervisor(xen)/dom0,
> > we suspend/resume other non-PVOPS guest oses, no such problem occured.
> > >
> > > Other non-PVOPS are using their own xen drivers, as shown in
> > https://github.com/jpaton/xen-4.1-LJX1/blob/master/unmodified_drivers/linux-
> > 2.6/platform-pci/machine_reboot.c :
> > >
> > > int __xen_suspend(int fast_suspend, void (*resume_notifier)(int))
> > > {
> > > int err, suspend_cancelled, nr_cpus;
> > > struct ap_suspend_info info;
> > >
> > > xenbus_suspend();
> > >
> > > ……………………
> > > preempt_enable();
> > >
> > > if (!suspend_cancelled)
> > > xenbus_resume(); //when the guest os get resumed,
> > suspend_cancelled == 1, thus it wouldn't enter xenbus_resume_uvp here.
> > > else
> > > xenbus_suspend_cancel(); //It gets here. so the blkfront
> > wouldn't resume.
> > >
> > > return 0;
> > > }
> > >
> > >
> > > In non-PVOPS guest os, although they don't have blkfront SUSPEND method
> > either, their xen-driver doesn't resume blkfront device, thus, they would't have
> > any problem after suspend/resume.
> > >
> > >
> > > I'm wondering why the 2 types of driver(PVOPS and non-PVOPS) are different
> > here.
> > > Is that because:
> > > 1) PVOPS kernel doesn't take this situation into accont, and has a bug here?
> > > or
> > > 2) PVOPS has other ways to avoid such problem?
> > >
> > > thank you in advance.
> > >
> > > -Gonglei
> > > _______________________________________________
> > > Xen-devel mailing list
> > > Xen-devel@lists.xen.org
> > > http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2013-08-12 12:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-08 14:23 pvops: Does PVOPS guest os support online "suspend/resume" Gonglei (Arei)
2013-08-08 19:16 ` Konrad Rzeszutek Wilk
2013-08-10 8:29 ` Gonglei (Arei)
2013-08-12 12:49 ` Konrad Rzeszutek Wilk [this message]
2013-08-12 14:19 ` Gonglei (Arei)
2013-08-12 18:04 ` Shriram Rajagopalan
2013-08-13 14:38 ` Gonglei (Arei)
2013-08-13 16:34 ` Konrad Rzeszutek Wilk
2013-08-14 10:52 ` Gonglei (Arei)
-- strict thread matches above, loose matches on Subject: below --
2013-10-29 10:24 herbert cland
2013-10-29 16:48 ` Konrad Rzeszutek Wilk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130812124934.GI2898@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=arei.gonglei@huawei.com \
--cc=ian.campbell@citrix.com \
--cc=jinjian@huawei.com \
--cc=luonengjun@huawei.com \
--cc=oscar.zhangbo@huawei.com \
--cc=rjw@sisk.pl \
--cc=rshriram@cs.ubc.ca \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.org \
--cc=yanqiangjun@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).