A letter from legal has arrived for you, Alex

Greenblatt & Goober, Attorneys
September 14, 2009

Dear Baby Alexander,

We are writing on behalf of our client, your father, Jonathan Birge. This is in followup to, and clarification of, the ad hoc verbal contract entered into by you and Dr. Birge during negotiations of the bedtime taking place on the evening of September 12th, 2009. To wit:

You (heretofore LITTLE BABY) agree to make a goodfaith effort to “hush,” including, but not limited to, not saying a word. In return, your father (henceforth ‘DADDY’) has authorized us to release into your possession one (1) live mockingbird.

In the unlikely event said mockingbird should fail to sing, as determined by a third-party arbitration panel, DADDY will purchase, for you, a diamond ring of commensurate retail value.

Should the diamond ring be found of fraudulent origin, limited to composition by brass alloy, a looking glass will be provided. Herein, “looking glass” is understood to be a term of art, not to imply construction of any particular material. Specifically, molded polymer magnifying optics of any kind will be acceptable under the terms of this contract.

If the looking glass should become “broke” due to faulty materials or workmanship, excluding acts of god and/or negligence on your part, you agree to accept from DADDY one (1) billy goat as full payment in-kind.

If the billy goat fails to perform under previously agreed upon provisions terms in the  standard goat labor contract, (see “Pulling” in the attached rider), DADDY agrees to provide you with a cart and bull of equal or greater value, as determined by commodity prices published in the prior day’s Wall Street Journal.

No guarantee is provided as to the cart and/or bull’s suitability for any implied or express purpose. Only in the event that the cart and bull should, as a unit, “turn over” (as per the accepted legal definition of a rotation of no less than 90 degrees around the cart-bull axis) will the warrantee terms of this agreement be in effect, and renumeration provided in the form of a dog, to referred to as “Rover” by both parties for the duration of the contract.

In the event the dog named “Rover” is unable, or refuses, to bark audibly, both parties agree to final compensation in the form of a horse and cart, under identical liability terms to the previously mentioned cart and bull. Should the cart and horse fail to maintain appropriate orientation, as defined in the adjoining diagram, the “FALL DOWN” clause of the horse and cart contract will be in effect: DADDY agrees to stipulate for the record that you are “the best baby in town,” with both parties enjoined from further comment on the matter for a period of thirty (30) days.

By falling asleep, you give your full consent and agreement to this contract, and agree to waive all future legal action against your father as it pertains to this or any prior informal mockingbird for sleep agreements.

This Contract shall be interpreted under the laws of the State of Nevada.

This Constract is executed in the City of Cambridge, County of Middlesex, Commonwealth of Massachusetts.

Steven Greenblatt, Esq.

Benchmark results for Snow Leopard: 32- versus 64-bit kernel

It was recently revealed by ZD Net that Apple’s new Mac OS X release, dubbed Snow Leopard, would default to a 32-bit kernel despite being largely portrayed by Apple as the final step in the Mac’s journey to being a fully 64-bit OS. The reactions, as with anything Apple-related, were sheer polemic. Just check out the comments on the ZD Net article, and you’ll see what I mean. The Apple apologists played it off as if 64-bit code is pointless in the kernel, despite being indispensable in applications. The Microsoft partisans acted as if Apple had just halved the speed of the entire OS.

So, what’s the truth? I ran a few quick benchmarks to find out. To isolate the effects of the kernel from the benchmark software itself, I used a 32 bit benchmark program, XBench, so that the only thing that would be changing between the two runs was the kernel. (My understanding of Mac internals is not great, so I hope I wasn’t making a poor assumption here.) The results were interesting. As one might expect, neither side is entirely right or wrong.

