HEAD: Deterioration in ByteString I/O

Simon Marlow marlowsd at gmail.com
Thu Sep 9 11:21:06 EDT 2010


On 09/09/2010 15:08, Daniel Fischer wrote:
> On Thursday 09 September 2010 13:19:23, Simon Marlow wrote:
>> I think I've found the problem, GHC.IO.Handle.Text:
>>
>> bufReadNBEmpty :: Handle__ ->  Buffer Word8 ->  Ptr Word8 ->  Int ->  Int ->
>> IO Int
>> bufReadNBEmpty   h_ at Handle__{..}
>>                    buf at Buffer{ bufRaw=raw, bufR=w, bufL=r, bufSize=sz }
>>                    ptr so_far count
>>     | count>  sz, False,
>>       Just fd<- cast haDevice = do
>>          m<- RawIO.readNonBlocking (fd::FD) ptr count
>>          case m of
>>            Nothing ->  return so_far
>>            Just n  ->  return (so_far + n)
>>
>>
>> See if you can spot it.
>
> Yes, that's it. Removing the literal False to make that branch reachable
> more or less reinstates old behaviour.
>
> For I/O of (lazy) ByteStrings only, the allocation figures of HEAD are
> consistently slightly higher than those of 6.12.3, but the difference is
> less than 1%, well within the normal fluctuation due to changes in
> implementation. Timings seem to be identical.
>
> When performing work on the ByteStrings (finding/replacing substrings),
> however, things change a bit.
> The allocation figures observed so far range from almost identical (<  1%
> difference) to above 15% higher (90,146,508 bytes allocated vs.
> 106,237,456), most of the differences I observed so far are between 5% and
> 10%.
> The wall clock time (elapsed, per +RTS -s or time) seems to be identical
> (very stable timings for multiple runs of the same benchmark), but the MUT
> times reported by +RTS -s differ for some benchmarks (between 10% less for
> HEAD and 20% more observed, but identical for most).
>
> That might be worthy of examination, though it's not alarming.

If you can find an example that consistently allocates significantly 
more than with 6.12 (10%+), then I'd say it would be worth looking into.

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list