Date: Thu, 10 Feb 2005 10:55:04 +0200 From: Andriy Tkachuk <ant@emict.com> To: freebsd-hackers@freebsd.org Subject: pthreads & dynamic memory in fbsd vs. the same in linux Message-ID: <200502101055.04949.ant@emict.com>
next in thread | raw e-mail | index | archive | help
--Boundary-00=_oFyCC2umUu8FZHl Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi folks. I noticed the strange stick of pthreads (amount ~ 500) when allocating dynamic memory by malloc or new in my system: > uname -a FreeBSD ant.emict.com 5.3-STABLE FreeBSD 5.3-STABLE #0: Wed Feb 9 17:30:11 EET 2005 ant@ant:/lin/fbsd_obj/usr/src/sys/ANT i386 It's interesting that the same program behaves differently when it is compiled in linux and run on my fbsd machine in linux_base-7.1_7 . > ldd test2-linux test2-linux: libpthread.so.0 => /lib/libpthread.so.0 (0x28065000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x2807c000) libm.so.6 => /lib/libm.so.6 (0x280bf000) libc.so.6 => /lib/libc.so.6 (0x280e1000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x2804c000) > ldd a.out a.out: libpthread.so.1 => /usr/lib/libpthread.so.1 (0x28075000) libstdc++.so.4 => /usr/lib/libstdc++.so.4 (0x28099000) libm.so.3 => /lib/libm.so.3 (0x2816b000) libc.so.5 => /lib/libc.so.5 (0x28184000) Each thread allocates the amount of memory by 10 bytes in loop. The number of iterations is specified in cmdline arg. The program prints the time each thread is spent allocating memory in loop. Let's look on results. > ./a.out n 1000 # 1000 iterations of new operator. Every new allocates 10bytes. thread 0 created thread 1 created thread 2 created thread 3 created thread 4 created ... thread 497 created thread 498 created thread 499 created 0.001114 0.001022 0.001021 0.001011 0.001014 0.001010 0.001013 0.001050 0.001035 0.001011 0.001013 0.001010 0.001013 0.001010 0.001029 0.001075 0.001053 0.001011 0.001014 0.001011 0.001030 0.001010 0.001015 0.001042 0.001019 0.001011 0.001014 0.001012 0.001013 0.001010 0.001014 0.361604 3.225090 3.225458 3.225696 3.225925 3.226152 3.226380 3.226608 3.226833 3.227062 3.227290 3.227517 3.227744 3.227972 3.228202 3.228451 3.228681 3.228912 3.229140 3.229367 The same, but in linux_base-7.1_7 : > ./test2-linux n 1000 thread 0 created thread 1 created ... thread 498 created thread 499 created 0.000467 0.000403 0.000402 ... 0.000391 0.000391 0.000395 ... 0.000395 0.010564 0.000398 0.000394 The program source is attached. In linux program is compiled by $ gcc -v Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98) in fbsd: > gcc -v Using built-in specs. Configured with: FreeBSD/i386 system compiler Thread model: posix gcc version 3.4.2 [FreeBSD] 20040728 --Boundary-00=_oFyCC2umUu8FZHl--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200502101055.04949.ant>