Skip to content

Commit 041cd1e

Browse files
committed
basic functions
Signed-off-by: FingerLeader <[email protected]>
1 parent d28448f commit 041cd1e

File tree

1 file changed

+39
-19
lines changed

1 file changed

+39
-19
lines changed

main.go

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,69 @@ import (
44
"flag"
55
"fmt"
66
"os"
7-
"runtime"
87
"strconv"
8+
"strings"
99
"syscall"
1010
"time"
1111
)
1212

1313
var (
14-
memSize string
14+
memSize string
15+
growthTime string
1516
)
1617

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("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
26-
fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
27-
fmt.Printf("\tNumGC = %v\n", m.NumGC)
28-
}
29-
3018
func init() {
3119
flag.StringVar(&memSize, "size", "0KB", "")
20+
flag.StringVar(&growthTime, "time", "0s", "")
3221
flag.Parse()
3322
}
3423

3524
func main() {
36-
length, err := strconv.Atoi(memSize)
25+
memSize = strings.ToUpper(memSize)
26+
length, err := strconv.Atoi(memSize[:len(memSize)-2])
3727
if err != nil {
3828
// TODO
3929
print(err)
4030
}
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+
}
4141

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])
4344
if err != nil {
4445
// TODO
4546
print(err)
4647
}
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())
4864
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())
5070
for {
5171
time.Sleep(time.Second * 2)
5272
}

0 commit comments

Comments
 (0)