@@ -4,49 +4,69 @@ import (
4
4
"flag"
5
5
"fmt"
6
6
"os"
7
- "runtime"
8
7
"strconv"
8
+ "strings"
9
9
"syscall"
10
10
"time"
11
11
)
12
12
13
13
var (
14
- memSize string
14
+ memSize string
15
+ growthTime string
15
16
)
16
17
17
- func bToMb (b uint64 ) uint64 {
18
- return b / 1024 / 1024
19
- }
20
-
21
- func PrintMemUsage () {
22
- var m runtime.MemStats
23
- runtime .ReadMemStats (& m )
24
- fmt .Printf ("Alloc = %v MiB" , bToMb (m .Alloc ))
25
- fmt .Printf ("\t TotalAlloc = %v MiB" , bToMb (m .TotalAlloc ))
26
- fmt .Printf ("\t Sys = %v MiB" , bToMb (m .Sys ))
27
- fmt .Printf ("\t NumGC = %v\n " , m .NumGC )
28
- }
29
-
30
18
func init () {
31
19
flag .StringVar (& memSize , "size" , "0KB" , "" )
20
+ flag .StringVar (& growthTime , "time" , "0s" , "" )
32
21
flag .Parse ()
33
22
}
34
23
35
24
func main () {
36
- length , err := strconv .Atoi (memSize )
25
+ memSize = strings .ToUpper (memSize )
26
+ length , err := strconv .Atoi (memSize [:len (memSize )- 2 ])
37
27
if err != nil {
38
28
// TODO
39
29
print (err )
40
30
}
31
+ sizeUnit := memSize [len (memSize )- 2 :]
32
+ if sizeUnit == "KB" {
33
+ length *= 1024
34
+ } else if sizeUnit == "MB" {
35
+ length *= 1024 * 1024
36
+ } else if sizeUnit == "GB" {
37
+ length *= 1024 * 1024 * 1024
38
+ } else {
39
+ // TODO
40
+ }
41
41
42
- data , err := syscall .Mmap (- 1 , 0 , length * 1024 * 1024 * 1024 , syscall .PROT_READ | syscall .PROT_WRITE , syscall .MAP_PRIVATE | syscall .MAP_ANONYMOUS )
42
+ growthTime = strings .ToLower (growthTime )
43
+ timeLine , err := strconv .Atoi (growthTime [:len (growthTime )- 1 ])
43
44
if err != nil {
44
45
// TODO
45
46
print (err )
46
47
}
47
- for i := 0 ; i < len (data ); i += os .Getpagesize () {
48
+ // timeUnit := growthTime[len(growthTime)]
49
+ // if timeUnit =
50
+ timeLine = int (time .Second ) * timeLine
51
+
52
+ data , err := syscall .Mmap (- 1 , 0 , length , syscall .PROT_READ | syscall .PROT_WRITE , syscall .MAP_PRIVATE | syscall .MAP_ANONYMOUS )
53
+ if err != nil {
54
+ // TODO
55
+ print (err )
56
+ }
57
+
58
+ 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())
48
64
data [i ] = 1
49
- }
65
+ time .Sleep (duration )
66
+ }
67
+ fmt .Println (time .Now ())
68
+ time .Sleep (time .Microsecond * 1 )
69
+ fmt .Println (time .Now ())
50
70
for {
51
71
time .Sleep (time .Second * 2 )
52
72
}
0 commit comments