You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1019 B
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							54 lines
						
					
					
						
							1019 B
						
					
					
				
								package main
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"flag"
							 | 
						|
									"fmt"
							 | 
						|
									"math/rand"
							 | 
						|
									"os"
							 | 
						|
									"time"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								var (
							 | 
						|
									minSize   = flag.Int("minSize", 1024, "min file size")
							 | 
						|
									maxSize   = flag.Int("maxSize", 3*1024*1024, "max file size")
							 | 
						|
									fileCount = flag.Int("n", 1, "number of files to write")
							 | 
						|
									blockSize = flag.Int("blockSizeKB", 4, "write block size")
							 | 
						|
									toDir     = flag.String("dir", ".", "destination directory")
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func check(e error) {
							 | 
						|
									if e != nil {
							 | 
						|
										panic(e)
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func main() {
							 | 
						|
								
							 | 
						|
									flag.Parse()
							 | 
						|
								
							 | 
						|
									block := make([]byte, *blockSize*1024)
							 | 
						|
								
							 | 
						|
									for i := 0; i < *fileCount; i++ {
							 | 
						|
								
							 | 
						|
										f, err := os.Create(fmt.Sprintf("%s/file%05d", *toDir, i))
							 | 
						|
										check(err)
							 | 
						|
								
							 | 
						|
										fileSize := *minSize + rand.Intn(*maxSize-*minSize)
							 | 
						|
										startTime := time.Now()
							 | 
						|
								
							 | 
						|
										fmt.Printf("write %s %d bytes: ", f.Name(), fileSize)
							 | 
						|
								
							 | 
						|
										for x := 0; x < fileSize; {
							 | 
						|
											rand.Read(block)
							 | 
						|
											_, err = f.Write(block)
							 | 
						|
											check(err)
							 | 
						|
											x += len(block)
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										err = f.Close()
							 | 
						|
										check(err)
							 | 
						|
								
							 | 
						|
										fmt.Printf("%.02f MB/sec\n", float64(fileSize)*float64(time.Second)/float64(time.Now().Sub(startTime)*1024*1024))
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								}
							 |