Skip to content

Commit afc8a0d

Browse files
committed
use libraries to parse parameters
Signed-off-by: FingerLeader <[email protected]>
1 parent 228a3af commit afc8a0d

File tree

1 file changed

+14
-38
lines changed

1 file changed

+14
-38
lines changed

main.go

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ import (
44
"flag"
55
"fmt"
66
"os"
7-
"strconv"
8-
"strings"
97
"syscall"
108
"time"
9+
humanize "github.com/dustin/go-humanize"
1110
)
1211

1312
var (
@@ -21,91 +20,68 @@ func init() {
2120
flag.Parse()
2221
}
2322

24-
func linearGrow(data []byte, interval time.Duration, length int, startTime time.Time, timeLine int) {
23+
func linearGrow(data []byte, interval time.Duration, length uint64, startTime time.Time, timeLine time.Duration) {
2524
fmt.Println(interval)
2625
sysPageSize := os.Getpagesize()
2726
minPageQuantity := int(time.Millisecond * 100 / interval)
2827
pageCount := 0
2928
resLength := length
30-
for i := 0; i < length; i += sysPageSize {
29+
for i := 0; uint64(i) < length; i += sysPageSize {
3130
data[i] = 1
3231
if minPageQuantity > 0 {
3332
pageCount += 1
3433
acculatedPage := pageCount % minPageQuantity
3534
if acculatedPage == 0 {
3635
time.Sleep(time.Duration(minPageQuantity) * interval)
37-
resLength = length - i
38-
interval = updateInterval(timeLine - int(time.Since(startTime)), resLength)
36+
resLength = length - uint64(i)
37+
interval = updateInterval(timeLine - time.Since(startTime), resLength)
3938
}
4039
} else {
4140
time.Sleep(interval)
4241
}
4342
}
4443

45-
resTime := time.Duration(resLength / sysPageSize * int(interval))
44+
resTime := time.Duration(resLength / uint64(sysPageSize) * uint64(interval))
4645
if resTime > 100 * time.Millisecond {
4746
time.Sleep(resTime)
4847
}
4948
}
5049

51-
func updateInterval(timeLine int, length int) time.Duration {
52-
sysPageSize := os.Getpagesize()
50+
func updateInterval(timeLine time.Duration, length uint64) time.Duration {
51+
sysPageSize := uint64(os.Getpagesize())
5352
interval := time.Duration(timeLine) / time.Duration(length / sysPageSize)
5453
return interval
5554
}
5655

5756
func main() {
58-
memSize = strings.ToUpper(memSize)
59-
length, err := strconv.Atoi(memSize[:len(memSize)-2])
57+
length, err := humanize.ParseBytes(memSize)
6058
if err != nil {
6159
// TODO
6260
print(err)
6361
}
64-
sizeUnit := memSize[len(memSize)-2:]
65-
if sizeUnit == "KB" {
66-
length *= 1024
67-
} else if sizeUnit == "MB" {
68-
length *= 1024 * 1024
69-
} else if sizeUnit == "GB" {
70-
length *= 1024 * 1024 * 1024
71-
} else {
72-
// TODO
73-
}
7462

75-
growthTime = strings.ToLower(growthTime)
76-
timeLine, err := strconv.Atoi(growthTime[:len(growthTime)-1])
63+
timeLine, err := time.ParseDuration(growthTime)
7764
if err != nil {
7865
// TODO
79-
print(err)
8066
}
81-
timeUnit := growthTime[len(growthTime)-1:]
82-
if timeUnit == "s" {
83-
timeLine = int(time.Second) * timeLine
84-
} else if timeUnit == "m" {
85-
timeLine = int(time.Minute) * timeLine
86-
} else if timeUnit == "h" {
87-
timeLine = int(time.Hour) * timeLine
88-
} else {
89-
// TODO
90-
}
91-
9267

93-
data, err := syscall.Mmap(-1, 0, length, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_PRIVATE|syscall.MAP_ANONYMOUS)
68+
data, err := syscall.Mmap(-1, 0, int(length), syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_PRIVATE|syscall.MAP_ANONYMOUS)
9469
if err != nil {
9570
// TODO
9671
print(err)
9772
}
9873

9974
sysPageSize := os.Getpagesize()
100-
interval := time.Duration(timeLine) / time.Duration(length / sysPageSize)
75+
interval := time.Duration(timeLine) / time.Duration(length / uint64(sysPageSize))
10176

10277
if interval > time.Nanosecond {
10378
linearGrow(data, interval, length, time.Now(), timeLine)
10479
} else {
105-
for i := 0; i < length; i += sysPageSize {
80+
for i := 0; uint64(i) < length; i += sysPageSize {
10681
data[i] = 1
10782
}
10883
}
84+
10985
for {
11086
time.Sleep(time.Second * 2)
11187
}

0 commit comments

Comments
 (0)