func BenchmarkWrite512MiBRand(b *testing.B) {
	testDir := build.TempDir("persist", b.Name())
	err := os.MkdirAll(testDir, 0700)
	if err != nil {
		b.Fatal(err)
	}
	b.SetBytes(1 << 29)
	filename := filepath.Join(testDir, "512MiB.file")
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		f, err := os.Create(filename)
		if err != nil {
			b.Fatal(err)
		}
		for i := 0; i < 1<<7; i++ {
			b.StopTimer()
			data := fastrand.Bytes(1 << 22)
			offset := int64(fastrand.Intn(1 << 6))
			offset *= 1 << 22
			b.StartTimer()
			_, err = f.WriteAt(data, offset)
			if err != nil {
				b.Fatal(err)
			}
			err = f.Sync()
			if err != nil {
				b.Fatal(err)
			}
		}
		err = f.Close()
		if err != nil {
			b.Fatal(err)
		}
	}
	err = os.Remove(filename)
	if err != nil {
		b.Fatal(err)
	}
}
BenchmarkWrite512MiBRand checks how long it takes to write 512MiB randomly.
package persist
import (
	"os"
	"path/filepath"
	"testing"
	"github.com/NebulousLabs/Sia/build"
	"github.com/NebulousLabs/fastrand"
)
func BenchmarkWrite512MiB(b *testing.B) {
	testDir := build.TempDir("persist", b.Name())
	err := os.MkdirAll(testDir, 0700)
	if err != nil {
		b.Fatal(err)
	}
	b.SetBytes(1 << 29)
	filename := filepath.Join(testDir, "512MiB.file")
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		f, err := os.Create(filename)
		if err != nil {
			b.Fatal(err)
		}
		for i := 0; i < 1<<7; i++ {
			b.StopTimer()
			data := fastrand.Bytes(1 << 22)
			b.StartTimer()
			_, err = f.Write(data)
			if err != nil {
				b.Fatal(err)
			}
			err = f.Sync()
			if err != nil {
				b.Fatal(err)
			}
		}
		err = f.Close()
		if err != nil {
			b.Fatal(err)
		}
	}
	err = os.Remove(filename)
	if err != nil {
		b.Fatal(err)
	}
}
func BenchmarkWrite512MiBTrunc(b *testing.B) {
	testDir := build.TempDir("persist", b.Name())
	err := os.MkdirAll(testDir, 0700)
	if err != nil {
		b.Fatal(err)
	}
	b.SetBytes(1 << 29)
	filename := filepath.Join(testDir, "512MiB.file")
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		f, err := os.Create(filename)
		if err != nil {
			b.Fatal(err)
		}
		for i := 0; i < 1<<7; i++ {
			err = f.Truncate(int64((i + 1) * 1 << 22))
			if err != nil {
				b.Fatal(err)
			}
			err = f.Sync()
			if err != nil {
				b.Fatal(err)
			}
		}
		err = f.Close()
		if err != nil {
			b.Fatal(err)
		}
	}
	err = os.Remove(filename)
	if err != nil {
		b.Fatal(err)
	}
}