From: Shailabh Nagar <nagar@watson.ibm.com>
To: hadi@cyberus.ca
Cc: Andrew Morton <akpm@osdl.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
csturtiv@sgi.com, balbir@in.ibm.com, jlan@engr.sgi.com,
Valdis.Kletnieks@vt.edu, pj@sgi.com
Subject: Re: [Patch][RFC] Disabling per-tgid stats on task exit in taskstats
Date: Tue, 04 Jul 2006 11:18:23 -0400 [thread overview]
Message-ID: <44AA86BF.3090600@watson.ibm.com> (raw)
In-Reply-To: <1152018353.5214.14.camel@jzny2>
jamal wrote:
> On Mon, 2006-03-07 at 18:01 -0700, Andrew Morton wrote:
>
>>On Mon, 03 Jul 2006 20:54:37 -0400
>>Shailabh Nagar <nagar@watson.ibm.com> wrote:
>>
>>
>>>>What happens when a listener exits without doing deregistration
>>>>(or if the listener attempts to register another cpumask while a current
>>>>registration is still active).
>>>>
>>>
>>>( Jamal, your thoughts on this problem would be appreciated)
>>>
>>>Problem is that we have a listener task which has "registered" with
>>>taskstats and caused
>>>its pid to be stored in various per-cpu lists of listeners. Later, when
>>>some other task exits on a given cpu, its exit data is sent using
>>>genlmsg_unicast on each pid present on that cpu's list.
>>>
>>>If the listener exits without doing a "deregister", its pid continues to
>>>be kept around, obviously not a good thing. So we need some way of
>>>detecting the situation (task is no longer listening on
>>>these cpus events) that is efficient.
>>
>>Also need to address the case where the listener has closed off his file
>>descriptor but continues to run.
>>
>>So hooking into listener's exit() isn't appropriate - the teardown is
>>associated with the lifetime of the fd, not of the process. If we do that,
>>exit() gets handled for free.
>
>
> If you are always going to send unicast messages, then -ECONNREFUSED
> will tell you the listener has closed their fd - this doesnt meant it
> has exited.
Thats good. So we have atleast one way of detecting the "closed fd without
deregistering" within taskstats itself.
> Besides that one process could open several sockets. I know
> that would not be the app you would write - but it doesnt stop other
> people from doing it.
As far as API is concerned, even a taskstats listener is not being
prevented from opening multiple sockets. As Andrew also pointed out,
everything needs to be done per-socket.
> I think i may not follow what you are doing - for some reason i thought
> you may have many listeners in user space and these messages get
> multicast to them?
That was the design earlier. In the past week, the design has changed to
one where there are still many listeners in user space but messages
get unicast to each of them. Earlier listeners would get messages generated
on task exit from every cpu, now they get it only from cpus for which
they have explicitly registered interest (via a cpumask passed in through
another genetlink command).
> Does the user space program somehow communicate its pid to the kernel?
Yes. When the listener registers interest in a set of cpus, as described
above, its (genl_info->pid) is being stored in the per-cpu list of
listeners for those cpus. When a task exits on one of those cpus, the
exit data is only sent via genetlink_unicast to those pids
(really, nl_pids) who are on that cpu's listener list.
Now that I think more about it, netlink is really maintaining a pidhash
of nl_pids, not process pids, right ? So if one userapp were to open
multiple sockets using NETLINK_GENERIC protocol (regardless of how many
of those are for the taskstats), each of them would have to use a
different nl_pid. Hence, it would be valid for the taskstats layer to use
netlink_lookup() at any time to see if the corresponding socket were
closed ?
--Shailabh
next prev parent reply other threads:[~2006-07-04 15:19 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <44892610.6040001@watson.ibm.com>
[not found] ` <20060609042129.ae97018c.akpm@osdl.org>
[not found] ` <4489EE7C.3080007@watson.ibm.com>
[not found] ` <449999D1.7000403@engr.sgi.com>
[not found] ` <44999A98.8030406@engr.sgi.com>
[not found] ` <44999F5A.2080809@watson.ibm.com>
[not found] ` <4499D7CD.1020303@engr.sgi.com>
[not found] ` <449C2181.6000007@watson.ibm.com>
[not found] ` <20060623141926.b28a5fc0.akpm@osdl.org>
[not found] ` <449C6620.1020203@engr.sgi.com>
[not found] ` <20060623164743.c894c314.akpm@osdl.org>
[not found] ` <449CAA78.4080902@watson.ibm.com>
[not found] ` <20060623213912.96056b02.akpm@osdl.org>
[not found] ` <449CD4B3.8020300@watson.ibm.com>
[not found] ` <44A01A50.1050403@sgi.com>
[not found] ` <20060626105548.edef4c64.akpm@osdl.org>
[not found] ` <44A020CD.30903@watson.ibm.com>
[not found] ` <20060626111249.7aece36e.akpm@osdl.org>
[not found] ` <44A026ED.8080903@sgi.com>
[not found] ` <20060626113959.839d72bc.akpm@osdl.org>
[not found] ` <44A2F50D.8030306@engr.sgi.com>
[not found] ` <20060628145341.529a61ab.akpm@osdl.org>
[not found] ` <44A2FC72.9090407@engr.sgi.com>
[not found] ` <20060629014050.d3bf0be4.pj@sgi.com>
[not found] ` <200606291230.k5TCUg45030710@turing-police.cc.vt.edu>
[not found] ` <200606291230.k5TCUg45030710@turing-police.cc.vt. edu>
[not found] ` <20060629094408.360ac157.pj@sgi.com>
[not found] ` <20060629110107.2e56310b.akpm@osdl.org>
2006-06-29 19:10 ` [Patch][RFC] Disabling per-tgid stats on task exit in taskstats Shailabh Nagar
2006-06-29 19:23 ` Paul Jackson
2006-06-29 19:33 ` Andrew Morton
2006-06-29 19:43 ` Shailabh Nagar
2006-06-29 20:00 ` Andrew Morton
2006-06-29 22:13 ` Shailabh Nagar
2006-06-29 23:00 ` jamal
2006-06-29 20:01 ` Shailabh Nagar
2006-06-29 21:22 ` Paul Jackson
2006-06-29 22:54 ` jamal
2006-06-30 0:38 ` Shailabh Nagar
2006-06-30 1:05 ` Andrew Morton
2006-06-30 1:11 ` Shailabh Nagar
2006-06-30 1:30 ` jamal
2006-06-30 3:01 ` Shailabh Nagar
2006-06-30 12:45 ` jamal
2006-06-30 2:25 ` Paul Jackson
2006-06-30 2:35 ` Andrew Morton
2006-06-30 2:43 ` Paul Jackson
2006-06-30 18:53 ` Shailabh Nagar
2006-06-30 19:10 ` Shailabh Nagar
2006-06-30 19:19 ` Shailabh Nagar
2006-06-30 20:19 ` jamal
2006-06-30 22:50 ` Andrew Morton
2006-07-01 2:20 ` Shailabh Nagar
2006-07-01 2:43 ` Andrew Morton
2006-07-01 3:37 ` Shailabh Nagar
2006-07-01 3:51 ` Andrew Morton
2006-07-03 21:11 ` Shailabh Nagar
2006-07-03 21:41 ` Andrew Morton
2006-07-04 0:13 ` Shailabh Nagar
2006-07-04 0:38 ` Andrew Morton
2006-07-04 20:19 ` Paul Jackson
2006-07-04 20:22 ` Paul Jackson
2006-07-04 0:54 ` Shailabh Nagar
2006-07-04 1:01 ` Andrew Morton
2006-07-04 13:05 ` jamal
2006-07-04 15:18 ` Shailabh Nagar [this message]
2006-07-04 16:37 ` Shailabh Nagar
2006-07-04 19:24 ` jamal
2006-07-05 14:09 ` Shailabh Nagar
2006-07-05 20:25 ` Chris Sturtivant
2006-07-05 20:32 ` Shailabh Nagar
2006-07-03 4:53 ` Paul Jackson
2006-07-03 15:02 ` Shailabh Nagar
2006-07-03 15:55 ` Paul Jackson
2006-07-03 16:31 ` Paul Jackson
2006-07-04 0:09 ` Shailabh Nagar
2006-07-04 19:59 ` Paul Jackson
2006-07-05 17:20 ` Jay Lan
2006-07-05 18:18 ` Shailabh Nagar
2006-06-30 22:56 ` Andrew Morton
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=44AA86BF.3090600@watson.ibm.com \
--to=nagar@watson.ibm.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@osdl.org \
--cc=balbir@in.ibm.com \
--cc=csturtiv@sgi.com \
--cc=hadi@cyberus.ca \
--cc=jlan@engr.sgi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pj@sgi.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).