Coder Social home page Coder Social logo

reedsolomon's Introduction

Reed-Solomon

Go Reference Go

Reed-Solomon Erasure Coding in Go, with speeds exceeding 1GB/s/cpu core implemented in pure Go.

This is a Go port of the JavaReedSolomon library released by Backblaze, with some additional optimizations.

For an introduction on erasure coding, see the post on the Backblaze blog.

For encoding high shard counts (>256) a Leopard implementation is used. For most platforms this performs close to the original Leopard implementation in terms of speed.

Package home: https://github.com/klauspost/reedsolomon

Godoc: https://pkg.go.dev/github.com/klauspost/reedsolomon

Installation

To get the package use the standard:

go get -u github.com/klauspost/reedsolomon

Using Go modules is recommended.

Changes

2022

2021

  • Use GOAMD64=v4 to enable faster AVX2.
  • Add progressive shard encoding.
  • Wider AVX2 loops
  • Limit concurrency on AVX2, since we are likely memory bound.
  • Allow 0 parity shards.
  • Allow disabling inversion cache.
  • Faster AVX2 encoding.
See older changes

May 2020

  • ARM64 optimizations, up to 2.5x faster.
  • Added WithFastOneParityMatrix for faster operation with 1 parity shard.
  • Much better performance when using a limited number of goroutines.
  • AVX512 is now using multiple cores.
  • Stream processing overhaul, big speedups in most cases.
  • AVX512 optimizations

March 6, 2019

The pure Go implementation is about 30% faster. Minor tweaks to assembler implementations.

February 8, 2019

AVX512 accelerated version added for Intel Skylake CPUs. This can give up to a 4x speed improvement as compared to AVX2. See here for more details.

December 18, 2018

Assembly code for ppc64le has been contributed, this boosts performance by about 10x on this platform.

November 18, 2017

Added WithAutoGoroutines which will attempt to calculate the optimal number of goroutines to use based on your expected shard size and detected CPU.

October 1, 2017

  • Cauchy Matrix is now an option. Thanks to templexxx for the basis of this.

  • Default maximum number of goroutines has been increased for better multi-core scaling.

  • After several requests the Reconstruct and ReconstructData now slices of zero length but sufficient capacity to be used instead of allocating new memory.

August 26, 2017

  • The Encoder() now contains an Update function contributed by chenzhongtao.

  • Frank Wessels kindly contributed ARM 64 bit assembly, which gives a huge performance boost on this platform.

July 20, 2017

ReconstructData added to Encoder interface. This can cause compatibility issues if you implement your own Encoder. A simple workaround can be added:

func (e *YourEnc) ReconstructData(shards [][]byte) error {
	return ReconstructData(shards)
}

You can of course also do your own implementation. The StreamEncoder handles this without modifying the interface. This is a good lesson on why returning interfaces is not a good design.

Usage

This section assumes you know the basics of Reed-Solomon encoding. A good start is this Backblaze blog post.

This package performs the calculation of the parity sets. The usage is therefore relatively simple.

First of all, you need to choose your distribution of data and parity shards. A 'good' distribution is very subjective, and will depend a lot on your usage scenario.

To create an encoder with 10 data shards (where your data goes) and 3 parity shards (calculated):

    enc, err := reedsolomon.New(10, 3)

This encoder will work for all parity sets with this distribution of data and parity shards.

If you will primarily be using it with one shard size it is recommended to use WithAutoGoroutines(shardSize) as an additional parameter. This will attempt to calculate the optimal number of goroutines to use for the best speed. It is not required that all shards are this size.

Then you send and receive data that is a simple slice of byte slices; [][]byte. In the example above, the top slice must have a length of 13.

    data := make([][]byte, 13)

You should then fill the 10 first slices with equally sized data, and create parity shards that will be populated with parity data. In this case we create the data in memory, but you could for instance also use mmap to map files.

    // Create all shards, size them at 50000 each
    for i := range input {
      data[i] := make([]byte, 50000)
    }
    
    // The above allocations can also be done by the encoder:
    // data := enc.(reedsolomon.Extended).AllocAligned(50000)
    
    // Fill some data into the data shards
    for i, in := range data[:10] {
      for j:= range in {
         in[j] = byte((i+j)&0xff)
      }
    }

To populate the parity shards, you simply call Encode() with your data.

    err = enc.Encode(data)

The only cases where you should get an error is, if the data shards aren't of equal size. The last 3 shards now contain parity data. You can verify this by calling Verify():

    ok, err = enc.Verify(data)

The final (and important) part is to be able to reconstruct missing shards. For this to work, you need to know which parts of your data is missing. The encoder does not know which parts are invalid, so if data corruption is a likely scenario, you need to implement a hash check for each shard.

If a byte has changed in your set, and you don't know which it is, there is no way to reconstruct the data set.

To indicate missing data, you set the shard to nil before calling Reconstruct():

    // Delete two data shards
    data[3] = nil
    data[7] = nil
    
    // Reconstruct the missing shards
    err := enc.Reconstruct(data)

The missing data and parity shards will be recreated. If more than 3 shards are missing, the reconstruction will fail.

If you are only interested in the data shards (for reading purposes) you can call ReconstructData():

    // Delete two data shards
    data[3] = nil
    data[7] = nil
    
    // Reconstruct just the missing data shards
    err := enc.ReconstructData(data)

If you don't need all data shards you can use ReconstructSome():

    // Delete two data shards
    data[3] = nil
    data[7] = nil
    
    // Reconstruct just the shard 3
    err := enc.ReconstructSome(data, []bool{false, false, false, true, false, false, false, false})

So to sum up reconstruction:

  • The number of data/parity shards must match the numbers used for encoding.
  • The order of shards must be the same as used when encoding.
  • You may only supply data you know is valid.
  • Invalid shards should be set to nil.

For complete examples of an encoder and decoder see the examples folder.

Splitting/Joining Data

You might have a large slice of data. To help you split this, there are some helper functions that can split and join a single byte slice.

   bigfile, _ := ioutil.Readfile("myfile.data")
   
   // Split the file
   split, err := enc.Split(bigfile)

This will split the file into the number of data shards set when creating the encoder and create empty parity shards.

An important thing to note is that you have to keep track of the exact input size. If the size of the input isn't divisible by the number of data shards, extra zeros will be inserted in the last shard.

To join a data set, use the Join() function, which will join the shards and write it to the io.Writer you supply:

   // Join a data set and write it to io.Discard.
   err = enc.Join(io.Discard, data, len(bigfile))

Aligned Allocations

For AMD64 aligned inputs can make a big speed difference.

This is an example of the speed difference when inputs are unaligned/aligned:

BenchmarkEncode100x20x10000-32    	    7058	    172648 ns/op	6950.57 MB/s
BenchmarkEncode100x20x10000-32    	    8406	    137911 ns/op	8701.24 MB/s

This is mostly the case when dealing with odd-sized shards.

To facilitate this the package provides an AllocAligned(shards, each int) [][]byte. This will allocate a number of shards, each with the size each. Each shard will then be aligned to a 64 byte boundary.

Each encoder also has a AllocAligned(each int) [][]byte as an extended interface which will return the same, but with the shard count configured in the encoder.

It is not possible to re-aligned already allocated slices, for example when using Split. When it is not possible to write to aligned shards, you should not copy to them.

Progressive encoding

It is possible to encode individual shards using EncodeIdx:

	// EncodeIdx will add parity for a single data shard.
	// Parity shards should start out as 0. The caller must zero them.
	// Data shards must be delivered exactly once. There is no check for this.
	// The parity shards will always be updated and the data shards will remain the same.
	EncodeIdx(dataShard []byte, idx int, parity [][]byte) error

This allows progressively encoding the parity by sending individual data shards. There is no requirement on shards being delivered in order, but when sent in order it allows encoding shards one at the time, effectively allowing the operation to be streaming.

The result will be the same as encoding all shards at once. There is a minor speed penalty using this method, so send shards at once if they are available.

Example

