public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Karim Yaghmour <karim@opersys.com>
To: Roman Zippel <zippel@linux-m68k.org>
Cc: Andi Kleen <ak@muc.de>, Nikita Danilov <nikita@clusterfs.com>,
	linux-kernel@vger.kernel.org, Tom Zanussi <zanussi@us.ibm.com>
Subject: Re: 2.6.11-rc1-mm1
Date: Sun, 16 Jan 2005 01:00:39 -0500	[thread overview]
Message-ID: <41EA0307.6020807@opersys.com> (raw)
In-Reply-To: <Pine.LNX.4.61.0501160245180.30794@scrub.home>


Hello Roman,

Roman Zippel wrote:
> It's interesting to read more about ltt's requirements, but I still think 
> it's possible to leave this work to the relayfs layer.

Ok, I'm willing to play ball, but can you be a little bit more specific.

> Why not just move the ltt buffer management into relayfs and provide a 
> small library, which extracts the event stream again? Otherwise you have 
> to duplicate this work for every serious relayfs user anyway.

Ok, I've been meditating over what you say above for some time in order
to understand how best to follow what you are suggesting. So here's
what I've been able to come up with. Let me know if you have other
suggestions:

Drop the buffer-start/end callbacks altogether. Instead, allow user
to specify in the channel properties whether they want to have
sub-buffer delimiters. If so, relayfs would automatically prepend
and append the structures currently written by ltt:
/* Start of trace buffer information */
typedef struct _ltt_buffer_start {
	struct timeval time;	/* Time stamp of this buffer */
	u32 tsc;   		/* TSC of this buffer, if applicable */
	u32 id;			/* Unique buffer ID */
} LTT_PACKED_STRUCT ltt_buffer_start;

/* End of trace buffer information */
typedef struct _ltt_buffer_end {
	struct timeval time;	/* Time stamp of this buffer */
	u32 tsc;   		/* TSC of this buffer, if applicable */
} LTT_PACKED_STRUCT ltt_buffer_end;

This would also allow dropping the start_reserve, end_reserve, and
channel_start_reserve. The latter can be added by ltt as its first
event.

Is this what you are looking for and is there something else we should
be doing.

> Completely abstracting the buffer management would the make whole 
> interface simpler and it would be a lot easier to change without breaking 
> everything. E.g. it would be possible to use per cpu buffers and remove 
> the need for different locking mechanisms, for a good tracing mechanism 
> it's not just important that it's lockless, but also that the cpus don't 
> share cache lines in the fast path. In this regard relayfs/ltt has really 
> still too much overhead and the complex relayfs API isn't really making it 
> easy to fix this.

The per-cpu buffering issue is really specific to the client. It just
so happens that LTT creates one channel for each CPU. Not everyone
who needs to ship lots of data to user-space needs/wants one channel
per cpu. You could, for example, use a relayfs channel as a big
chunk of memory visible to both a user-space app and its kernel buddy
in order to exchange data without ever using either needing more
than one such channel for your entire subsystem.

As for lockless vs. locking there is a need for both. Not having
to get locks has obvious advantages, but if you require strict
timing you will want to use the locking scheme because its logging
time is linear (see Thomas' complaints about lockless elsewhere
in this thread, and Ingo's complaints about relayfs somewhere back
in October.)

But in trying to make things simpler, here's a reworked API:

rchan* relay_open(channel_path, mode, bufsize, nbufs);
int    relay_close(*rchan);
int    relay_reset(*rchan)
int    relay_write(*rchan, *data_ptr, count, **wrote-pos);

int    relay_info(*rchan, *channel_info)
void   relay_set_property(*rchan, property, value);
void   relay_get_property(*rchan, property, *value);

For direct writing (currently already used by ltt, for example):

char*  relay_reserve(*rchan, len, *ts, *td, *err, *interrupting)
void   relay_commit(*rchan, *from, len, reserve_code, interrupting);

These are the related macros:

#define relay_write_direct(DEST, SRC, SIZE) \
#define relay_lock_channel(RCHAN, FLAGS) \
#define relay_unlock_channel(RCHAN, FLAGS) \

As I hinted elsewhere, we would now have three modes for relayfs
channels:
- locking => relies on local_irq_save.
- lockless => relies on try_reserve/fail->retry (based on cmpxchg).
- kdebug => this is for kernel debugging.

The last one could be based on Ingo's tracing code, or any
implementation suggestions by Thomas. It wouldn't do all
the checks and provide all the capabilities of the other two
mechanisms, but would really be a hot-path logger with only
minimalistic provisions for content loss and other such things.

(note to Tom: time_delta_offset that used to be in relay_write
should be a property set using relay_set_property).

What I'm dropping for now is all the functions that allow a
subsystem to read from a channel from within the kernel. So,
for example, if you want to obtain large amounts of data from
user-space via a relayfs channel you won't be able to. Here
are the functions that would go:

