podman

Форк
0
84 строки · 2.1 Кб
1
// +build aix
2

3
package perfstat
4

5
/*
6
#cgo LDFLAGS: -lperfstat
7

8
#include <libperfstat.h>
9
#include <string.h>
10
#include <stdlib.h>
11

12
#include "c_helpers.h"
13
*/
14
import "C"
15

16
import (
17
	"fmt"
18
	"unsafe"
19
)
20

21
func MemoryTotalStat() (*MemoryTotal, error) {
22
	var memory C.perfstat_memory_total_t
23

24
	rc := C.perfstat_memory_total(nil, &memory, C.sizeof_perfstat_memory_total_t, 1)
25
	if rc != 1 {
26
		return nil, fmt.Errorf("perfstat_memory_total() error")
27
	}
28
	m := perfstatmemorytotal2memorytotal(memory)
29
	return &m, nil
30
}
31

32
func MemoryPageStat() ([]MemoryPage, error) {
33
	var mempage *C.perfstat_memory_page_t
34
	var fps C.perfstat_psize_t
35

36
	numps := C.perfstat_memory_page(nil, nil, C.sizeof_perfstat_memory_page_t, 0)
37
	if numps < 1 {
38
		return nil, fmt.Errorf("perfstat_memory_page() error")
39
	}
40

41
	mp_len := C.sizeof_perfstat_memory_page_t * C.ulong(numps)
42
	mempage = (*C.perfstat_memory_page_t)(C.malloc(mp_len))
43
	defer C.free(unsafe.Pointer(mempage))
44
	fps.psize = C.FIRST_PSIZE
45
	r := C.perfstat_memory_page(&fps, mempage, C.sizeof_perfstat_memory_page_t, numps)
46
	if r < 1 {
47
		return nil, fmt.Errorf("perfstat_memory_page() error")
48
	}
49
	ps := make([]MemoryPage, r)
50
	for i := 0; i < int(r); i++ {
51
		p := C.get_memory_page_stat(mempage, C.int(i))
52
		if p != nil {
53
			ps[i] = perfstatmemorypage2memorypage(p)
54
		}
55
	}
56
	return ps, nil
57
}
58

59
func PagingSpaceStat() ([]PagingSpace, error) {
60
	var pspace *C.perfstat_pagingspace_t
61
	var fps C.perfstat_id_t
62

63
	numps := C.perfstat_pagingspace(nil, nil, C.sizeof_perfstat_pagingspace_t, 0)
64
	if numps <= 0 {
65
		return nil, fmt.Errorf("perfstat_pagingspace() error")
66
	}
67

68
	ps_len := C.sizeof_perfstat_pagingspace_t * C.ulong(numps)
69
	pspace = (*C.perfstat_pagingspace_t)(C.malloc(ps_len))
70
	defer C.free(unsafe.Pointer(pspace))
71
	C.strcpy(&fps.name[0], C.CString(C.FIRST_PAGINGSPACE))
72
	r := C.perfstat_pagingspace(&fps, pspace, C.sizeof_perfstat_pagingspace_t, numps)
73
	if r < 1 {
74
		return nil, fmt.Errorf("perfstat_pagingspace() error")
75
	}
76
	ps := make([]PagingSpace, r)
77
	for i := 0; i < int(r); i++ {
78
		p := C.get_pagingspace_stat(pspace, C.int(i))
79
		if p != nil {
80
			ps[i] = perfstatpagingspace2pagingspace(p)
81
		}
82
	}
83
	return ps, nil
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.