func test() {
    // Create an encoder with 7 data and 3 parity slices.
    enc, _ := reedsolomon.New(7, 3)

    // This will be our output parity.
    parity := make([][]byte, 3)
    for i := range parity {
        parity[i] = make([]byte, 10000)
    }

    for i := 0; i < 7; i++ {
        // Send data shards one at the time.
        _ = enc.EncodeIdx(make([]byte, 10000), i, parity)
    }

    // parity now contains parity, as if all data was sent in one call.
}

Streaming/Merging

It might seem like a limitation that all data should be in memory, but an important property is that as long as the number of data/parity shards are the same, you can merge/split data sets, and they will remain valid as a separate set.

    // Split the data set of 50000 elements into two of 25000
    splitA := make([][]byte, 13)
    splitB := make([][]byte, 13)
    
    // Merge into a 100000 element set
    merged := make([][]byte, 13)
    
    for i := range data {
      splitA[i] = data[i][:25000]
      splitB[i] = data[i][25000:]
      
      // Concatenate it to itself
	  merged[i] = append(make([]byte, 0, len(data[i])*2), data[i]...)
	  merged[i] = append(merged[i], data[i]...)
    }
    
    // Each part should still verify as ok.
    ok, err := enc.Verify(splitA)
    if ok && err == nil {
        log.Println("splitA ok")
    }
    
    ok, err = enc.Verify(splitB)
    if ok && err == nil {
        log.Println("splitB ok")
    }
    
    ok, err = enc.Verify(merge)
    if ok && err == nil {
        log.Println("merge ok")
    }

This means that if you have a data set that may not fit into memory, you can split processing into smaller blocks. For the best throughput, don't use too small blocks.

This also means that you can divide big input up into smaller blocks, and do reconstruction on parts of your data. This doesn't give the same flexibility of a higher number of data shards, but it will be much more performant.

Streaming API

There has been added support for a streaming API, to help perform fully streaming operations, which enables you to do the same operations, but on streams. To use the stream API, use NewStream function to create the encoding/decoding interfaces.

You can use WithConcurrentStreams to ready an interface that reads/writes concurrently from the streams.

You can specify the size of each operation using WithStreamBlockSize. This will set the size of each read/write operation.

Input is delivered as []io.Reader, output as []io.Writer, and functionality corresponds to the in-memory API. Each stream must supply the same amount of data, similar to how each slice must be similar size with the in-memory API. If an error occurs in relation to a stream, a StreamReadError or StreamWriteError will help you determine which stream was the offender.

There is no buffering or timeouts/retry specified. If you want to add that, you need to add it to the Reader/Writer.

For complete examples of a streaming encoder and decoder see the examples folder.

GF16 (more than 256 shards) is not supported by the streaming interface.

Advanced Options

You can modify internal options which affects how jobs are split between and processed by goroutines.

To create options, use the WithXXX functions. You can supply options to New, NewStream. If no Options are supplied, default options are used.

Example of how to supply options:

    enc, err := reedsolomon.New(10, 3, WithMaxGoroutines(25))

Leopard Compatible GF16

When you encode more than 256 shards the library will switch to a Leopard-RS implementation.

This allows encoding up to 65536 shards (data+parity) with the following limitations, similar to leopard:

  • The original and recovery data must not exceed 65536 pieces.
  • The shard size must each be a multiple of 64 bytes.
  • Each buffer should have the same number of bytes.
  • Even the last shard must be rounded up to the block size.
Regular Leopard
Encode
EncodeIdx -
Verify
Reconstruct
ReconstructData
ReconstructSome ✓ (+)
Update -
Split
Join
  • (+) Same as calling ReconstructData.

The Split/Join functions will help to split an input to the proper sizes.

Speed can be expected to be O(N*log(N)), compared to the O(N*N). Reconstruction matrix calculation is more time-consuming, so be sure to include that as part of any benchmark you run.

For now SSSE3, AVX2 and AVX512 assembly are available on AMD64 platforms.

Leopard mode currently always runs as a single goroutine, since multiple goroutines doesn't provide any worthwhile speedup.

Leopard GF8

It is possible to replace the default reed-solomon encoder with a leopard compatible one. This will typically be faster when dealing with more than 20-30 shards. Note that the limitations listed above also applies to this mode. See table below for speed with different number of shards.

To enable Leopard GF8 mode use WithLeopardGF(true).

Benchmark Encoding and Reconstructing 1KB shards with variable number of shards. All implementation use inversion cache when available. Speed is total shard size for each operation. Data shard throughput is speed/2. AVX2 is used.

Encoder Shards Encode Recover All Recover One
Cauchy 4+4 23076.83 MB/s 5444.02 MB/s 10834.67 MB/s
Cauchy 8+8 15206.87 MB/s 4223.42 MB/s 16181.62 MB/s
Cauchy 16+16 7427.47 MB/s 3305.84 MB/s 22480.41 MB/s
Cauchy 32+32 3785.64 MB/s 2300.07 MB/s 26181.31 MB/s
Cauchy 64+64 1911.93 MB/s 1368.51 MB/s 27992.93 MB/s
Cauchy 128+128 963.83 MB/s 1327.56 MB/s 32866.86 MB/s
Leopard GF8 4+4 17061.28 MB/s 3099.06 MB/s 4096.78 MB/s
Leopard GF8 8+8 10546.67 MB/s 2925.92 MB/s 3964.00 MB/s
Leopard GF8 16+16 10961.37 MB/s 2328.40 MB/s 3110.22 MB/s
Leopard GF8 32+32 7111.47 MB/s 2374.61 MB/s 3220.75 MB/s
Leopard GF8 64+64 7468.57 MB/s 2055.41 MB/s 3061.81 MB/s
Leopard GF8 128+128 5479.99 MB/s 1953.21 MB/s 2815.15 MB/s
Leopard GF16 256+256 6158.66 MB/s 454.14 MB/s 506.70 MB/s
Leopard GF16 512+512 4418.58 MB/s 685.75 MB/s 801.63 MB/s
Leopard GF16 1024+1024 4778.05 MB/s 814.51 MB/s 1080.19 MB/s
Leopard GF16 2048+2048 3417.05 MB/s 911.64 MB/s 1179.48 MB/s
Leopard GF16 4096+4096 3209.41 MB/s 729.13 MB/s 1135.06 MB/s
Leopard GF16 8192+8192 2034.11 MB/s 604.52 MB/s 842.13 MB/s
Leopard GF16 16384+16384 1525.88 MB/s 486.74 MB/s 750.01 MB/s
Leopard GF16 32768+32768 1138.67 MB/s 482.81 MB/s 712.73 MB/s

"Traditional" encoding is faster until somewhere between 16 and 32 shards. Leopard provides fast encoding in all cases, but shows a significant overhead for reconstruction.

Calculating the reconstruction matrix takes a significant amount of computation. With bigger shards that will be smaller. Arguably, fewer shards typically also means bigger shards. Due to the high shard count caching reconstruction matrices generally isn't feasible for Leopard.

Performance

Performance depends mainly on the number of parity shards. In rough terms, doubling the number of parity shards will double the encoding time.

Here are the throughput numbers with some different selections of data and parity shards. For reference each shard is 1MB random data, and 16 CPU cores are used for encoding.

Data Parity Go MB/s SSSE3 MB/s AVX2 MB/s
5 2 20,772 66,355 108,755
8 8 6,815 38,338 70,516
10 4 9,245 48,237 93,875
50 20 2,063 12,130 22,828

The throughput numbers here is the size of the encoded data and parity shards.

If runtime.GOMAXPROCS() is set to a value higher than 1, the encoder will use multiple goroutines to perform the calculations in Verify, Encode and Reconstruct.

Benchmarking Reconstruct() followed by a Verify() (=all) versus just calling ReconstructData() (=data) gives the following result:

benchmark                            all MB/s     data MB/s    speedup
BenchmarkReconstruct10x2x10000-8     2011.67      10530.10     5.23x
BenchmarkReconstruct50x5x50000-8     4585.41      14301.60     3.12x
BenchmarkReconstruct10x2x1M-8        8081.15      28216.41     3.49x
BenchmarkReconstruct5x2x1M-8         5780.07      28015.37     4.85x
BenchmarkReconstruct10x4x1M-8        4352.56      14367.61     3.30x
BenchmarkReconstruct50x20x1M-8       1364.35      4189.79      3.07x
BenchmarkReconstruct10x4x16M-8       1484.35      5779.53      3.89x

