[CRIU] restoring sockets with data pending
Tycho Andersen
tycho.andersen at canonical.com
Fri Oct 10 07:25:26 PDT 2014
On Fri, Oct 10, 2014 at 06:10:19PM +0400, Andrew Vagin wrote:
> On Fri, Oct 10, 2014 at 08:55:03AM -0500, Tycho Andersen wrote:
> > On Fri, Oct 10, 2014 at 03:39:41PM +0400, Andrew Vagin wrote:
> > > On Thu, Oct 09, 2014 at 03:23:20PM -0500, Tycho Andersen wrote:
> > > > Hi Pavel, Andrew,
> > > >
> > > > On Mon, Sep 15, 2014 at 02:21:18PM +0400, Pavel Emelyanov wrote:
> > > > > On 09/13/2014 04:55 AM, Tycho Andersen wrote:
> > > > > > Hi all,
> > > > > >
> > > > > > One of the errors that I sometimes get when dumping things is:
> > > > > >
> > > > > > Error (sk-netlink.c:73): The socket has data to read
> > > > >
> > > > > Yup :) These are netlink sockets with some data from the krenel.
> > > > >
> > > > > > What is necessary to fix this problem? I guess there is some work to
> > > > > > be done on the kernel side to provide an API for getting these
> > > > > > buffers? Is there some other trick we can use?
> > > > >
> > > > > Strictly speaking, we should patch the kernel to be able to peek
> > > > > this data from socket and to put it back. But maybe in some cases
> > > > > we could invent some workaround (I'm not quite sure netdev@ people
> > > > > would be happy with such hacks :) ).
> > > > >
> > > > > Can we investigate what kind of socket is it and what data is in
> > > > > there?
> > > >
> > > > Finally getting around to looking at this; lsof says:
> > > >
> > > > systemd-u 179 root 4u netlink 0t0 13252 KOBJECT_UEVENT
> > >
> > > http://www.makelinux.net/books/lkd2/ch17lev1sec9
> > >
> > > How often do you see data in this socket?
> >
> > The failure only happens the first checkpoint of each fresh boot of
> > the host. After one such failure, everything seems to work just fine.
> >
> > > If "systemd-u" is systemd-udev, you can try to use "udevadm monitor" to
> > > find out which events are here.
> >
> > Here's the full log, 53s is the container boot, 58s is the criu dump:
> >
> > monitor will print the received events for:
> > UDEV - the event which udev sends out after rule processing
> > KERNEL - the kernel uevent
> >
> > KERNEL[53.770082] add /module/veth (module)
> > KERNEL[53.771621] add /devices/virtual/net/vethUIX1V6 (net)
> > UDEV [53.771644] add /module/veth (module)
> > KERNEL[53.771658] add /devices/virtual/net/vethUIX1V6/queues/rx-0 (queues)
> > KERNEL[53.771669] add /devices/virtual/net/vethUIX1V6/queues/tx-0 (queues)
> > KERNEL[53.771682] add /devices/virtual/net/veth2XKLIH (net)
> > KERNEL[53.771692] add /devices/virtual/net/veth2XKLIH/queues/rx-0 (queues)
> > KERNEL[53.771702] add /devices/virtual/net/veth2XKLIH/queues/tx-0 (queues)
> > KERNEL[53.777260] add /kernel/slab/nf_conntrack_ffff880074adb000 (slab)
> > KERNEL[53.777716] add /devices/virtual/net/lo/queues/rx-0 (queues)
> > KERNEL[53.777736] add /devices/virtual/net/lo/queues/tx-0 (queues)
> > UDEV [53.777836] add /kernel/slab/nf_conntrack_ffff880074adb000 (slab)
> > UDEV [53.779071] add /devices/virtual/net/lo/queues/rx-0 (queues)
> > UDEV [53.779380] add /devices/virtual/net/lo/queues/tx-0 (queues)
> > UDEV [53.783180] add /devices/virtual/net/vethUIX1V6 (net)
> > UDEV [53.784406] add /devices/virtual/net/vethUIX1V6/queues/rx-0 (queues)
> > UDEV [53.784419] add /devices/virtual/net/vethUIX1V6/queues/tx-0 (queues)
> > UDEV [53.785438] add /devices/virtual/net/veth2XKLIH (net)
> > UDEV [53.785456] add /devices/virtual/net/veth2XKLIH/queues/tx-0 (queues)
> > UDEV [53.785464] add /devices/virtual/net/veth2XKLIH/queues/rx-0 (queues)
> > KERNEL[53.808246] remove /devices/virtual/net/vethUIX1V6 (net)
> > UDEV [53.809029] remove /devices/virtual/net/vethUIX1V6 (net)
> > KERNEL[58.967936] add /module/unix_diag (module)
> > UDEV [58.969124] add /module/unix_diag (module)
> > KERNEL[58.973698] add /module/inet_diag (module)
> > UDEV [58.973712] add /module/inet_diag (module)
> > KERNEL[58.975979] add /module/tcp_diag (module)
> > UDEV [58.976274] add /module/tcp_diag (module)
> > KERNEL[58.978291] add /module/udp_diag (module)
> > UDEV [58.979284] add /module/udp_diag (module)
> > KERNEL[58.982102] add /module/af_packet_diag (module)
> > UDEV [58.983034] add /module/af_packet_diag (module)
> > KERNEL[58.985707] add /module/netlink_diag (module)
> > UDEV [58.986084] add /module/netlink_diag (module)
>
> Here is an answer. We get events about new modules. So if you load
> these modules before dumping, you will not have these events and data in
> a socket.
Yes, that fixes it for me. What's the right solution here? I guess the
real solution is to dump the data in the socket, but barring that
should we just force the modules to load before we use them?
Tycho
> >
> > Tycho
More information about the CRIU
mailing list