Skip to content

디바이스 레이어 ​

개요 ​

디바이스 레이어는 Memesplora의 최하위 계층으로, 운영 체제 및 하드웨어와 직접 상호작용하며 통합된 메모리/VRAM 관리 인터페이스를 제공합니다.

디바이스 인터페이스 ​

go
type DeviceType int

const (
    DeviceRAM  DeviceType = iota // 시스템 메모리
    DeviceVRAM                   // GPU 메모리
    DeviceSwap                   // 스왑 공간/영구 저장
)

type DeviceInfo struct {
    ID        string     `json:"id"`
    Name      string     `json:"name"`
    Type      DeviceType `json:"type"`
    TotalSize uint64     `json:"total_size"`
    FreeSize  uint64     `json:"free_size"`
    UsedSize  uint64     `json:"used_size"`
    Healthy   bool       `json:"healthy"`
    Model     string     `json:"model,omitempty"`
}

RAM 디바이스 구현 ​

Linux ​

익명 메모리 매핑을 위해 mmap 시스템 콜 사용:

go
data, err := syscall.Mmap(-1, 0, size,
    syscall.PROT_READ|syscall.PROT_WRITE,
    syscall.MAP_PRIVATE|syscall.MAP_ANONYMOUS)

/proc/meminfo에서 메모리 정보 확인.

Windows ​

VirtualAlloc 사용:

go
addr, err := windows.VirtualAlloc(0, size,
    windows.MEM_COMMIT|windows.MEM_RESERVE,
    windows.PAGE_READWRITE)

버디 시스템 할당기 ​

메모리 관리 및 단편화 감소를 위해 버디 시스템 사용.

VRAM 디바이스 ​

CUDA GPU 메모리 ​

go
var dptr C.deviceptr
C.cudaMalloc(&dptr, size)
var free, total C.size_t
C.cudaMemGetInfo(&free, &total)

NVML GPU 정보 ​

go
device, _ := nvml.DeviceGetHandleByIndex(0)
name, _ := device.GetName()
memory, _ := device.GetMemoryInfo()

플랫폼 지원 ​

플랫폼RAM 할당메모리 정보GPU 지원
Linuxmmap + MAP_ANONYMOUS/proc/meminfoCUDA
WindowsVirtualAllocGlobalMemoryStatusExCUDA
macOSmmap + MAP_ANONYMOUSsysctl hw.memsize제한적

Apache License 2.0