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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.