Thanks. Made the go code similar to python using CopyBuffer with a block 
size of 65536. 

    buf := make([]byte, 65536)
    
    if _, err := io.CopyBuffer(hash, file, buf); err != nil {
        fmt.Println(err)
    }

Didn't make too much of a difference, was slightly faster.

What got it to the same place was running ComputeHash in the same goroutine 
as the Walk function vs its own go routine for each file

+    ComputeHash(path, info, queue, wg)
-    go ComputeHash(path, info, queue, wg)


*2.88s user 0.98s system 23% cpu 16.086 total, memory usage ~ 7MB*

Here's the before and after pprof webs:

BEFORE with 'go ComputeHash(...):

<https://lh3.googleusercontent.com/-aRKwq1P9_ec/WALXpkl_yxI/AAAAAAAADFY/WXn0PDcOw_Mk909yNp9Hh1tWUl0PlSVJACLcB/s1600/prof.cpu-with-go_compute_hash.png>


AFTER with 'ComputeHash(...):

<https://lh3.googleusercontent.com/-8LnYMr_UhOg/WALXsbuxkjI/AAAAAAAADFc/EAk7vOvl2zMJZARfcz2JpgXmZc_3YfFKwCLcB/s1600/prof.cpu-no-go.png>


Since disk read are SOO much slower, computing the hash for each file in 
its own goroutine caused a huge slowdown.. 

btw this is on a RAID10, with SSD: 

Old code SSD: 3.31s user 17.87s system 244% cpu 8.667 total

New code SDD:* 2.88s user 0.84s system 69% cpu 5.369 total*

Shows you can throw hardware at a problem BUT the old code locks up my 
system momentarily..


On Saturday, October 15, 2016 at 3:27:38 PM UTC-4, Kevin Malachowski wrote:
>
> Sorry, I meant that calling Write on the hash type might be slower if it's 
> called more often.
>
> (I'm on mobile right now. When I get back to a keyboard I'll try to come 
> up with an example)
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to