The biggest difference was in memory allocation, where the difference was almost a factor of two. The next biggest difference was in the thread benchmarks, where the 64-bit kernel had a roughly 30% improvement in time. Finally, the 64-bit kernel had over a 10% improvement in large block disk transfer speed. These results seem plausible, as all involve tasks where the kernel plays a relatively large role. The rest of the benchmarks, mainly graphics and computation, had little or no improvement, as one would also expect.

So, it seems that while it’s true Apple isn’t doing a terrible thing by defaulting to the 32-bit kernel, it’s certainly also the case that you’re leaving some speed on the table. This is especially true for the disk transfer benchmarks, which can have a real effect on the perceived responsiveness of the computer.

The complete results for my are below. The test computer was a 2.53 GHz Mid-2009 MacBook Pro.

64-bit Kernel

Results	127.31
CPU Test	180.05
  GCD Loop	285.50	15.05 Mops/sec
  Floating Point Basic	145.63	3.46 Gflop/sec
  vecLib FFT	120.72	3.98 Gflop/sec
  Floating Point Library	280.68	48.88 Mops/sec
Thread Test	331.22
  Computation	500.00	10.13 Mops/sec, 4 threads
  Lock Contention	247.63	10.65 Mlocks/sec, 4 threads
Memory Test	200.62
 System	255.76
  Allocate	618.01	2.27 Malloc/sec
  Fill	185.89	9038.61 MB/sec
Copy	211.31	4364.56 MB/sec
 Stream	165.04
  Copy	157.53	3253.68 MB/sec
  Scale	155.20	3206.42 MB/sec
  Add	175.03	3728.48 MB/sec
  Triad	174.48	3732.49 MB/sec
Quartz Graphics Test	190.82
OpenGL Graphics Test	86.25
User Interface Test	245.26
Disk Test	48.75
 Sequential	101.56
  Uncached Write	120.97	74.27 MB/sec [4K blocks]
  Uncached Write	119.43	67.57 MB/sec [256K blocks]
  Uncached Read	64.63	18.91 MB/sec [4K blocks]
  Uncached Read	137.50	69.11 MB/sec [256K blocks]
 Random	32.07
  Uncached Write	11.66	1.23 MB/sec [4K blocks]
  Uncached Write	77.18	24.71 MB/sec [256K blocks]
  Uncached Read	59.85	0.42 MB/sec [4K blocks]
  Uncached Read	107.70	19.98 MB/sec [256K blocks]

32-bit Kernel

Results	122.67
CPU Test	179.50
  GCD Loop	295.89	15.60 Mops/sec
  Floating Point Basic	141.66	3.37 Gflop/sec
  vecLib FFT	120.19	3.97 Gflop/sec
  Floating Point Library	283.69	49.40 Mops/sec
Thread Test	260.69
  Computation	396.28	8.03 Mops/sec, 4 threads
  Lock Contention	194.23	8.36 Mlocks/sec, 4 threads
Memory Test	190.01
 System	234.38
  Allocate	369.54	1.36 Malloc/sec
  Fill	186.29	9057.73 MB/sec
  Copy	211.60	4370.52 MB/sec
 Stream	159.77
  Copy	153.34	3167.08 MB/sec
  Scale	150.01	3099.22 MB/sec
  Add	169.51	3610.92 MB/sec
  Triad	168.11	3596.34 MB/sec
Quartz Graphics Test	187.39
OpenGL Graphics Test	87.04
User Interface Test	237.42
Disk Test	46.82
Sequential	90.51
Uncached Write	118.31	72.64 MB/sec [4K blocks]
Uncached Write	79.22	44.82 MB/sec [256K blocks]
Uncached Read	60.05	17.57 MB/sec [4K blocks]
Uncached Read	154.69	77.75 MB/sec [256K blocks]
Random	31.58
Uncached Write	11.29	1.20 MB/sec [4K blocks]
Uncached Write	76.69	24.55 MB/sec [256K blocks]
Uncached Read	60.83	0.43 MB/sec [4K blocks]
Uncached Read	116.08	21.54 MB/sec [256K blocks]