From mboxrd@z Thu Jan 1 00:00:00 1970 From: dgoulet@efficios.com (David Goulet) Date: Sat, 16 Nov 2013 08:42:15 -0500 Subject: [lttng-dev] =?utf-8?b?5Zue5aSN77yaIGhvdyBkb2VzIHVzdCB0cmFjZXIg?= =?utf-8?q?map_share_lttng_buffer?= In-Reply-To: References: <414012525.68357.1384535175855.JavaMail.zimbra@efficios.com> Message-ID: <20131116134215.GA7300@thessa> On 16 Nov (07:18:45), ??? wrote: > >Indeed, from a sessiond point of view, this will typically use the same FD number, but it's really associated with a different posix SHM each time. > > > Yes,what confused me the most is that sessiond sends the same FD number to UST every time,but UST receives the different FD number each time and can map it to the right per-cpu share buffer sucessfully. Yes, in per UID buffers, for every application using UST we send the FD corresponding to the already allocated buffer (being per UID). Please note that sending a FD through a Unix socket dups it so basically UST receives that, access the shared memory buffer and can then operate correctly. Cheers! David > > > Thanks > MuXiu.Cao > > > > > > From: "???" <39017736@qq.com> > To: "mathieu.desnoyers" > Sent: Friday, November 15, 2013 11:37:11 AM > Subject: how does ust tracer map share lttng buffer > > > Hi,Mathieu > > > After lttng sub-command enable-event is issued at first time, lttng-consumerd will be informed by lttng-sessiond to open and mmap share memory regions .Then lttng-sessiond get all shmfds from lttng-consumerd.But how does ust tracer map to these share memory regions? > > > AFAIK,lttng-sessiond will call do_consumer_create_channel() ,then send_channel_uid_to_ust(). What's confused me is in send_channel_uid_to_ust(),lttng-sessiond dup() one shmfd , then ust_consumer_send_stream_to_ust() to ust tracer, then close the shmfd and loop all shmfds. So all duped fds are the same fd-number (say A)and send to ust tracer through ust_consumer_send_stream_to_ust()->ustctl_send_stream_to_ust()->ustctl_send_stream()->ustcomm_send_fds_unix_sock()(unix socket is $HOME/.lttng/lttng-ust-sock-5).Why does it send the same fds to ust tracer? > At ust tracer side,it calls handle_message()->ustcomm_recv_stream_from_sessiond() and mmap every received fd to share memory region.However,every received fd is different from A.So I must miss something anywhere.How does ust tracer map share lttng buffer? > > > In lttng-sessiond, we send file descriptors for each posix SHM associated to every per-cpu buffer to the application over unix socket. So it's more or less : receive FD from consumer, send FD over unix socket to UST, close FD (we loop on this). Indeed, from a sessiond point of view, this will typically use the same FD number, but it's really associated with a different posix SHM each time. David can probably answer your question in more detail. > > > > Thanks, > > > > Mathieu > > > > > > > > PS:code is from lttng-2.3.0 . > > > Thanks > MuXiu.Cao > > > > > > > > -- > > Mathieu Desnoyers > EfficiOS Inc. > http://www.efficios.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 620 bytes Desc: Digital signature URL: