From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 In-Reply-To: <20090220193401.KHHY16134.fed1rmmtao104.cox.net@fed1rmimpo03.cox.net> References: <20090220193401.KHHY16134.fed1rmmtao104.cox.net@fed1rmimpo03.cox.net> Date: Fri, 20 Feb 2009 12:36:14 -0800 Message-ID: From: Micah Stetson To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary=000e0cd308f2a37cb504635f9a61 Subject: Re: [9fans] impact of dynamic libraries on the speed of fork() Topicbox-Message-UUID: a4e6ff38-ead4-11e9-9d60-3106f5b1d025 --000e0cd308f2a37cb504635f9a61 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > I wrote a really simple program, forktest.c. Chris beat me to the punch, but I'm posting anyway because I went a different direction. I wrote some rc scripts that make static and dynamic libraries of various sizes and programs that use those libraries (trivially). For each number of functions 1, 10, 100, 1000, 10000, 100000 I timed static and dynamic execution of a program that conditionally calls that many functions in 1 or 10 libraries. The scripts are attached, run mklibs, then mkprogs, then runtests. Below are the results of a single run on my laptop (fixed with font looks better). I can't spend any more time on this, but it was a fun morning goof-off. Static (functions libraries binary-size user system elapsed) 1 1 556898 0.24 0.50 0.78 10 1 557324 0.28 0.44 0.82 10 10 557913 0.32 0.42 0.81 100 1 561737 0.24 0.50 0.84 100 10 562196 0.28 0.46 0.79 1000 1 609496 0.29 0.47 0.83 1000 10 606381 0.26 0.48 0.84 10000 1 1105475 0.30 0.44 0.87 10000 10 1083834 0.28 0.47 0.82 100000 1 6245494 0.27 0.48 0.88 100000 10 6043871 0.28 0.48 0.81 Dynamic (functions libraries binary-size user system elapsed) 1 1 6489 0.49 0.86 1.39 10 1 7322 0.52 0.86 1.45 10 10 7464 0.83 1.14 2.03 100 1 16366 0.59 0.78 1.42 100 10 16177 1.14 1.11 2.35 1000 1 108268 0.55 0.87 1.47 1000 10 104496 0.88 1.12 2.07 10000 1 1077758 0.81 0.98 1.89 10000 10 1037387 1.12 1.36 2.63 100000 1 10915272 2.79 2.50 6.31 100000 10 10517862 3.13 3.68 7.13 I think dynamic 100-10 is a fluke, I also think it's interesting that the dynamic binaries are bigger above 10000 function calls. Don't know why, don't have time to figure it out. Micah --000e0cd308f2a37cb504635f9a61 Content-Type: application/octet-stream; name=mklibs Content-Disposition: attachment; filename=mklibs Content-Transfer-Encoding: base64 X-Attachment-Id: f_frfbmq640 IyEvdXNyL2xvY2FsL3BsYW45L2Jpbi9yYwoKbGV0dGVycz0oYSBiIGMgZCBlIGYgZyBoIGkgaikK c2l6ZXM9KDEgMTAgMTAwIDEwMDAgMTAwMDAgMTAwMDAwKQoKZm9yKGwgaW4gJGxldHRlcnMpewoJ Zm9yKG4gaW4gJHNpemVzKXsKCQlzZXEgJG4gfCBzZWQgJ3MvLiovaW50ICdeJGwkbl4nXyYoaW50 KTsvJyA+dGVzdHMvbGliJGwkbl4uaAoJCXNlcSAkbiB8IHNlZCAncy8uKi9pbnQgJ14kbCRuXidf JihpbnQgaSkgeyByZXR1cm4gaSsmOyB9LycgPiB0ZXN0cy9saWIkbCRuXi5jCgkJZ2NjIC1jIC1v IGxpYiRsJG5eLm8gbGliJGwkbl4uYwoJCWFyIHJjcyBsaWIkbCRuXi5hIGxpYiRsJG5eLm8KCQls ZCAtc2hhcmVkIC1vIGxpYiRsJG5eLnNvIGxpYiRsJG5eLm8KCX0KfQoK --000e0cd308f2a37cb504635f9a61 Content-Type: application/octet-stream; name=mkprog Content-Disposition: attachment; filename=mkprog Content-Transfer-Encoding: base64 X-Attachment-Id: f_frfbn8mb1 IyEvdXNyL2xvY2FsL3BsYW45L2Jpbi9yYwoKZm9yKGxpYikKCWVjaG8gJyNpbmNsdWRlICJsaWIn XiRsaWJeJy5oIicKCmNhdCA8PEVPRgoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3YpCnsK CWludCBpID0gMDsKCWlmKGFyZ2MgPT0gMSkKCQlyZXR1cm4gMDsKRU9GCgpmb3IobGliKXsKCW4g PSBge2VjaG8gJGxpYiB8IDkgc2VkICdzL1thLXpdKyhbMC05XSspL1wxLyd9CglzZXEgJG4gfCBz ZWQgJ3MvLiovCWkgKz0gJ14kbGliXidfJihpKTsvJwp9CgpjYXQgPDxFT0YKCglyZXR1cm4gaTsK fQpFT0YK --000e0cd308f2a37cb504635f9a61 Content-Type: application/octet-stream; name=mkprogs Content-Disposition: attachment; filename=mkprogs Content-Transfer-Encoding: base64 X-Attachment-Id: f_frfbnsv32 IyEvdXNyL2xvY2FsL3BsYW45L2Jpbi9yYwoKZm4gYnVpbGQgewoJbmFtZT0kMTsgc2hpZnQKCS4v bWtwcm9nICQqID4gdGVzdCRuYW1lXi5jCglnY2MgLWMgLW8gdGVzdCRuYW1lXi5vIHRlc3QkbmFt ZV4uYwoJZ2NjIC1zdGF0aWMgLW8gdGVzdCRuYW1lXi1zIHRlc3QkbmFtZV4ubyAtTC4gLWxeJCoK CWdjYyAtbyB0ZXN0JG5hbWVeLWQgdGVzdCRuYW1lXi5vIC1MLiAtbF4kKgp9CgpidWlsZCAxLTEg YTEKYnVpbGQgMTAtMSBhMTAKYnVpbGQgMTAtMTAgYTEgYjEgYzEgZDEgZTEgZjEgZzEgaDEgaTEg ajEKYnVpbGQgMTAwLTEgYTEwMApidWlsZCAxMDAtMTAgYTEwIGIxMCBjMTAgZDEwIGUxMCBmMTAg ZzEwIGgxMCBpMTAgajEwCmJ1aWxkIDEwMDAtMSBhMTAwMApidWlsZCAxMDAwLTEwIGExMDAgYjEw MCBjMTAwIGQxMDAgZTEwMCBmMTAwIGcxMDAgaDEwMCBpMTAwIGoxMDAKYnVpbGQgMTAwMDAtMSBh MTAwMDAKYnVpbGQgMTAwMDAtMTAgYTEwMDAgYjEwMDAgYzEwMDAgZDEwMDAgZTEwMDAgZjEwMDAg ZzEwMDAgaDEwMDAgaTEwMDAgajEwMDAKYnVpbGQgMTAwMDAwLTEgYTEwMDAwMApidWlsZCAxMDAw MDAtMTAgYTEwMDAwIGIxMDAwMCBjMTAwMDAgZDEwMDAwIGUxMDAwMCBmMTAwMDAgZzEwMDAwIGgx MDAwMCBpMTAwMDAgajEwMDAwCg== --000e0cd308f2a37cb504635f9a61 Content-Type: application/octet-stream; name=runtests Content-Disposition: attachment; filename=runtests Content-Transfer-Encoding: base64 X-Attachment-Id: f_frfbnz7f3 IyEvdXNyL2xvY2FsL3BsYW45L2Jpbi9yYwoKTERfTElCUkFSWV9QQVRIPWB7cHdkfQoKZm4gdCB7 CgllY2hvIFRlc3RpbmcgJDFeLXMuLi4KCXRpbWUgcmMgLWMgJ3NlcSAxMDAwIHwgc2VkICcncy8u Ki8uXC8nXiQxXictcy8nJyB8IHJjJwoJZWNobyBUZXN0aW5nICQxXi1kLi4uCgl0aW1lIHJjIC1j ICdzZXEgMTAwMCB8IHNlZCAnJ3MvLiovLlwvJ14kMV4nLWQvJycgfCByYycKfQoKdCB0ZXN0MS0x CnQgdGVzdDEwLTEKdCB0ZXN0MTAtMTAKdCB0ZXN0MTAwLTEKdCB0ZXN0MTAwLTEwCnQgdGVzdDEw MDAtMQp0IHRlc3QxMDAwLTEwCnQgdGVzdDEwMDAwLTEKdCB0ZXN0MTAwMDAtMTAKdCB0ZXN0MTAw MDAwLTEKdCB0ZXN0MTAwMDAwLTEwCg== --000e0cd308f2a37cb504635f9a61--