What approach do you suggest should I take?
I have no idea. You could try and break down the various activities and benchmark them separately I suppose. You could look at the profiles you're already generating in higher resolution to see where the time is going. You could also try and extract the SystemProfiler from OpenQwaq, which will run on Cog, and is better than MessageTally. Andreas wrote it to get around some of MessageTally's limitations. It should hopefully show primitives quite accurately.