The package will use GFNI instructions combined with AVX512 when these are available. This further improves speed by up to 3x over AVX2 code paths.

ARM64 NEON

By exploiting NEON instructions the performance for ARM has been accelerated. Below are the performance numbers for a single core on an EC2 m6g.16xlarge (Graviton2) instance (Amazon Linux 2):

BenchmarkGalois128K-64        119562     10028 ns/op        13070.78 MB/s
BenchmarkGalois1M-64           14380     83424 ns/op        12569.22 MB/s
BenchmarkGaloisXor128K-64      96508     12432 ns/op        10543.29 MB/s
BenchmarkGaloisXor1M-64        10000    100322 ns/op        10452.13 MB/s

Performance on ppc64le

The performance for ppc64le has been accelerated. This gives roughly a 10x performance improvement on this architecture as can be seen below:

benchmark                      old MB/s     new MB/s     speedup
BenchmarkGalois128K-160        948.87       8878.85      9.36x
BenchmarkGalois1M-160          968.85       9041.92      9.33x
BenchmarkGaloisXor128K-160     862.02       7905.00      9.17x
BenchmarkGaloisXor1M-160       784.60       6296.65      8.03x

Legal

None of section below is legal advice. Seek your own legal counsel. As stated by the LICENSE the authors will not be held reliable for any use of this library. Users are encouraged to independently verify they comply with all legal requirements.

As can be seen in recent news there has been lawsuits related to possible patents of aspects of erasure coding functionality.

As a possible mitigation it is possible to use the tag nopshufb when compiling any code which includes this package. This will remove all inclusion and use of PSHUFB and equivalent on other platforms.

This is done by adding -tags=nopshufb to go build and similar commands that produce binary output.

The removed code may not be infringing and even after -tags=nopshufb there may still be infringing code left.

Links

License

This code, as the original JavaReedSolomon is published under an MIT license. See LICENSE file for more information.

reedsolomon's People

Contributors

0xbillw avatar akalin avatar anderstrier avatar cristaloleg avatar cxz66666 avatar darrenldl avatar dnr avatar dssysolyatin avatar egbakou avatar elias-orijtech avatar ernado avatar felixonmars avatar fwessels avatar gyuho avatar harshavardhana avatar hjlebbink avatar jesselucas avatar katamaritaco avatar klauspost avatar lukechampine avatar mikecook avatar muesli avatar numbleroot avatar pjkundert avatar rootulp avatar shawnz avatar somethingnew2-0 avatar vitalif avatar walldiss avatar xiaost avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

reedsolomon's Issues

Can the number of parity shards more than the number of data shards?

The readme said

A good starting point is above 5 and below 257 data shards (the maximum supported number), and the number of parity shards to be 2 or above, and below the number of data shards.

Why "the number of parity shards to be below the number of data shards."?
Can the number of parity shards more than the number of data shards?

I see sia.tech can split data in to 30 segments, and recover from any 10 of 30 segments , can reedsolomon do this ?

https://sia.tech/technology

The Sia software divides files into 30 segments before uploading, each targeted for distribution to hosts across the world. This distribution assures that no one host represents a single point of failure and reinforces overall network uptime and redundancy.

File segments are created using a technology called Reed-Solomon erasure coding, commonly used in CDs and DVDs. Erasure coding allows Sia to divide files in a redundant manner, where any 10 of 30 segments can fully recover a user's files.

This means that if 20 out of 30 hosts go offline, a Sia user is still able to download her files.

Benchmark code?

I was interested in the benchmarks you posted in the README.md. I wanted to compare to other approaches. But I didn't see the code for the (5,2), (10,2), (10,4), (50,20), and 1,2,4 and 8 thread runs. Did I miss it?

For scaling was that inside the enc.Encode? Or interleaving enc.split across multiple encodes?

Export the `reedSolomon` struct

I believe a more idiomatic Go approach would be to make the reedSolomon struct exported, e.g. by renaming it to ReedSolomon. Then the New() function should also be changed to return *ReedSolomon, making the already capitalized fields of this struct visible to its users.

As it is now, these fields (DataShards, ParityShards, Shards) are not visible because New returns an Encoder interface, and this causes me to have to store these same values also in my own struct, because I can't access the fields of the reedSolomon struct.

I've implemented this change locally, and I'd be happy to provide a pull request (pending a response to this issue). It requires three minor additional changes (essentially avoiding a few type assertions), but I believe this change is non-breaking, since the returned *ReedSolomon object will implement the Encoder interface. The tests still pass after my change.

Why the library doesn't allow io.Pipe()

When trying to use the concept of Pipes for Stream-encoder.go it ends up in deadlock. I want to know why library does not allow usage of io.Pipe for the same.

Better example of simple-encoders/decoder

I was tinkering with the examples and as a bit surprised that a single bit error can corrupt the decoding. The README does mention this "If values have changed in a shard, it cannot be reconstructed".

I was thinking it might be useful to have an example closer to a real world use case.

The example README does mention hashing the shards so you can delete the corrupt ones. But in the default example (4 shards + 2 parity) even with a hash of each shard, 3 single bit errors could kill a decoding.

So I was thinking of adding a sha256 per 64KB block. That way any bit corruptions would be recognized and you could use the other 5 shards for that particular block.

I wrote a little simulator to add errors and I believe that on average a 2GB file encoded with the defaults (4 shards + 2 parity shards) would survive (on average) between 280 and 1200 64KB errors before any part of the file is corrupted. Quite a bit better than 3 bit errors. Storage overhead would be something like 0.05%. Additionally even with 8192 errors 95% of the file would be recoverable.

Would you accept a pull request to add sha256 block checksums to your simple encoder/decoder?

Crash during benchmarking

This may be a fluke but one of the reconstruction benchmarks apparently stalled (and got terminated by the testing framework).

NB It is on a pretty beefy box (using go1.7.5)

$ lscpu
Architecture:          x86_64
CPU(s):                64
Model name:            Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
$ go test -v -bench=.
=== RUN   TestAssociativity
--- PASS: TestAssociativity (0.05s)
=== RUN   TestIdentity
--- PASS: TestIdentity (0.00s)
=== RUN   TestInverse
--- PASS: TestInverse (0.00s)
=== RUN   TestCommutativity
--- PASS: TestCommutativity (0.00s)
=== RUN   TestDistributivity
--- PASS: TestDistributivity (0.03s)
=== RUN   TestExp
--- PASS: TestExp (0.00s)
=== RUN   TestGalois
--- PASS: TestGalois (0.00s)
=== RUN   TestNewInversionTree
--- PASS: TestNewInversionTree (0.00s)
=== RUN   TestGetInvertedMatrix
--- PASS: TestGetInvertedMatrix (0.00s)
=== RUN   TestInsertInvertedMatrix
--- PASS: TestInsertInvertedMatrix (0.00s)
=== RUN   TestDoubleInsertInvertedMatrix
--- PASS: TestDoubleInsertInvertedMatrix (0.00s)
=== RUN   TestNewMatrix
--- PASS: TestNewMatrix (0.00s)
=== RUN   TestMatrixIdentity
--- PASS: TestMatrixIdentity (0.00s)
=== RUN   TestMatrixMultiply
--- PASS: TestMatrixMultiply (0.00s)
=== RUN   TestMatrixInverse
--- PASS: TestMatrixInverse (0.00s)
=== RUN   TestEncoding
--- PASS: TestEncoding (0.00s)
=== RUN   TestReconstruct
--- PASS: TestReconstruct (0.01s)
=== RUN   TestVerify
--- PASS: TestVerify (0.01s)
=== RUN   TestOneEncode
--- PASS: TestOneEncode (0.00s)
=== RUN   TestEncoderReconstruct
--- PASS: TestEncoderReconstruct (0.00s)
=== RUN   TestSplitJoin
--- PASS: TestSplitJoin (0.00s)
=== RUN   TestCodeSomeShards
--- PASS: TestCodeSomeShards (0.00s)
=== RUN   TestAllMatrices
--- SKIP: TestAllMatrices (0.00s)
	reedsolomon_test.go:731: Skipping slow matrix check
