...
Thank you. That was informative, but I'm not on windows and my hashrate estimate is clearly way off. When running with --benchmark all devices report a hashrate close to 380MH/s, so there is nothing wrong with the devices. Furthermore the utility is more or less constant at all settings (except with really low abort time, but that is expected). It is true that it takes a long time to get a good estimate of utility, but the rough neighbouhood can be achieved in an hour or so, especially when averaging over 10 devices.
So my conclusion is that the estimation has a bug and it doesn't do what it (and you) says it does. I guess I have to try to decipher the source to try to find it.
No, an hour is not long enough to get a reliable estimate for U:
An hour is probably long enough to get an estimate that is within 10%
10% of 5.3 is of course 0.53 so it could read as high 5.83 or as low as 4.77 after an hour and not be unexpected.
Even averaging over 10 devices is the equivalent of only running for 10 hours.
As I said, you'd need a few days running to START to converge on the expected value for U:
That's random probability - nothing do with code.
Easiest way to show this is to look at my 6950 GPU.
After 28hrs runtime it reads 365.96MH/s but has a U: of 5.00 - that's out by 2%
The GPU code counts all hashes exactly - no calculations involved - just simply adding them up.
Of course that 2% could be higher and I'd not consider that unexpected either.
Anyway, if you want to see exactly what's happening, then in the cgminer screen press 'd' then 'd' and look for the all "Icarus" messages.
It will tell you all the timing calculations it is doing.
However, as I said before, the timing of the termios must be correct (that includes the computer clock and of course you should be using ntp - and ntp can also tell you how good or bad your clock is)
Edit: since you mentioned p2pool before, then also taking the small effect of 10s LP's into consideration:
Each LP loses 0.1s of processing time - i.e. 1% - so you will certainly expect to lose 3 or 4 MH/s from that also.
Edit2: though I should have said this at the start - you can easily determine if it is somehow p2pool related by trying it on a normal pool