Date: Tue, 10 Feb 2015 17:22:23 +0100 From: =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= <roger.pau@citrix.com> To: Andrew Thompson <thompsa@FreeBSD.org>, <freebsd-xen@freebsd.org> Subject: Re: xenstore memory issue Message-ID: <54DA303F.9020203@citrix.com> In-Reply-To: <CAFAOGNR6u3O9WhG0tjey-7thKTM8HXweK2vn4TJRLvE7OezF%2BA@mail.gmail.com> References: <CAFAOGNTCJsXr0VOUHAtFoPvQO5VWSUvL_VKkxYoaCtrZdC6zUg@mail.gmail.com> <54D88BD5.7050703@citrix.com> <CAFAOGNTqMOF=wK79PzoOV8d8Qh-4CkHPs4rxy9gmfBEbQ9-CfA@mail.gmail.com> <CAFAOGNR6u3O9WhG0tjey-7thKTM8HXweK2vn4TJRLvE7OezF%2BA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello Andrew, El 10/02/15 a les 10.22, Andrew Thompson ha escrit: > On 10 February 2015 at 16:25, Andrew Thompson <thompsa@freebsd.org> wrote: > >> On 9 February 2015 at 23:28, Roger Pau Monné <roger.pau@citrix.com> wrote: >> A bit of trial and error with dtrace has narrowed this down. I can cause >> the leak by just opening /dev/xen/xenstore >> >> int main() { >> open("/dev/xen/xenstore", O_RDWR, 0); >> } >> >> # vmstat -m | grep xenstore; ./open; vmstat -m | grep xenstore >> xenstore 8739 104797K - 56078 16,32,64,128,256,512 >> xenstore 8740 104809K - 56079 16,32,64,128,256,512 >> >> >> Using dtrace probes I can see that xs_dev_close is never called. >> > > I think I have worked this out. Rackspace use an agent called nova-agent > which keeps and open handle on /dev/xen/xenstore. Since xenstore isnt using > the D_TRACKCLOSE flag it will not call d_close until the last reference is > dropped. Since xenstore expects to malloc/free on open and close this > assumption breaks and will leak memory. > > If i stop nova-agent I can see xs_dev_close being called and the memory > freed with testing with xenstore-read. The correct solution seems to be to > set D_TRACKCLOSE if I understand its purpose correctly. Thanks for doing all this legwork! IMHO the best solution is to switch xenstore dev to use cdevpriv in order to store each client data. What we are doing right now (storing client data in dev->si_dvr1) is plain wrong. I've uploaded two patches (one for HEAD and one for stable/10) so that you can try it also, please report back whether this fixes your problem or not: https://people.freebsd.org/~royger/xenstore_fix/ Roger.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?54DA303F.9020203>