=== RUN   TestNew
--- PASS: TestNew (0.04s)
=== RUN   TestStreamEncoding
--- PASS: TestStreamEncoding (0.98s)
=== RUN   TestStreamEncodingConcurrent
--- PASS: TestStreamEncodingConcurrent (0.82s)
=== RUN   TestStreamReconstruct
--- PASS: TestStreamReconstruct (1.11s)
=== RUN   TestStreamVerify
--- PASS: TestStreamVerify (1.21s)
=== RUN   TestStreamOneEncode
--- PASS: TestStreamOneEncode (0.03s)
=== RUN   TestStreamSplitJoin
--- PASS: TestStreamSplitJoin (0.00s)
=== RUN   TestNewStream
--- PASS: TestNewStream (0.04s)
=== RUN   ExampleEncoder
--- PASS: ExampleEncoder (0.00s)
=== RUN   ExampleEncoder_slicing
--- PASS: ExampleEncoder_slicing (0.00s)
=== RUN   ExampleEncoder_xor
--- PASS: ExampleEncoder_xor (0.00s)
=== RUN   ExampleStreamEncoder
--- PASS: ExampleStreamEncoder (0.01s)
BenchmarkEncode10x2x10000-64            	   50000	     30402 ns/op	3289.16 MB/s
BenchmarkEncode100x20x10000-64          	    2000	    676910 ns/op	1477.30 MB/s
BenchmarkEncode17x3x1M-64               	    2000	    678313 ns/op	26279.56 MB/s
BenchmarkEncode10x4x16M-64              	     100	  26233961 ns/op	6395.23 MB/s
BenchmarkEncode5x2x1M-64                	   10000	    239702 ns/op	21872.40 MB/s
BenchmarkEncode10x2x1M-64               	    3000	    410735 ns/op	25529.22 MB/s
BenchmarkEncode10x4x1M-64               	    2000	    575845 ns/op	18209.32 MB/s
BenchmarkEncode50x20x1M-64              	     200	   6632559 ns/op	7904.76 MB/s
BenchmarkEncode17x3x16M-64              	      50	  21388640 ns/op	13334.77 MB/s
BenchmarkVerify10x2x10000-64            	   30000	     57263 ns/op	1746.33 MB/s
BenchmarkVerify50x5x50000-64            	    2000	    790764 ns/op	6323.00 MB/s
BenchmarkVerify10x2x1M-64               	    2000	    655075 ns/op	16006.95 MB/s
BenchmarkVerify5x2x1M-64                	    2000	    679450 ns/op	7716.35 MB/s
BenchmarkVerify10x4x1M-64               	    1000	   1215555 ns/op	8626.31 MB/s
BenchmarkVerify50x20x1M-64              	     200	   7148515 ns/op	7334.22 MB/s
BenchmarkVerify10x4x16M-64              	      50	  27346119 ns/op	6135.14 MB/s
BenchmarkReconstruct10x2x10000-64       	   20000	    104604 ns/op	 955.98 MB/s
BenchmarkReconstruct50x5x50000-64       	    1000	   1360904 ns/op	3674.03 MB/s
BenchmarkReconstruct10x2x1M-64          	    2000	   1041449 ns/op	10068.43 MB/s
BenchmarkReconstruct5x2x1M-64           	    2000	    999611 ns/op	5244.92 MB/s
BenchmarkReconstruct10x4x1M-64          	    1000	   2012756 ns/op	5209.65 MB/s
BenchmarkReconstruct50x20x1M-64         	     100	  13922106 ns/op	3765.87 MB/s
BenchmarkReconstruct10x4x16M-64         	      30	  39792994 ns/op	4216.12 MB/s
BenchmarkReconstructP10x2x10000-64      	   50000	     22653 ns/op	4414.27 MB/s
BenchmarkReconstructP50x5x50000-64      	       1	9713725630 ns/op	   0.51 MB/s
BenchmarkReconstructP10x2x1M-64         	       1	26322144755 ns/op	   0.40 MB/s
BenchmarkReconstructP5x2x1M-64          	       1	12112473091 ns/op	   0.43 MB/s
BenchmarkReconstructP10x4x1M-64         	       1	21043880171 ns/op	   0.50 MB/s
BenchmarkReconstructP50x20x1M-64        	       1	143931801537 ns/op	   0.36 MB/s
SIGQUIT: quit
PC=0x458d31 m=0

