Skip to content

Commit 228a3af

Browse files
committed
update interval over time
Signed-off-by: FingerLeader <[email protected]>
1 parent 041cd1e commit 228a3af

File tree

1 file changed

+52
-13
lines changed

1 file changed

+52
-13
lines changed

main.go

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,39 @@ func init() {
2121
flag.Parse()
2222
}
2323

24+
func linearGrow(data []byte, interval time.Duration, length int, startTime time.Time, timeLine int) {
25+
fmt.Println(interval)
26+
sysPageSize := os.Getpagesize()
27+
minPageQuantity := int(time.Millisecond * 100 / interval)
28+
pageCount := 0
29+
resLength := length
30+
for i := 0; i < length; i += sysPageSize {
31+
data[i] = 1
32+
if minPageQuantity > 0 {
33+
pageCount += 1
34+
acculatedPage := pageCount % minPageQuantity
35+
if acculatedPage == 0 {
36+
time.Sleep(time.Duration(minPageQuantity) * interval)
37+
resLength = length - i
38+
interval = updateInterval(timeLine - int(time.Since(startTime)), resLength)
39+
}
40+
} else {
41+
time.Sleep(interval)
42+
}
43+
}
44+
45+
resTime := time.Duration(resLength / sysPageSize * int(interval))
46+
if resTime > 100 * time.Millisecond {
47+
time.Sleep(resTime)
48+
}
49+
}
50+
51+
func updateInterval(timeLine int, length int) time.Duration {
52+
sysPageSize := os.Getpagesize()
53+
interval := time.Duration(timeLine) / time.Duration(length / sysPageSize)
54+
return interval
55+
}
56+
2457
func main() {
2558
memSize = strings.ToUpper(memSize)
2659
length, err := strconv.Atoi(memSize[:len(memSize)-2])
@@ -45,9 +78,17 @@ func main() {
4578
// TODO
4679
print(err)
4780
}
48-
// timeUnit := growthTime[len(growthTime)]
49-
// if timeUnit =
50-
timeLine = int(time.Second) * timeLine
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+
5192

5293
data, err := syscall.Mmap(-1, 0, length, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_PRIVATE|syscall.MAP_ANONYMOUS)
5394
if err != nil {
@@ -56,17 +97,15 @@ func main() {
5697
}
5798

5899
sysPageSize := os.Getpagesize()
59-
duration := time.Duration(timeLine) / time.Duration(length / sysPageSize)
60-
fmt.Println(duration, length/sysPageSize)
61-
fmt.Println(time.Now())
62-
for i := 0; i < length; i += sysPageSize {
63-
// fmt.Println(time.Now())
64-
data[i] = 1
65-
time.Sleep(duration)
100+
interval := time.Duration(timeLine) / time.Duration(length / sysPageSize)
101+
102+
if interval > time.Nanosecond {
103+
linearGrow(data, interval, length, time.Now(), timeLine)
104+
} else {
105+
for i := 0; i < length; i += sysPageSize {
106+
data[i] = 1
107+
}
66108
}
67-
fmt.Println(time.Now())
68-
time.Sleep(time.Microsecond * 1)
69-
fmt.Println(time.Now())
70109
for {
71110
time.Sleep(time.Second * 2)
72111
}

0 commit comments

Comments
 (0)