time make -j 20 buildworld build FreeBSD-current using 4.0 kernel
4745.607u 1673.646s 1:29:07.45 120.0% 1323+1599k 8237+251565io 1615pf+0w
time make -j 20 buildworld build FreeBSD-current using 5.0 kernel
4696.987u 1502.278s 1:10:34.17 146.4% 1359+1641k 10889+4270io 1779pf+0w
Difference: 19 minutes, or a 21% improvement. Bob Bishop got 7% with an
earlier patch (hopefully his system is no longer locking up and he can
repeat his test with the current stuff).
It would be interesting to see what other people get. I suspect my numbers
may not be entirely accurate (I'll have to run the build a couple of times).
Of course, this includes whatever other changes have gone into 5.x that
haven't gone into 4.x, but I'm pretty sure the SMP patches are the major
benefit to the timings.
I also did some syscall timing tests between 4.0 and 5.0. Using getpid(),
which is *NOT* MP-safe in 5.0 (getuid() is but for obviously reasons would
not be a fair test).
Under FreeBSD-4:
test4:/test3/smp# ./smptime 1
3343 nsec/call
1666 nsec/call
1647 nsec/call
1646 nsec/call
1646 nsec/call
1647 nsec/call
1657 nsec/call
1646 nsec/call
1647 nsec/call
1646 nsec/call
^C
test4:/test3/smp# ./smptime 2
6922 nsec/call
5122 nsec/call
5162 nsec/call
5101 nsec/call
Under FreeBSD-5:
test3:/test/smp# ./smptime 1
2727 nsec/call
1360 nsec/call
1359 nsec/call
1359 nsec/call
1359 nsec/call
1359 nsec/call
^C
test3:/test/smp# ./smptime 2
3620 nsec/call
2252 nsec/call
2253 nsec/call
2251 nsec/call
2251 nsec/call
^C
Now, I consider that significant. Even though getpid() is NOT MP safe
under FreeBSD-5, the SMP patch has improved its syscall overhead in a
competing-cpu's case (two forks running concurrently) by an immense
degree over FreeBSD-4. 5.1uS in FreeBSD-4 went down to 2.2uS in
FreeBSD-5.
That's a big deal, folks! It's quite a bit more then I thought we would
get.
For the single-process (1-fork) case, syscall overhead improved
moderately from 1.6 uS in 4.0 to 1.3 uS in 5.0. I think the marked
improvement in the competing-cpu's case is due to the movement of the
MP lock inward somewhat (even for syscalls that aren't MP safe),
the removal of a considerable number of unnecessary 'lock'ed instructions,
and the removal of the cpl lock (which benefits spl*() code as well as
syscall/interrupt code).
I got similar results for calling sigprocmask():
Under FreeBSD-4:
test4:/test3/smp# ./smptime 1
5455 nsec/call
2742 nsec/call
2741 nsec/call
2741 nsec/call
2741 nsec/call
2741 nsec/call
2741 nsec/call
2741 nsec/call
2741 nsec/call
2740 nsec/call
2740 nsec/call
2741 nsec/call
^C
test4:/test3/smp# ./smptime 2
10011 nsec/call
7291 nsec/call
7289 nsec/call
7289 nsec/call
7289 nsec/call
7294 nsec/call
^C
Under FreeBSD-5:
test3:/test/smp# ./smptime 1
4083 nsec/call
2044 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
2041 nsec/call
^C
test3:/test/smp# ./smptime 2
6514 nsec/call
4459 nsec/call
4466 nsec/call
4474 nsec/call
4484 nsec/call
4476 nsec/call
4475 nsec/call
^C
2.7 uS -> 2.0 uS non-competing
7.3 uS -> 4.5 uS competing
Very significant.
-Matt
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message