goroutine 0 [idle]:
runtime.futex(0x5f4170, 0x0, 0x0, 0x0, 0x76df900000000, 0x1, 0x0, 0x0, 0x7ffe8c539020, 0x40d3d2, ...)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sys_linux_amd64.s:387 +0x21
runtime.futexsleep(0x5f4170, 0x0, 0xffffffffffffffff)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/os_linux.go:45 +0x62
runtime.notesleep(0x5f4170)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/lock_futex.go:145 +0x82
runtime.stopm()
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/proc.go:1594 +0xad
runtime.findrunnable(0xc420042a00, 0x0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/proc.go:2021 +0x228
runtime.schedule()
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/proc.go:2120 +0x14c
runtime.park_m(0xc4203a8000)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/proc.go:2183 +0x123
runtime.mcall(0x7ffe8c5391c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/asm_amd64.s:240 +0x5b

goroutine 1 [chan receive, 5 minutes]:
testing.(*B).run1(0xc426a16280, 0xc426a16280)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:210 +0xac
testing.(*B).Run(0xc4204e8000, 0x544d84, 0x1d, 0x551a68, 0x463e00)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:486 +0x1ee
testing.runBenchmarksInternal.func1(0xc4204e8000)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:399 +0x6d
testing.(*B).runN(0xc4204e8000, 0x1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:139 +0xaa
testing.runBenchmarksInternal(0x551ce8, 0x5f1600, 0x2e, 0x2e, 0xc42000a301)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:405 +0x4a7
testing.(*M).Run(0xc426aa1ef8, 0xc4200a00a0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/testing.go:746 +0x1ac
main.main()
	github.com/klauspost/reedsolomon/_test/_testmain.go:216 +0xc6

goroutine 7807318 [semacquire, 5 minutes]:
sync.runtime_Semacquire(0xc42053447c)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*WaitGroup).Wait(0xc420534470)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/waitgroup.go:131 +0x97
testing.(*B).RunParallel(0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:601 +0x1c8
github.com/klauspost/reedsolomon.benchmarkReconstructP(0xc426a16280, 0xa, 0x4, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:548 +0x1b1
github.com/klauspost/reedsolomon.BenchmarkReconstructP10x4x16M(0xc426a16280)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:583 +0x46
testing.(*B).runN(0xc426a16280, 0x1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:139 +0xaa
testing.(*B).run1.func1(0xc426a16280)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:208 +0x5a
created by testing.(*B).run1
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:209 +0x7f

goroutine 7807580 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xba7dcb1021a8893)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xba7dcb1021a8893)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xba7dcb1021a8893)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5d0656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42571a080)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807576 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6ac8d731de8e844a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6ac8d731de8e844a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6ac8d731de8e844a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5d6656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426476020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807554 [runnable]:
sync.runtime_Semrelease(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:57 +0x2b
sync.(*Mutex).Unlock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:124 +0xaa
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1a7be85e7e3f31d6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:295 +0x5c
math/rand.(*Rand).Int63(0xc42000e240, 0x1a7be85e7e3f31d6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1a7be85e7e3f31d6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5a0656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c6040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807563 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6d0a035160dcc8ab)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6d0a035160dcc8ab)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6d0a035160dcc8ab)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5d5656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205ea080)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807579 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x58b8842a91252500)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x58b8842a91252500)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x58b8842a91252500)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5ea656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc420446020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807572 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x5a51615dafd0f110)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x5a51615dafd0f110)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x5a51615dafd0f110)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5f2656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42302c020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807577 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2fae61848b2be441)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2fae61848b2be441)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2fae61848b2be441)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc652656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42302c000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807569 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2cbbecdc632ffe12)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2cbbecdc632ffe12)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2cbbecdc632ffe12)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc59a656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42027a020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807546 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x15cfc226386977b8)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x15cfc226386977b8)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x15cfc226386977b8)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc54b656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42571a000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807582 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xf71ee892fef4f32)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xf71ee892fef4f32)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xf71ee892fef4f32)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc654656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426476080)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807561 [runnable]:
math/rand.Int63(0x56d955b63d96cea1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221
github.com/klauspost/reedsolomon.fillRandom(0xc5e2656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426a6a060)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807574 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x795d6b689bdf6bfa)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x795d6b689bdf6bfa)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x795d6b689bdf6bfa)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e3656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426476000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807327 [runnable]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x43a102fe8eca748d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x43a102fe8eca748d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x43a102fe8eca748d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc562656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42811a020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807543 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x4f952b4c039bf60d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x4f952b4c039bf60d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x4f952b4c039bf60d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5c4656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e6040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807553 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1e55b4fb88a054ac)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1e55b4fb88a054ac)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1e55b4fb88a054ac)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc62e656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c6020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807323 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x5840cad2f7429d9a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x5840cad2f7429d9a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x5840cad2f7429d9a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5ab656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42000e340)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807571 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2a4d9a76aac49396)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2a4d9a76aac49396)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2a4d9a76aac49396)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc565656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42027a000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807575 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2c5e6b6f848f916d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2c5e6b6f848f916d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2c5e6b6f848f916d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5f8656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426a6a000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807581 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1896210d3cf8fe33)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1896210d3cf8fe33)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1896210d3cf8fe33)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc57e656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42571a060)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807560 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x29ceeec0d7993ae7)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x29ceeec0d7993ae7)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x29ceeec0d7993ae7)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc585656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc433d12040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807565 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x13bbf8464ff1d010)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x13bbf8464ff1d010)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x13bbf8464ff1d010)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e6656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc433d12000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807320 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x72dbe202c0faed43)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x72dbe202c0faed43)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x72dbe202c0faed43)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc56d656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42826e000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807555 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1b5f32651d6b2f6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1b5f32651d6b2f6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1b5f32651d6b2f6)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5ee656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e6000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807319 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xf86168628dd275c)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xf86168628dd275c)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xf86168628dd275c)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5cf656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42826e020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807590 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xcbc419204fc973e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xcbc419204fc973e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xcbc419204fc973e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5bf656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c2000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807559 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x15919c10322b11df)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x15919c10322b11df)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x15919c10322b11df)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc62d656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc433d12020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807589 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6c39137e94257eee)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6c39137e94257eee)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6c39137e94257eee)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc55d656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4256ce000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807587 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xc48995b05e59acd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xc48995b05e59acd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xc48995b05e59acd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc646656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205ea020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807568 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2c02f9b928c6c87a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2c02f9b928c6c87a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2c02f9b928c6c87a)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5ef656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc43428e000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807552 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6769e83f37f65ec2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6769e83f37f65ec2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6769e83f37f65ec2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc653656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc433d82000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807539 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x22df9933b8a7465f)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x22df9933b8a7465f)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x22df9933b8a7465f)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5df656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426aa2000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807322 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x5c4fdf1debd0ed08)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x5c4fdf1debd0ed08)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x5c4fdf1debd0ed08)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5cd656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42811a000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807551 [runnable]:
math/rand.Int63(0x5d7680c74ece880d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221
github.com/klauspost/reedsolomon.fillRandom(0xc647656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205ea060)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807548 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x436d2bb151484638)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x436d2bb151484638)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x436d2bb151484638)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e0656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426418020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807547 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x7a75568d9cbdf78e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x7a75568d9cbdf78e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x7a75568d9cbdf78e)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5c7656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e60a0)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807564 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x79288fbd265b6d8b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x79288fbd265b6d8b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x79288fbd265b6d8b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc636656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4264760a0)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807328 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x79010024a5b47729)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x79010024a5b47729)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x79010024a5b47729)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc53e656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426aa2040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807585 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1ec3234221650a3b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1ec3234221650a3b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1ec3234221650a3b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5d2656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426476040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807570 [runnable]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x4aaed0d951ecf3cd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x4aaed0d951ecf3cd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x4aaed0d951ecf3cd)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5c3656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42027a040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807567 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x510105d8369d70ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x510105d8369d70ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x510105d8369d70ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc593656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc43428e040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807324 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1ec44fcf4e58b6c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1ec44fcf4e58b6c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1ec44fcf4e58b6c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc594656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42811a040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807542 [runnable]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x4c0a13a777060055)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x4c0a13a777060055)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x4c0a13a777060055)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc56b656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e6060)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807540 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x50f0b4f74db818e1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x50f0b4f74db818e1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x50f0b4f74db818e1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc571656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c2020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807544 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6e71d3c803b59c87)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6e71d3c803b59c87)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6e71d3c803b59c87)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc625656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42571a020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807557 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x373aa81260503dcb)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x373aa81260503dcb)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x373aa81260503dcb)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc564656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426418000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807584 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x10f2b20a88c0ef68)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x10f2b20a88c0ef68)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x10f2b20a88c0ef68)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc569656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc420446000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807545 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x27b8737c8da25ef2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x27b8737c8da25ef2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x27b8737c8da25ef2)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e9656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42571a040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807583 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x45c2c282d691b715)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x45c2c282d691b715)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x45c2c282d691b715)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc568656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42053e000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807578 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x15becb39b76a6145)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x15becb39b76a6145)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x15becb39b76a6145)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc55c656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c2040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807326 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x28a632bff48b7388)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x28a632bff48b7388)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x28a632bff48b7388)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc65a656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426a6a020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807556 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0xf08b224e88f395d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xf08b224e88f395d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xf08b224e88f395d)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc599656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205de000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807538 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x2aac23b8d05b7db4)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x2aac23b8d05b7db4)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x2aac23b8d05b7db4)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5eb656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426a52000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807549 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x74276df07ff91b46)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x74276df07ff91b46)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x74276df07ff91b46)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e7656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e6080)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807562 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6eaf62b6a1986ad5)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6eaf62b6a1986ad5)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6eaf62b6a1986ad5)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc629656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc420560000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807537 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6374f9a1a317d5ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6374f9a1a317d5ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6374f9a1a317d5ca)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5bc656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc42826e040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807573 [runnable]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x6bcd3fae742c7b04)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x6bcd3fae742c7b04)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x6bcd3fae742c7b04)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5f0656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4263e6020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807588 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x46ad5e7a7fcba084)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x46ad5e7a7fcba084)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x46ad5e7a7fcba084)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc634656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426a6a040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807558 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x754e5928ffde49ba)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x754e5928ffde49ba)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x754e5928ffde49ba)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc65e656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4342c6000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807541 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x3474365ab197a048)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x3474365ab197a048)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x3474365ab197a048)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5e4656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc433d82020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807550 [runnable]:
sync.runtime_canSpin(0x1, 0xe900000001)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/proc.go:4295 +0x6a
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:59 +0x148
math/rand.(*lockedSource).Int63(0xc42000e220, 0xc26164bb2dc04ce)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0xc26164bb2dc04ce)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0xc26164bb2dc04ce)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc679656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc426476060)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807586 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x4d08771636cb1c70)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x4d08771636cb1c70)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x4d08771636cb1c70)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5de656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205ea040)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807566 [semacquire]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x7313a4235fc0f2b1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x7313a4235fc0f2b1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x7313a4235fc0f2b1)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5f3656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc43428e020)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807321 [runnable]:
sync.runtime_Semacquire(0xc42000e224)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/runtime/sema.go:47 +0x30
sync.(*Mutex).Lock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:85 +0xd0
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1f0329cacb846566)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:293 +0x2d
math/rand.(*Rand).Int63(0xc42000e240, 0x1f0329cacb846566)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1f0329cacb846566)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc591656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc428126000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