rchan_reader *add_rchan_reader(channel_id, auto_consume)
int    remove_rchan_reader(rchan_reader *reader)
rchan_reader *add_map_reader(channel_id)
int    remove_map_reader(rchan_reader *reader)
int    relay_read(reader, buf, count, wait, *actual_read_offset)
void   relay_buffers_consumed(reader, buffers_consumed)
void   relay_bytes_consumed(reader, bytes_consumed, read_offset)
int    relay_bytes_avail(reader)
int    rchan_full(reader)
int    rchan_empty(reader)

We could add these at a later time when/if needed. Removing
these changes nothing for ltt.

Also, we should try to get rid of the following. They are there
for allowing dynamically-resizable buffers, but if we are to
make buffer-management opaque, then this should be done
internally (Tom: I can't remember the rationale for these. Let
me know if there's a reason why the must be kept.)

int    relay_realloc_buffer(*rchan, nbufs, async)
int    relay_replace_buffer(*rchan)

I think this is a pretty major change and simplification of the
API along the lines of what others have asked for. Let me know
what you think.

Karim
-- 
Author, Speaker, Developer, Consultant
Pushing Embedded and Real-Time Linux Systems Beyond the Limits
http://www.opersys.com || karim@opersys.com || 1-866-677-4546

  reply	other threads:[~2005-01-16  5:54 UTC|newest]

Thread overview: 142+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-14  8:23 2.6.11-rc1-mm1 Andrew Morton
2005-01-14  8:47 ` 2.6.11-rc1-mm1 Andi Kleen
2005-01-14  9:27   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-14 10:27   ` 2.6.11-rc1-mm1 Nikita Danilov
2005-01-14 10:38     ` 2.6.11-rc1-mm1 Andi Kleen
2005-01-14 11:06       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-14 15:31         ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-14 21:11           ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-14 22:58             ` 2.6.11-rc1-mm1 Tim Bird
2005-01-15  0:20               ` 2.6.11-rc1-mm1 Andi Kleen
2005-01-15  4:25               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-15  1:06             ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-15  4:18               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16  2:38                 ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-16  6:00                   ` Karim Yaghmour [this message]
2005-01-16 16:52                     ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-16 21:18                       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17  1:37                         ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-17  2:24                           ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17 12:20                             ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-17 20:32                               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17 22:31                                 ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-17 22:42                                   ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-17 23:26                                     ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-17 23:41                                   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-18  0:02                                     ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-18  3:05                                       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17 13:54                         ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-17 21:27                           ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17 23:57                             ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-18  4:03                               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-18  4:30                                 ` 2.6.11-rc1-mm1 Aaron Cohen
2005-01-18  4:46                                   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-18  8:07                                     ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-18 16:40                                       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-18 19:37                                         ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-18 15:31                                 ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-21  6:26                                   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-21 22:23                                     ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-23  7:43                                       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-23  7:52                                         ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-23  8:28                                         ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-24  0:38                                         ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-25  9:12                                           ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-18  1:13                             ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-18  2:52                               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-17 17:02                         ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-16 19:05                     ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-19 11:14                       ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-19 16:53                         ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-16 16:14             ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-16 19:47               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16 20:30               ` 2.6.11-rc1-mm1 Tom Zanussi
2005-01-19 11:11                 ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-14 15:24   ` 2.6.11-rc1-mm1 Roman Zippel
2005-01-18 11:19   ` 2.6.11-rc1-mm1 Masami Hiramatsu
2005-01-18 11:46     ` 2.6.11-rc1-mm1 Andi Kleen
2005-01-18 14:52       ` [Lkst-develop] 2.6.11-rc1-mm1 Masami Hiramatsu
2005-01-14 12:36 ` 2.6.11-rc1-mm1 Miklos Szeredi
2005-01-14 13:04 ` 2.6.11-rc1-mm1 Kasper Sandberg
2005-01-14 18:35   ` 2.6.11-rc1-mm1 Andrew Morton
2005-01-14 19:08     ` 2.6.11-rc1-mm1 Rogério Brito
2005-01-14 19:41     ` 2.6.11-rc1-mm1 Peter Buckingham
2005-01-17 17:04     ` 2.6.11-rc1-mm1 Matthias Urlichs
2005-01-14 19:02   ` 2.6.11-rc1-mm1 Bill Davidsen
2005-01-14 15:07 ` 2.6.11-rc1-mm1 Barry K. Nathan
2005-01-14 16:56   ` 2.6.11-rc1-mm1 Dave Jones
2005-01-14 17:55     ` 2.6.11-rc1-mm1 Barry K. Nathan
2005-01-19 23:06   ` 2.6.11-rc1-mm1 Marcos D. Marado Torres
2005-01-19 23:54     ` 2.6.11-rc1-mm1 Barry K. Nathan
2005-01-14 15:35 ` 2.6.11-rc1-mm1 Zwane Mwaikambo
2005-01-14 22:03   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-14 17:35 ` [patch] 2.6.11-rc1-mm1: ip_tables.c: ipt_find_target must be EXPORT_SYMBOL'ed Adrian Bunk
2005-01-14 17:43   ` Patrick McHardy
2005-01-14 22:41 ` 2.6.11-rc1-mm1 Tim Bird
2005-01-14 22:46 ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-14 23:22   ` 2.6.11-rc1-mm1 Tim Bird
2005-01-15  0:24     ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-15  1:27       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16 16:18       ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-15 13:08     ` [RFC] Instrumentation (was Re: 2.6.11-rc1-mm1) Thomas Gleixner
2005-01-16  2:09       ` Karim Yaghmour
2005-01-16  3:11         ` Roman Zippel
2005-01-16  4:23           ` Karim Yaghmour
2005-01-16 23:43             ` Thomas Gleixner
2005-01-17  1:54               ` Karim Yaghmour
2005-01-17 10:26                 ` Thomas Gleixner
2005-01-17 20:34                   ` Karim Yaghmour
2005-01-17 22:18                     ` Thomas Gleixner
2005-01-17 23:57                       ` Karim Yaghmour
2005-01-18  8:46                         ` Thomas Gleixner
2005-01-18 16:31                           ` Karim Yaghmour
2005-01-19  7:13                 ` Werner Almesberger
2005-01-19 17:38                   ` Karim Yaghmour
2005-01-14 22:48 ` 2.6.11-rc1-mm1 Andre Eisenbach
2005-01-15  8:42   ` 2.6.11-rc1-mm1 Miklos Szeredi
2005-01-15  8:45   ` 2.6.11-rc1-mm1 Miklos Szeredi
     [not found] ` <1105740276.8604.83.camel@tglx.tec.linutronix.de>
2005-01-14 23:09   ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-15  0:01     ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-15  0:26       ` 2.6.11-rc1-mm1 Andrew Morton
2005-01-15  1:00         ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-15  1:25           ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-15 10:20             ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-16  4:13               ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16 15:19                 ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-15  1:14       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-15  9:57         ` 2.6.11-rc1-mm1 Thomas Gleixner
2005-01-16 16:21     ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-16 19:49       ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16 20:11         ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-16 20:32           ` 2.6.11-rc1-mm1 Andrew Morton
2005-01-16 21:06             ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-16 21:40               ` 2.6.11-rc1-mm1 Arjan van de Ven
2005-01-17 15:48                 ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-17 16:13                   ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-17 21:38                     ` 2.6.11-rc1-mm1 Karim Yaghmour
2005-01-16 20:39           ` 2.6.11-rc1-mm1 Christoph Hellwig
2005-01-16 21:14             ` 2.6.11-rc1-mm1 Robert Wisniewski
2005-01-15  2:58 ` 2.6.11-rc1-mm1 William Lee Irwin III
2005-01-17 22:19   ` 2.6.11-rc1-mm1 William Lee Irwin III
2005-01-16  0:59 ` 2.6.11-rc1-mm1 Joseph Fannin
2005-01-16 19:09   ` 2.6.11-rc1-mm1 Daniel Drake
2005-01-16 19:20     ` 2.6.11-rc1-mm1 William Lee Irwin III
2005-01-16 21:09   ` 2.6.11-rc1-mm1 Daniel Drake
2005-01-17 23:31     ` 2.6.11-rc1-mm1 J.A. Magallon
2005-01-18  2:35       ` 2.6.11-rc1-mm1 Daniel Drake
2005-01-18  2:54   ` [PATCH] Wait and retry mounting root device (revised) Daniel Drake
2005-01-18  0:34     ` Al Viro
2005-01-18  0:02       ` Randy.Dunlap
2005-01-18  8:05         ` Andries Brouwer
2005-01-18  8:28         ` Helge Hafting
2005-01-18  8:49           ` Andrew Morton
2005-01-18 13:20             ` Helge Hafting
2005-01-20 20:55             ` [PATCH] Configurable delay before mounting root device Daniel Drake
2005-01-20 20:24               ` Andrew Morton
2005-01-21 18:15                 ` Daniel Drake
2005-01-20 22:49               ` William Park
2005-01-18  1:03       ` [PATCH] Wait and retry mounting root device (revised) William Park
2005-01-19  0:43         ` Werner Almesberger
2005-01-18  8:02     ` Andries Brouwer
2005-01-19 20:11       ` Frank van Maarseveen
  -- strict thread matches above, loose matches on Subject: below --
2005-01-17  6:49 2.6.11-rc1-mm1 Prasanna S Panchamukhi

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=41EA0307.6020807@opersys.com \
    --to=karim@opersys.com \
    --cc=ak@muc.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nikita@clusterfs.com \
    --cc=zanussi@us.ibm.com \
    --cc=zippel@linux-m68k.org \
    /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