Re: optimizing NOP emissions (Re: [Nautilus-list] nautilus & signals)
- From: Michael Meeks <michael ximian com>
- To: Tim Janik <timj gtk org>
- Cc: Gtk+ Developers <gtk-devel-list gnome org>, Alex Larsson <alexl redhat com>, Darin Adler <darin bentspoon com>, nautilus <nautilus-list eazel com>
- Subject: Re: optimizing NOP emissions (Re: [Nautilus-list] nautilus & signals)
- Date: 12 Apr 2002 12:20:50 +0100
Hi Tim,
On Thu, 2002-04-11 at 23:45, Tim Janik wrote:
> first, locks/unlocks don't need to be slow per-se, a pthread lock/unlock
> pair takes 40 nano seconds on my machine (550Mhz dual processor system).
Interesting - the thing is I'm looking at many tens of thousands of
g_signal_emits, and we do multiple lock/unlocks per signal emissions,
such that the top 3 things on the profile are (were) pthread_lock,
g_signal_emitv, pthread_unlock (AFAIR).
> though what gthread adds on top of that is another matter, _locking_
> is definitely not a problem for gsignal.c (for gtype.c it was, and we
> fixed that).
So I'm not so convinced about that ;-)
> you got a point in NOP emissions though. the problem here is that it's
> 1) fairly hard to correctly figure that an emission is not neccessary
> 2) expensive too some extend, i.e. extra overhead is added to all
> emissions which cannot be skipped.
Yes - that's hard.
> so for (2), what we need is somewhat representative profiling data, if it
> showes that either:
> - during normal program operations, there're much more signal emissions which
> could be skipped than emissions which can not, or
> - the overhead to figure whether an emission could be skipped is negligable
> compared to emitting a signal,
> optimizing NOP emissions is actually worth incorporating into the standard
> gobject distro.
Ok; so here is my data - re-harvested just now ...
export GOBJECT_DEBUG=signals
nautilus 2>/tmp/nau.log
cat /tmp/nau.log | sed 's/[^ ]* //' | sed 's/(.*//' | sort | uniq -c |
sort -n > /tmp/nau2.log
228 GtkWindow::notify
244 FMIconContainer::get-stored-icon-position
244 FMIconContainer::icon-added
244 FMIconView::add-file
276 GtkImageMenuItem::add
277 GtkImageMenuItem::show
278 GtkImageMenuItem::accel-closures-changed
304 GtkAccelGroup::accel-changed
313 GtkImageMenuItem::hierarchy-changed
313 GtkImageMenuItem::parent-set
340 GtkLabel::child-notify
345 GtkAccelLabel::show
348 GtkImageMenuItem::grab-notify
402 GtkAccelLabel::grab-notify
425 GtkMenuItem::notify
436 NautilusIconCanvasItem::destroy
467 GtkAccelLabel::parent-set
469 GtkAccelLabel::hierarchy-changed
498 NautilusVFSFile::destroy
732 GtkImage::notify
742 GtkLabel::notify
918 GtkImageMenuItem::notify
1787 NautilusIconCanvasItem::notify
2544 GtkAccelLabel::notify
This is of browsing a few folders in nautilus; so we have a fair number
of notifies going on - I assume all of which are NOOPs, but now I look
at it it looks like the signal problem is substantially slain, and the
GtkLabel patch I sent will fix a chunk of the above, so perhaps this is
a non-issue.
Indeed, re-profiling shows that the signal / locking code is no longer
near the top of the profile for directory traversal; instead:
170 samples
Max Percent: 7%
draw_with_pixmaps : 7.6% ( 13 )
__pthread_mutex_unlock : 6.5% ( 11 )
free_check : 5.3% ( 9 )
Bonobo_ActivationProperty_copy : 2.9% ( 5 )
g_object_ref : 2.4% ( 4 )
byte_re_search_2 : 2.4% ( 4 )
malloc_check : 2.4% ( 4 )
g_hash_table_lookup : 1.8% ( 3 )
gtk_default_render_icon : 1.8% ( 3 )
g_param_spec_pool_lookup : 1.8% ( 3 )
g_object_last_unref : 1.2% ( 2 )
gnome_vfs_mime_try_one_magic_pattern : 1.2% ( 2 )
g_signal_emit_valist : 1.2% ( 2 )
signal_emit_unlocked_R : 1.2% ( 2 )
__libc_realloc : 1.2% ( 2 )
__libc_free : 1.2% ( 2 )
__pthread_mutex_lock : 1.2% ( 2 )
So I think it's not such a problem now.
Regards,
Michael.
--
mmeeks gnu org <><, Pseudo Engineer, itinerant idiot
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]