goroutine 7807325 [runnable]:
sync.(*Mutex).Unlock(0xc42000e220)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/sync/mutex.go:102
math/rand.(*lockedSource).Int63(0xc42000e220, 0x1d8c7c9249145e4b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:295 +0x5c
math/rand.(*Rand).Int63(0xc42000e240, 0x1d8c7c9249145e4b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:64 +0x33
math/rand.Int63(0x1d8c7c9249145e4b)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/math/rand/rand.go:221 +0x2d
github.com/klauspost/reedsolomon.fillRandom(0xc5ec656000, 0x1000000, 0x1000000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:289 +0x37
github.com/klauspost/reedsolomon.benchmarkReconstructP.func1(0xc4205ea000)
	/home/cnn/go/src/github.com/klauspost/reedsolomon/reedsolomon_test.go:526 +0x1b3
testing.(*B).RunParallel.func1(0xc420534470, 0xc420534468, 0xc420534460, 0xc426a16280, 0xc433e9c0c0)
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:598 +0xc4
created by testing.(*B).RunParallel
	/home/cnn/.gimme/versions/go1.7.5.linux.amd64/src/testing/benchmark.go:599 +0x1a2

rax    0xca
rbx    0x5f3a50
rcx    0x458d33
rdx    0x0
rdi    0x5f4170
rsi    0x0
rbp    0x7ffe8c538ff0
rsp    0x7ffe8c538fa8
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x0
r13    0xc434228820
r14    0x43ac70
r15    0x587120
rip    0x458d31
rflags 0x286
cs     0x33
fs     0x0
gs     0x0
*** Test killed with quit: ran too long (10m0s).
FAIL	github.com/klauspost/reedsolomon	600.104s

There's a performance improved fork of this project

I'm debian pkg maintainer of your reedsolomon project.
It's got my attention that there's a fork of your project that claims big performance boost:

I asked the fork author to send the improvement patch to you upstream, but he/she seems kinda not interested in it.

I looked at two project and find there's much differences that beyond my ability to make such patches.
So maybe you're interested in those improvements and can take a look at the project? Thanks!

build have this error!

github.com/klauspost/reedsolomon

klauspost/reedsolomon/galois_amd64.s:146: unrecognized instruction "VINSERTI128"
klauspost/reedsolomon/galois_amd64.s:147: unrecognized instruction "VINSERTI128"
klauspost/reedsolomon/galois_amd64.s:159: unrecognized instruction "VPSRLQ"
klauspost/reedsolomon/galois_amd64.s:162: unrecognized instruction "VPSHUFB"
klauspost/reedsolomon/galois_amd64.s:163: unrecognized instruction "VPSHUFB"
klauspost/reedsolomon/galois_amd64.s:187: unrecognized instruction "VINSERTI128"
klauspost/reedsolomon/galois_amd64.s:188: unrecognized instruction "VINSERTI128"
klauspost/reedsolomon/galois_amd64.s:199: unrecognized instruction "VPSRLQ"
klauspost/reedsolomon/galois_amd64.s:202: unrecognized instruction "VPSHUFB"
klauspost/reedsolomon/galois_amd64.s:203: unrecognized instruction "VPSHUFB"
asm: asm: assembly of klauspost/reedsolomon/galois_amd64.s failed

Change sizes to uint64 and not int

At least the Join method needs to be changed, it forbids us from having a reconstructed file with more than 2^31 bytes in it.

Are there hidden implications to this change or is this straightforward ? (Not counting the fact that file parts have to be < 2^31 bytes too)

Fix grammar in error messages

s/sizes does not/sizes do not/
s/in and dst size does not match/in and dst size do not match/
s/in and out size does not match/in and out size do not match/

Request to enable tests for windows

This package should enable tests for windows using http://www.appveyor.com/ a sample appveyor.yml is here.

$ cat appveyor.yml
# Operating system (build VM template)
os: Visual Studio 2015

platform: x64

clone_folder: c:\gopath\src\github.com\klauspost\reedsolomon

# environment variables
environment:
  GOPATH: c:\gopath

# scripts that run after cloning repository
install:
  - '"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64'
  - set PATH=%GOPATH%\bin;c:\go\bin;%PATH%
  - rd C:\Go /s /q
  - appveyor DownloadFile https://storage.googleapis.com/golang/go1.6.windows-amd64.zip
  - 7z x go1.6.windows-amd64.zip -oC:\ >nul
  - go version
  - go env
  - cd %GOPATH%\src\github.com\klauspost\reedsolomon

# to run your custom scripts instead of automatic MSBuild
build_script:
  - go test .
  - go test -race .

# to disable automatic tests
test: off

# to disable deployment
deploy: off

Why return both bool and error from Verify()?

It seems a little burdensome to deal with both error and bool from Verify(). It seems to me to be an easy fix to make it just return an error. A correct verification would return nil.

Just curious if this something that is needed in its current form. And if you consider such a breaking change unacceptable because of some compatibility promise (or large active user base that depend on the current API)?

Issue with odd number of shards

Facing problem with reconstructing file while using odd number of data shards(5,2):
var dataShards = flag.Int("data", 5, "Number of shards to split the data into, must be below 257.")
var parShards = flag.Int("par", 2, "Number of parity shards")

My terminal output:

$ ./simple-encoder README.md
Opening README.md
File split into 7 data+parity shards with 287 bytes/shard.
Writing to README.md.0
Writing to README.md.1
Writing to README.md.2
Writing to README.md.3
Writing to README.md.4
Writing to README.md.5
Writing to README.md.6

$ rm README.md.0 README.md.1

$ mv README.md README.md.bkp
$ rm -rf README.md

$./simple-decoder README.md
Opening README.md.0
Error reading file open README.md.0: no such file or directory
Opening README.md.1
Error reading file open README.md.1: no such file or directory
Opening README.md.2
Opening README.md.3
Opening README.md.4
Opening README.md.5
Opening README.md.6
Verification failed. Reconstructing data
Writing data to README.md

$ sha1sum README.md README.md.bkp
a1376818a75bdb3daa925eb84787deaea08f70a3 README.md
16bcbf011764251da257a7ab39b7cdc02395748d README.md.bkp


Newly constructed files includes control characters "^@^@^@"

Please suggest how to solve this.

Example encoders might check for too large dataShards value

Hi @klauspost,
awesome library, thanks for developing and maintaining it.

This is a minor issue I noticed in the example encoders provided in the example folder of the project. It appears to be the case that the data shard argument is checked to be below 258 instead of below 257 as mentioned throughout various places in this project.

Concretely, I believe, the referenced lines below should check for >= 257 or > 256:

Furthermore, though, setting dataShards = 256 and parShards = 1 as per respective command-line flags yields the ErrMaxShardNum error. It looks like actually the sum of dataShards and parShards should be checked to stay below 2^8 = 256, instead of solely enforcing dataShards to stay below this bound.

I might be missing crucial information here, though, and have not spent tremendous amount of further research on this issue, as I believe it to be a rather minor issue. Please let me know if I am missing something here.

Unavoidable allocation in Reconstruct

My understanding of the Reconstruct function is this: For missing shards, the caller passes nil. Inside Reconstruct, a new slice is allocated for each missing shard, and the reconstructed data is copied into it.

The problem is that there is no way to reuse existing memory here; Reconstruct will always allocate a new slice for each missing shard. This can get costly if you are missing many pieces and making frequent calls to Reconstruct. In Sia, we store files using a 0.5MB shard size and only download the minimum number of shards. Since our code is 8 data/24 parity, that means Reconstruct will allocate 24*0.5 = 12MB for each 4MB we download.

Is there any way to avoid these allocations? Passing a pre-allocated slice doesn't work because Reconstruct has no way to distinguish it from real data, but perhaps we could pass a slice with len == 0 and cap == shardSize. I can PR this if you feel it's a good approach.

Optimization for power

Hi @klauspost ,

I have been trying to understand the process for creating optimized go code for power(ppc64le) in here "https://github.com/klauspost/reedsolomon" similar to the optimization done for amd(galois_amd64.go) and arm(galois_arm64.go).

My understanding is below for example on "amd64"
The routines that have been optimized for amd64 and are present in " galois_amd64.go" in klauspost repo.
o galMulSlice
o galMulSliceXor
o sliceXor
The un-optimized implementation of the above routines is in "galois_noasm.go " and this would be the one that is getting invoked for Power currently. ?

To implement the equivalent power assembly - which intel equivalent needs to be considered - AVX2 or SSSE3 ?

Huge memory Cost

I am benchmarking the performance of this library, so I notice that it uses huge amount of memory, the benchmark program is the following.
In the code, n is the number of dataChunks + parityChunks, k is the number of data chunks. I used n=4, k=3, and 64GB is not large enough to run through the test.

func encode(coder reedsolomon.Encoder, n, k, chunkSize int) (shards [][]byte) {
	var data = make([]byte, chunkSize*k)
	rand.Read(data)

	shards, _ = coder.Split(data)
	_ = coder.Encode(shards)
	ok, _ := coder.Verify(shards)
	if !ok {
		log.Fatal("error")
	}
	return shards
}

func loseData(n, k int, shards [][]byte) {

	if n-k == 1 {
		shards[rand.Intn(n)] = nil
	} else {
		for i := 0; i < n-k; i++ {
			if shards[rand.Intn(n)] == nil {
				i --;
			} else {
				shards[rand.Intn(n)] = nil
			}
		}
	}
}

func decode(coder reedsolomon.Encoder, n, k int, shards [][]byte) (fixedShards [][]byte) {
	_ = coder.Reconstruct(shards)
	return shards
}


func Benchmark(n, k int, thrptMap map[int]float64, mtx *sync.Mutex, wg *sync.WaitGroup) {
	defer (*wg).Done()
	RUNTIME := 2
	rand.Seed(time.Now().UnixNano())

	fmt.Println("WithMaxGoroutines(1) WithCauchyMatrix()")
	coder, _ := reedsolomon.New(n-k, k, reedsolomon.WithMaxGoroutines(1), reedsolomon.WithCauchyMatrix())

	for chunkSize := 16; chunkSize < int(math.Pow(2, 30)); chunkSize *= 8 {
		encodedData := encode(coder, n, k, chunkSize)

		startTs := time.Now()
		turnAroundBytes := 0

		for int(time.Since(startTs).Seconds()) < RUNTIME {
			loseData(n, k, encodedData)
			decode(coder, n, k, encodedData)
			turnAroundBytes += chunkSize * k
		}
		thrpt := float64(turnAroundBytes)/1000000/float64(time.Since(startTs).Nanoseconds()/1000000000)

		mtx.Lock()
		if v, ok := thrptMap[chunkSize]; ok{
			thrptMap[chunkSize] = v + thrpt
		}else{
			thrptMap[chunkSize] = thrpt
		}
		mtx.Unlock()

		//fmt.Printf("%d\t%d\t%d\t%.4f\n", n, k, chunkSize, thrpt)
	}
}

func BenchmarkParallel(n, k, nThreads int){
	fmt.Println(n, k, nThreads)
	thrptMap := make(map[int]float64)
	mtx := &sync.Mutex{}
	var wg = sync.WaitGroup{}

	for i:=0; i<nThreads; i++{
		wg.Add(1)
		go Benchmark(4, 3, thrptMap, mtx, &wg)
	}
	wg.Wait()

	keys := make([]int, 0)
	for k, _ := range thrptMap {
		keys = append(keys, k)
	}
	sort.Ints(keys)

	for _, k := range keys {
		fmt.Printf("%d \t %.4f\n", k, thrptMap[k])
	}
}

matrix is singular error

Hi, I am using the example's files to test the code.
When I take a 100MB file with 250 data shards and 125 pairity shards and then delete shards 0-49 and 270-279 reconstruction fails with matrix is singular error. Is this suppose to happen? Cause I thought I can lose up to 125 shards and still recover the data.
What am I missing?
Thanks, Amit

Allow 0 parity shards

Although it doesn't allow a way to reconstruct the data, I think it should be allowed to pass 0 parity shards to the code.
First, it doesn't "harm" the code, it would still work, but will require that every dataShard is still intact - which in my opinion is ok.
Second, right now if a program use the library, and for some "input type" it should use parity and for some it shouldn't, it required from the programmer to write entire section dealing with 0 parity which would do the same as the library.

Am I missing something basic about the library or is it simple as removing the "if" in file reedsolomon.go(line 107)

how to deal with partially overwriting

I'm check examples but have no luck.
I have for example 4Mb of data and want to use this package to split it for 1Mb data blocks and add parity to it. After that i need to overwrite this 4Mb of data from 2Mb and to 3Mb (1Mb of data).
I know that i can read back 4Mb of data, modify it and write again, but this is significant overhead in case of massive read/write. How to deal in this case and not re-read again all data block?

File size not equal after decoding on Mac OS X

Hi @klauspost

I test the examples on my macbook, and the new file after decoding is bigger than the original. About 1~3 bytes bigger. Then I test the same case on Linux, the size is equal.

Maybe your asm codes are not compatible for OSX?

^@^@^@ added to the end of the file

Hi,

I recently downloaded this library and started to test the examples attached in the examples/ folder.

When decoding a random text file I experienced that a string ^@^@^@ is added to the end of the decoded file.

Steps to reproduce:

  1. Create a text file with some content. (Mark! Several newlines is used between the text in this file)

1

  1. Use "simple-encoder" to encode the file in to 6 shards (default 4+2):

2

  1. Delete the original file and 2 of 6 encoded shards

3

  1. Decode the remaining shards with "simple-decoder" (default 4+2)

4

Expected Result:
File is recovered in the original state

Actual Result:
The string ^@^@^@ is added on separate linje in the end of the file.
AR

Additional info:
When using another example text with more content and less newlines this does not happen.

This picture is from when using the exact same method to reproduce, but different content:
ER

not scalable well with multiple go routines

I restrict each coder to use one goroutine and I launch 8 goroutines for decoding different stuff, but the performance does not scale well. Here are my test cases, 3 data chunk, 1 parity chunk, chunk size 128B - 16K.

Using aws c5.2xlarge (AVX512 support), only test decoding.

If chunk size is 128 Byte, single thread throughput is 635 MB/s, while 8 goroutines give around 921 MB/s (aggregated throughput).

If chunk size is 1024 Byte, single thread throughput is around 3704 MB/s, while 8 goroutines give around 5730 MB/s (aggregated throughput).

If chunk size is 16384 Byte, single thread throughput is around 9370 MB/s, while 8 goroutines give around 17466 MB/s (aggregated throughput).

feature request - Implement cauchy matrix as enhancement over vandermonde

Taking some inputs from Intel's ISAL library.

/**
 * @brief Generate a matrix of coefficients to be used for encoding.
 *
 * Vandermonde matrix example of encoding coefficients where high portion of
 * matrix is identity matrix I and lower portion is constructed as 2^{i*(j-k+1)}
 * i:{0,k-1} j:{k,m-1}. Commonly used method for choosing coefficients in
 * erasure encoding but does not guarantee invertable for every sub matrix.  For
 * large k it is possible to find cases where the decode matrix chosen from
 * sources and parity not in erasure are not invertable. Users may want to
 * adjust for k > 5.
 *
 * @param a  [mxk] array to hold coefficients
 * @param m  number of rows in matrix corresponding to srcs + parity.
 * @param k  number of columns in matrix corresponding to srcs.
 * @returns  none
 */

void gf_gen_rs_matrix(unsigned char *a, int m, int k);

Decode Shards

hello there, can you please help me to get original data from encoded shards ?

How to get this done ?

question / feature request: usage from python?

I would love to use this library from my python application.
I am not really sure what would be the best way, as i never used golang before.

One possible method could be using zeromq as interface -- go binding is here: https://github.com/pebbe/zmq4

This could make really good networked/ipc api, which might be used by all other platforms too.
Or is there a better way to use this from python?

recover error

go 1.8.1
I run examples/stream-decoder.go
I delete file kubernetes.tar.gz.5

-rw-r--r-- 1 root root 1521233 6月 5 10:49 kubernetes.tar.gz.0
-rw-r--r-- 1 root root 1521233 6月 5 10:49 kubernetes.tar.gz.1
-rw-r--r-- 1 root root 1521233 6月 5 10:49 kubernetes.tar.gz.2
-rw-r--r-- 1 root root 1521233 6月 5 10:49 kubernetes.tar.gz.3
-rw-r--r-- 1 root root 1521233 6月 5 10:49 kubernetes.tar.gz.4

Creating /mnt/download/kubernetes.tar.gz.5
Error: open /mnt/download/mnt/download/kubernetes.tar.gz.5: no such file or directory

dedup/erasure/compress

In which combination in case of fast storage/cheap storage dedup/erasure/compress can be used?

As i understand in case of erasure using dedup is problem?

Use of library for 20 data bits

I have 20 data bits (not bytes) and a total of 60 bits that can be used for redundancy.
I should be able to correct 5 errors.

How can I use this library for bits - is this even possible?

Avoidable memory allocatons in Split

Split divided the data into DataShards blocks and allocates all parity blocks. The allocation is not necessary if the capacity of the passed slice is large enough to hold some/all parity blocks.

This is currently a performance problem at minio's erasure coding (XL) backend.

On codeSomeShardsP

	if runtime.GOMAXPROCS(0) > 1 && len(inputs[0]) > minSplitSize {
		r.codeSomeShardsP(matrixRows, inputs, outputs, outputCount, byteCount)
		return
	}

I think we need some options to disable(or tune) this, under heavy work, more computational goroutines won't bring performance boosts, or even worse.

how do you think about this?

use intel isa-l or avx2 instructions

Thanks for this library, do you try to compare this package with intel isa-l (it already provides fast calculation and as i know erasure coding).
Also as i understand isa-l use non only sse3, but avx/avx2 if it available. Do you plan to support this optimization?

Compatibility with other ReedSolomon Data

I'm not sure how the sharding process work, but I have no idea what the shards really are.

I though they were the bytes itself, but if I ran against a RS(255,239) generated parity, it doesnt work.

How that library parameters correlate to normal RS Libraries for CCSDS, DVB-S and others?

Quick example: DVB-S uses RS(204,188). This is a example payload:

B8 1C 09 08 34 30 B8 A3 DA 60 29 C4 3B F7 6A EB F5 5F E9 BC 88 1B 8F 33 E2 EE E4 E0 9A 83 5F 0B C1 39 8D 92 2B 06 E0 B6 1A 4B EB 99 DC 54 C8 FB B4 1F B8 41 91 85 65 1F 5E 43 C5 88 9D 31 B1 54 EE 50 91 67 E0 7A 41 21 79 B2 EA 51 82 1A F3 A1 29 C4 F4 9A 3B 5C 9B CB A7 44 2C 67 E9 52 77 FD CF 91 5E 98 38 AF 6C 1C 97 B4 8E 44 DA 65 22 A1 30 39 5F 68 3C 8F 74 DC C5 35 61 40 B8 7C 6E F6 99 C8 AB 4C 04 57 E6 0F AB DE 07 3B ED 67 90 AE 9C 18 B7 AC 4E 16 5B 8A 26 C3 29 75 08 C1 CD 7B AF 1B E2 59 4D D1 AC E5 EA 5C 7D C9 0C B6 2B B4 8F 88 3B AC 53 79 0F B6 21 B4 C5 BA 3D A4 91 C0 B3 89 D0 2C 40 8D CB C0 05 5B 95 05

The last 16 bytes are the parity, first 188 are data.

SIGILL: illegal instruction on old AMD Athlon(tm) II X2 245

First, thanks for this fast library.
It worked fine on my Intel CPU but crashed on my old AMD CPU.

I know it is old, just in case similar processor also have this issue.

This is error message from go test

$ go test ./...
SIGILL: illegal instruction
PC=0x453ac1

goroutine 26 [running]:
runtime: unknown argument frame size for github.com/klauspost/reedsolomon.galMulSSE3 called from 0x443127 [github.com/klauspost/reedsolomon.galMulSlice]
github.com/klauspost/reedsolomon.galMulSSE3()
    /home/ibk/pathgo/src/github.com/klauspost/reedsolomon/galois_amd64.s:57 +0x31 fp=0x7fdce8e87c50 sp=0x7fdce8e87c48
github.com/klauspost/reedsolomon.galMulSlice(0x4ff919, 0xc208026040, 0x12, 0x12, 0xc208026060, 0x12, 0x12)
    /home/ibk/pathgo/src/github.com/klauspost/reedsolomon/galois_amd64.go:37 +0x157 fp=0x7fdce8e87e48 sp=0x7fdce8e87c50
github.com/klauspost/reedsolomon.TestGalois(0xc20804e3f0)
    /home/ibk/pathgo/src/github.com/klauspost/reedsolomon/galois_test.go:134 +0x3d1 fp=0x7fdce8e87f68 sp=0x7fdce8e87e48
testing.tRunner(0xc20804e3f0, 0x648f70)
    /home/ibk/go/src/pkg/testing/testing.go:422 +0x8b fp=0x7fdce8e87f98 sp=0x7fdce8e87f68
runtime.goexit()
    /home/ibk/go/src/pkg/runtime/proc.c:1445 fp=0x7fdce8e87fa0 sp=0x7fdce8e87f98
created by testing.RunTests
    /home/ibk/go/src/pkg/testing/testing.go:504 +0x8db

goroutine 16 [chan receive]:
testing.RunTests(0x5a8500, 0x648ee0, 0x12, 0x12, 0x1)
    /home/ibk/go/src/pkg/testing/testing.go:505 +0x923
testing.Main(0x5a8500, 0x648ee0, 0x12, 0x12, 0x648a20, 0x10, 0x10, 0x647d80, 0x3, 0x3)
    /home/ibk/go/src/pkg/testing/testing.go:435 +0x84
main.main()
    github.com/klauspost/reedsolomon/_test/_testmain.go:119 +0x9c

goroutine 19 [finalizer wait]:
runtime.park(0x413290, 0x64d590, 0x64c0a9)
    /home/ibk/go/src/pkg/runtime/proc.c:1369 +0x89
runtime.parkunlock(0x64d590, 0x64c0a9)
    /home/ibk/go/src/pkg/runtime/proc.c:1385 +0x3b
runfinq()
    /home/ibk/go/src/pkg/runtime/mgc0.c:2644 +0xcf
runtime.goexit()
    /home/ibk/go/src/pkg/runtime/proc.c:1445

rax     0x10
rbx     0xf
rcx     0x8000001b00000005
rdx     0xc208026060
rdi     0x7fdce8e87e40
rsi     0xc208026040
rbp     0x10
rsp     0x7fdce8e87c48
r8      0x19
r9      0x12
r10     0x12
r11     0xc208026060
r12     0xc208026040
r13     0xc2080420f0
r14     0x2
r15     0xc2080004e0
rip     0x453ac1
rflags  0x10202
cs      0x33
fs      0x0
gs      0x0
FAIL    github.com/klauspost/reedsolomon    0.230s

And this is my cpuinfo

$ cat /proc/cpuinfo 
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 6
model name  : AMD Athlon(tm) II X2 245 Processor
stepping    : 2
microcode   : 0x10000b7
cpu MHz     : 800.000
cache size  : 1024 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt hw_pstate npt lbrv svm_lock nrip_save vmmcall
bogomips    : 5826.11
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

processor   : 1
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 6
model name  : AMD Athlon(tm) II X2 245 Processor
stepping    : 2
microcode   : 0x10000b7
cpu MHz     : 1700.000
cache size  : 1024 KB
physical id : 0
siblings    : 2
core id     : 1
cpu cores   : 2
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt hw_pstate npt lbrv svm_lock nrip_save vmmcall
bogomips    : 5826.11
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

Misleading API WithMinSplitSize?

// MinSplitSize Is the minimum encoding size in bytes per goroutine.
// See WithMaxGoroutines on how jobs are split.
// If n <= 0, it is ignored.
func WithMinSplitSize(n int) Option {
	return func(o *options) {
		if n > 0 {
			o.maxGoroutines = n
		}
	}
}

This code is similar to WithMaxGoroutines is this correct? Isn't this supposed to be for minSplitSize?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.