mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 10:00:01 +08:00 
			
		
		
		
	 d9c388e2fe
			
		
	
	d9c388e2fe
	
	
	
		
			
			Instead of trying to write out own code to do basic process operations (e.g. checking if a PID is still running in a multi-OS friendly manner), use shirou/gopsutil, a multi-platform library that should abstract all the complexity away. Unlike our previous approach on Windows, this one should actually work. Signed-off-by: Matt Heon <mheon@redhat.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build aix
 | |
| 
 | |
| package perfstat
 | |
| 
 | |
| /*
 | |
| #cgo LDFLAGS: -lperfstat
 | |
| 
 | |
| #include <libperfstat.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #include "c_helpers.h"
 | |
| */
 | |
| import "C"
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"unsafe"
 | |
| )
 | |
| 
 | |
| func MemoryTotalStat() (*MemoryTotal, error) {
 | |
| 	var memory C.perfstat_memory_total_t
 | |
| 
 | |
| 	rc := C.perfstat_memory_total(nil, &memory, C.sizeof_perfstat_memory_total_t, 1)
 | |
| 	if rc != 1 {
 | |
| 		return nil, fmt.Errorf("perfstat_memory_total() error")
 | |
| 	}
 | |
| 	m := perfstatmemorytotal2memorytotal(memory)
 | |
| 	return &m, nil
 | |
| }
 | |
| 
 | |
| func MemoryPageStat() ([]MemoryPage, error) {
 | |
| 	var mempage *C.perfstat_memory_page_t
 | |
| 	var fps C.perfstat_psize_t
 | |
| 
 | |
| 	numps := C.perfstat_memory_page(nil, nil, C.sizeof_perfstat_memory_page_t, 0)
 | |
| 	if numps < 1 {
 | |
| 		return nil, fmt.Errorf("perfstat_memory_page() error")
 | |
| 	}
 | |
| 
 | |
| 	mp_len := C.sizeof_perfstat_memory_page_t * C.ulong(numps)
 | |
| 	mempage = (*C.perfstat_memory_page_t)(C.malloc(mp_len))
 | |
| 	defer C.free(unsafe.Pointer(mempage))
 | |
| 	fps.psize = C.FIRST_PSIZE
 | |
| 	r := C.perfstat_memory_page(&fps, mempage, C.sizeof_perfstat_memory_page_t, numps)
 | |
| 	if r < 1 {
 | |
| 		return nil, fmt.Errorf("perfstat_memory_page() error")
 | |
| 	}
 | |
| 	ps := make([]MemoryPage, r)
 | |
| 	for i := 0; i < int(r); i++ {
 | |
| 		p := C.get_memory_page_stat(mempage, C.int(i))
 | |
| 		if p != nil {
 | |
| 			ps[i] = perfstatmemorypage2memorypage(p)
 | |
| 		}
 | |
| 	}
 | |
| 	return ps, nil
 | |
| }
 | |
| 
 | |
| func PagingSpaceStat() ([]PagingSpace, error) {
 | |
| 	var pspace *C.perfstat_pagingspace_t
 | |
| 	var fps C.perfstat_id_t
 | |
| 
 | |
| 	numps := C.perfstat_pagingspace(nil, nil, C.sizeof_perfstat_pagingspace_t, 0)
 | |
| 	if numps <= 0 {
 | |
| 		return nil, fmt.Errorf("perfstat_pagingspace() error")
 | |
| 	}
 | |
| 
 | |
| 	ps_len := C.sizeof_perfstat_pagingspace_t * C.ulong(numps)
 | |
| 	pspace = (*C.perfstat_pagingspace_t)(C.malloc(ps_len))
 | |
| 	defer C.free(unsafe.Pointer(pspace))
 | |
| 	C.strcpy(&fps.name[0], C.CString(C.FIRST_PAGINGSPACE))
 | |
| 	r := C.perfstat_pagingspace(&fps, pspace, C.sizeof_perfstat_pagingspace_t, numps)
 | |
| 	if r < 1 {
 | |
| 		return nil, fmt.Errorf("perfstat_pagingspace() error")
 | |
| 	}
 | |
| 	ps := make([]PagingSpace, r)
 | |
| 	for i := 0; i < int(r); i++ {
 | |
| 		p := C.get_pagingspace_stat(pspace, C.int(i))
 | |
| 		if p != nil {
 | |
| 			ps[i] = perfstatpagingspace2pagingspace(p)
 | |
| 		}
 | |
| 	}
 | |
| 	return ps, nil
 | |
| }
 |