From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andy Wingo Newsgroups: gmane.lisp.guile.devel Subject: Further profiling, including howto Date: Thu, 14 Jun 2007 20:21:01 +0200 Message-ID: <1181845261.4156.1.camel@localhost.localdomain> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-z4bW4CqywT2FSL1ii25h" X-Trace: sea.gmane.org 1181845368 32200 80.91.229.12 (14 Jun 2007 18:22:48 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 14 Jun 2007 18:22:48 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Thu Jun 14 20:22:44 2007 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Hytxu-0000jp-Gi for guile-devel@m.gmane.org; Thu, 14 Jun 2007 20:22:40 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Hytxt-0005bN-4b for guile-devel@m.gmane.org; Thu, 14 Jun 2007 14:22:37 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HytxY-0005TC-Sh for guile-devel@gnu.org; Thu, 14 Jun 2007 14:22:16 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HytxY-0005Sq-5b for guile-devel@gnu.org; Thu, 14 Jun 2007 14:22:16 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HytxX-0005Si-PH for guile-devel@gnu.org; Thu, 14 Jun 2007 14:22:15 -0400 Original-Received: from ambient.dashsystems.com ([216.27.85.7] helo=kettle.ambient-hosting.net) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HytxW-0006Fy-Ei for guile-devel@gnu.org; Thu, 14 Jun 2007 14:22:15 -0400 Original-Received: from localhost.localdomain (ambient-hosting.net [10.1.6.1]) by kettle.ambient-hosting.net (Postfix) with ESMTP id F1A648808E for ; Thu, 14 Jun 2007 14:21:02 -0400 (EDT) Original-Received: by localhost.localdomain (Postfix, from userid 1000) id B4844119530; Thu, 14 Jun 2007 20:21:01 +0200 (CEST) X-Mailer: Evolution 2.10.1 X-detected-kernel: Linux 2.4-2.6 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:6639 Archived-At: --=-z4bW4CqywT2FSL1ii25h Content-Type: text/plain Content-Transfer-Encoding: 7bit Hey all, I've finally gotten back to profiling Guile. I'd like to write about things that I have found. First, however, I will describe the process I am using. The subject of investigation ---------------------------- My machine is a Powerbook 1.5 Ghz G4 PPC with 512 MB RAM. Not particularly beefy. I am interested in measuring Guile 1.8 from CVS; I compile with GCC 4.1.2, with CFLAGS='-g -O2'. CFLAGS are very important for Guile, as without -O, scm_is_pair is not inlined. How I benchmark --------------- Before beginning, we need to make benchmarks about what the current status is. To give context for the benchmarks, I will also measure Guile 1.6.8 from Debian, and also Python 2.5.1c1 and SCM 5e3 where applicable. The benchmarks will be made of real time, on an otherwise unloaded system running X, since this is the figure that we actually wish to improve. Timing measurements will be made with `time' from bash; I export TIMEFORMAT=%R to just print out the real time. For example, to measure Guile's initialization time, I run: for i in `seq 10`; do time guile -c 1; done I stopped powernowd for the duration of the tests so that the CPU is running at full speed. I actually record the observations only when the numbers "settle", i.e. with warm caches. I then put the observations into a file like the one attached, which is actually a script that will update a graph. I have attached a graph as well. As you can see, Guile 1.8 is significantly slower than anything out there. How I profile ------------- I use valgrind's "callgrind" tool, available from valgrind SVN. This tool simulates execution of the program, recording all instruction fetches as costs. These instruction fetches correspond in a rough way to time; however you can't trust them completely, re-benchmarking is always the way to prove that changes have had effect. I run a test like this: valgrind --tool=callgrind --num-callers=100 \ --base=guile-1.8-tls-callgrind --separate-recs=1 \ /opt/guile/bin/guile -c 1 This will dump a log into the file guile-1.8-tls-callgrind.PID, in "callgrind format". I use the callgrind-output-gprof script to analyze this file, which can be found at http://wingolog.org/pub/callgrind-output-gprof. (The script itself may be verified against callgrind_annotate, or kcachegrind.) Analysis -------- Profiling initialization (guile -c 1) of current 1.8 CVS with Ludovic's TLS patch gives the following results, ordered by self percent: cumulative self total percent percent calls file:function 15.19 12.99 1577 gc-card.c:scm_i_sweep_card[/opt/guile/lib/libguile.so.17.0.1] 10.27 8.52 144923 ports.c:scm_getc[/opt/guile/lib/libguile.so.17.0.1] 7.95 7.95 111779 ???:pthread_mutex_lock[/lib/libpthread-2.5.so] 6.79 6.79 129005 ???:__tls_get_addr[/lib/ld-2.5.so] 5.22 5.22 111778 ???:__pthread_mutex_unlock_usercnt[/lib/libpthread-2.5.so] 62.35 3.65 57086 strings.c:scm_c_string_set_x[/opt/guile/lib/libguile.so.17.0.1] 36.91 3.61 57086 strings.c:scm_i_string_writable_chars[/opt/guile/lib/libguile.so.17.0.1] 21.77 3.60 128584 gc-mark.c:scm_gc_mark[/opt/guile/lib/libguile.so.17.0.1] 18.07 3.08 27606 gc-mark.c:scm_gc_mark_dependencies[/opt/guile/lib/libguile.so.17.0.1] 365.99 2.52 42509 eval.c:ceval[/opt/guile/lib/libguile.so.17.0.1] [...] Cumulative percent measures the total time[1] spent in a function or its callees. It can be misleading; for example, scm_gc_mark calls itself, which adds to its cumulative time figure without actually meaning anything. The most "real" numbers are the self percent numbers, but if you can convince yourself that a function does not recurse, the cumulative percent numbers can be convincing. For example, in this case, we see that 62.35% of the time in initialization is spent in scm_c_string_set_x. At this point we have two questions: (1) can this be possible?, and (2) what calls this function? To answer (1), it seems that yes, scm_c_string_set_x has the potential to be really, really slow: 1. First scm_c_string_set_x calls scm_i_string_writable_chars. 1.1. scm_i_string_writable_chars locks a global mutex. 1.2. In the case in which the string is shared (STRINGBUF_SHARED ()), the lock is released, the buffer copied, all threads are put to sleep (!), and the lock retaken. 2. Next scm_c_string_set_x sets the char, i.e. buf[i] = c. 3. scm_i_string_stop_writing is called, which unlocks the mutex. It seems that if we look at the top elements on the profile, it is plausible that all of them are caused by string-set!: the time in GC because we are allocating a new buffer in many of the cases that we do string-set!, and the mutexen being the string write mutex. At this point, to improve performance, we have two choices: (1) make string-set! cheaper, or (2) avoid string-set!. I do not know how to do (1) in the presence of threads[2]. (2) seems feasible, if we look at what functions are actually calling scm_c_string_set_x. The ones that show up in the profile are all in read.c: ./read.c:628: scm_c_string_set_x (*tok_buf, j, SCM_MAKE_CHAR (c)); ./read.c:703: scm_c_string_set_x (*tok_buf, j, SCM_MAKE_CHAR (c)); ./read.c:766: scm_c_string_set_x (*tok_buf, j, SCM_MAKE_CHAR (c)); All of these calls use the token buffer API, in which a SCM string is allocated and grown as necessary. The readers fill the buffer with string-set!. Probably the easiest way to make this faster is to make the token buffer be a special kind of SMOB with that holds a scm_malloc'd data area, which is assumed to be accessed only from one thread, as is the case in read(). At the end, the data can be stolen from the token buffer into a string via scm_i_take_stringbufn. [1] Really, the total percent of instruction fetches. Since this corresponds more or less to time, I say time. [2] I am told that mutable strings are not even part of the r6rs proposal. Conclusions ----------- I have done the analysis and am hoping to convince Ludovic to make a patch :-) If we get Guile 1.8 load time down to Python load time, I will be happy. At that point I can go back to optimizing guile-gnome's load time, which currently runs at about 2 seconds. Cheers, Andy. -- http://wingolog.org/ --=-z4bW4CqywT2FSL1ii25h Content-Disposition: attachment; filename=guile-benchmarking.scm Content-Transfer-Encoding: base64 Content-Type: text/x-scheme; name=guile-benchmarking.scm; charset=UTF-8 KHVzZS1tb2R1bGVzIChjaGFydGluZykpDQoNCihkZWZpbmUgKG9ic2VydmF0aW9ucy0+ZGF0YSBv YnNlcnZhdGlvbnMpDQogIChkZWZpbmUgKG1lYW4gbCkNCiAgICAoLyAoYXBwbHkgKyBsKSAobGVu Z3RoIGwpKSkNCiAgKGRlZmluZSAoc3RkZGV2IGwpDQogICAgKGxldCAoKHhiYXIgKG1lYW4gbCkp KQ0KICAgICAgKHNxcnQgKG1lYW4gKG1hcCAobGFtYmRhICh4KSAoZXhwdCAoLSB4IHhiYXIpIDIp KSBsKSkpKSkNCiAgKG1hcA0KICAgKGxhbWJkYSAoZ3JvdXApDQogICAgIChjb25zDQogICAgICAo Y2FyIGdyb3VwKQ0KICAgICAgKG1hcA0KICAgICAgIChsYW1iZGEgKG9ic2VydmF0aW9uKQ0KICAg ICAgICAgKGxldCAoKHRiYXIgKG1lYW4gKGNkZHIgb2JzZXJ2YXRpb24pKSkpDQogICAgICAgICAg IGAoLHRiYXIgLChjYXIgb2JzZXJ2YXRpb24pDQogICAgICAgICAgICAgICAgICAgKCM6eS1icmFj a2V0ICwoc3RkZGV2IChjZGRyIG9ic2VydmF0aW9uKSkpKSkpDQogICAgICAgKGNkciBncm91cCkp KSkNCiAgIG9ic2VydmF0aW9ucykpDQoNCjs7IEhpbnQ6IGV4cG9ydCBUSU1FRk9STUFUPSclM1In DQooZGVmaW5lICpvYnNlcnZhdGlvbnMqDQogICcoKCJJbml0aWFsaXphdGlvbiINCiAgICAgKCJQ eXRob24gMi41LjFjMSINCiAgICAgICJmb3IgaSBpbiBgc2VxIDEwYDsgZG8gdGltZSBweXRob24g LWMgMTsgZG9uZSINCiAgICAgIDAuMDc1DQogICAgICAwLjA3Mw0KICAgICAgMC4wNzMNCiAgICAg IDAuMDczDQogICAgICAwLjA3Mg0KICAgICAgMC4wNzQNCiAgICAgIDAuMDcxDQogICAgICAwLjA4 MQ0KICAgICAgMC4wNzINCiAgICAgIDAuMDczKQ0KICAgICAoIlNDTSA1ZTMiDQogICAgICAjZg0K ICAgICAgMC4wOTkNCiAgICAgIDAuMDk5DQogICAgICAwLjA5OA0KICAgICAgMC4xMDANCiAgICAg IDAuMDk3DQogICAgICAwLjEwMQ0KICAgICAgMC4wOTYNCiAgICAgIDAuMDk2DQogICAgICAwLjA5 OA0KICAgICAgMC4xMDYpDQogICAgICgiR3VpbGUgMS42LjgiDQogICAgICAiZm9yIGkgaW4gYHNl cSAxMGA7IGRvIHRpbWUgZ3VpbGUgLWMgMTsgZG9uZSINCiAgICAgIDAuMDgyDQogICAgICAwLjA4 Mg0KICAgICAgMC4wODINCiAgICAgIDAuMDgxDQogICAgICAwLjA4MQ0KICAgICAgMC4wODgNCiAg ICAgIDAuMDgwDQogICAgICAwLjA4Mg0KICAgICAgMC4wODENCiAgICAgIDAuMDgzKQ0KICAgICAo Ikd1aWxlIDEuOCBDVlMiDQogICAgICA7OyB3aXRoIEx1ZG92aWMncyBtb2R1bGUgbG9va3VwIHBh dGNoLCBDRkxBR1M9LWcgLU8yDQogICAgICAiZm9yIGkgaW4gYHNlcSAxMGA7IGRvIHRpbWUgZ3Vp bGUgLWMgMTsgZG9uZSINCiAgICAgIDAuMTQzDQogICAgICAwLjE0MQ0KICAgICAgMC4xMzkNCiAg ICAgIDAuMTM5DQogICAgICAwLjEzOA0KICAgICAgMC4xNDANCiAgICAgIDAuMTQ4DQogICAgICAw LjE0Nw0KICAgICAgMC4xNDkNCiAgICAgIDAuMTYwKQ0KICAgICAoIkd1aWxlIDEuOCBDVlMgd2l0 aCBUTFMiDQogICAgICAiZm9yIGkgaW4gYHNlcSAxMGA7IGRvIHRpbWUgZ3VpbGUgLWMgMTsgZG9u ZSINCiAgICAgIDAuMTMxDQogICAgICAwLjEyNg0KICAgICAgMC4xMjYNCiAgICAgIDAuMTI0DQog ICAgICAwLjEyMw0KICAgICAgMC4xMjMNCiAgICAgIDAuMTM3DQogICAgICAwLjEyMw0KICAgICAg MC4xMjQNCiAgICAgIDAuMTIxKQ0KICAgICApDQogICAgKCIodXNlLW1vZHVsZXMgKG9vcCBnb29w cykpIg0KICAgICAoIkd1aWxlIDEuNi44Ig0KICAgICAgImZvciBpIGluIGBzZXEgMTBgOyBkbyB0 aW1lIGd1aWxlIC1jICcodXNlLW1vZHVsZXMgKG9vcCBnb29wcykpJzsgZG9uZSINCiAgICAgIDAu MTM3DQogICAgICAwLjEzNg0KICAgICAgMC4xMzANCiAgICAgIDAuMTMzDQogICAgICAwLjEzMQ0K ICAgICAgMC4xMzENCiAgICAgIDAuMTQyDQogICAgICAwLjE1MQ0KICAgICAgMC4xMzUNCiAgICAg IDAuMTMxDQogICAgICApDQogICAgICgiR3VpbGUgMS44IENWUyINCiAgICAgICJmb3IgaSBpbiBg c2VxIDEwYDsgZG8gdGltZSBndWlsZSAtYyAnKHVzZS1tb2R1bGVzIChvb3AgZ29vcHMpKSc7IGRv bmUiDQogICAgICAwLjI2MA0KICAgICAgMC4yNjMNCiAgICAgIDAuMjU2DQogICAgICAwLjI1Mg0K ICAgICAgMC4yNzQNCiAgICAgIDAuMjg5DQogICAgICAwLjI3NA0KICAgICAgMC4yODANCiAgICAg IDAuMzI0DQogICAgICAwLjI5NCkNCg0KICAgICAoIkd1aWxlIDEuOCBDVlMgd2l0aCBUTFMiDQog ICAgICAiZm9yIGkgaW4gYHNlcSAxMGA7IGRvIHRpbWUgZ3VpbGUgLWMgJyh1c2UtbW9kdWxlcyAo b29wIGdvb3BzKSknOyBkb25lIg0KICAgICAgMC4yNDQNCiAgICAgIDAuMjQyDQogICAgICAwLjI2 MQ0KICAgICAgMC4yNDUNCiAgICAgIDAuMjQ0DQogICAgICAwLjI0Mw0KICAgICAgMC4yNzUNCiAg ICAgIDAuMjcyDQogICAgICAwLjI2OQ0KICAgICAgMC4yNzUpKSkpDQoNCihtYWtlLWJhci1jaGFy dCAiR3VpbGUgQmVuY2htYXJrcyIgKG9ic2VydmF0aW9ucy0+ZGF0YSAqb2JzZXJ2YXRpb25zKikN CiAgICAgICAgICAgICAgICA6d3JpdGUtdG8tcG5nICIvdG1wL2d1aWxlLWJlbmNobWFya3MucG5n Ig0KICAgICAgICAgICAgICAgIDpiYXItd2lkdGggNDAgOmdyb3VwLXNwYWNpbmcgNDAgOmNoYXJ0 LWhlaWdodCAyNDANCiAgICAgICAgICAgICAgICA6YmFyLXZhbHVlLWZvcm1hdCAifmYiDQogICAg ICAgICAgICAgICAgOmNoYXJ0LXBhcmFtcyAnKDp5LWF4aXMtbGFiZWwgIldhbGwtY2xvY2sgZXhl Y3V0aW9uIHRpbWUgKHMpIikpDQo= --=-z4bW4CqywT2FSL1ii25h Content-Disposition: attachment; filename=guile-benchmarks.png Content-Type: image/png; name=guile-benchmarks.png Content-Transfer-Encoding: base64 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 JWYAAAAASUVORK5CYII= --=-z4bW4CqywT2FSL1ii25h Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel --=-z4bW4CqywT2FSL1ii25h--