func sanityCheck() bool { r_devnum, err := fsbench.GetDevnumForFile(*rootDir) if err != nil { fmt.Printf("Unable to get device number for: %s\t%s\n", *rootDir, err) return false } s_devnum, err := fsbench.GetDevnumForFile(*subdDir) if err != nil { fmt.Printf("Unable to get device number for: %s\t%s\n", *subdDir, err) return false } if r_devnum != s_devnum { fmt.Printf("rootDir and subdDir must be on the same file-system\n") return false } return true }
func sanityCheck() bool { r_devnum, err := fsbench.GetDevnumForFile(*rootDir) if err != nil { fmt.Fprintf(os.Stderr, "Unable to get device number for: %s\t%s\n", *rootDir, err) return false } subdDirPathname := path.Join(*rootDir, *subdDir) s_devnum, err := fsbench.GetDevnumForFile(subdDirPathname) if err != nil { fmt.Fprintf(os.Stderr, "Unable to get device number for: %s\t%s\n", subdDirPathname, err) return false } if r_devnum != s_devnum { fmt.Fprintf(os.Stderr, "rootDir and subdDir must be on the same file-system\n") return false } return true }
func getCachedFsSpeed(workingRootDir string, cacheDirname string) (bytesPerSecond, blocksPerSecond uint64, computed, ok bool) { bytesPerSecond = 0 blocksPerSecond = 0 devnum, err := fsbench.GetDevnumForFile(workingRootDir) if err != nil { fmt.Fprintf(os.Stderr, "Unable to get device number for: %s\t%s\n", workingRootDir, err) return 0, 0, false, false } fsbenchDir := path.Join(cacheDirname, "fsbench") if !createDirectory(fsbenchDir) { return 0, 0, false, false } cacheFilename := path.Join(fsbenchDir, strconv.FormatUint(devnum, 16)) file, err := os.Open(cacheFilename) if err == nil { n, err := fmt.Fscanf(file, "%d %d", &bytesPerSecond, &blocksPerSecond) file.Close() if n == 2 || err == nil { return bytesPerSecond, blocksPerSecond, false, true } } bytesPerSecond, blocksPerSecond, err = fsbench.GetReadSpeed(workingRootDir) if err != nil { fmt.Fprintf(os.Stderr, "Unable to measure read speed\t%s\n", err) return 0, 0, true, false } file, err = os.Create(cacheFilename) if err != nil { fmt.Fprintf(os.Stderr, "Unable to open: %s for write\t%s\n", cacheFilename, err) return 0, 0, true, false } fmt.Fprintf(file, "%d %d\n", bytesPerSecond, blocksPerSecond) file.Close() return bytesPerSecond, blocksPerSecond, true, true }