mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-02 17:50:19 +08:00
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import ctypes
|
|
import logging
|
|
import psutil
|
|
from ctypes import wintypes
|
|
|
|
import comfy_aimdo.control
|
|
|
|
psapi = ctypes.WinDLL("psapi")
|
|
kernel32 = ctypes.WinDLL("kernel32")
|
|
|
|
class PERFORMANCE_INFORMATION(ctypes.Structure):
|
|
_fields_ = [
|
|
("cb", wintypes.DWORD),
|
|
("CommitTotal", ctypes.c_size_t),
|
|
("CommitLimit", ctypes.c_size_t),
|
|
("CommitPeak", ctypes.c_size_t),
|
|
("PhysicalTotal", ctypes.c_size_t),
|
|
("PhysicalAvailable", ctypes.c_size_t),
|
|
("SystemCache", ctypes.c_size_t),
|
|
("KernelTotal", ctypes.c_size_t),
|
|
("KernelPaged", ctypes.c_size_t),
|
|
("KernelNonpaged", ctypes.c_size_t),
|
|
("PageSize", ctypes.c_size_t),
|
|
("HandleCount", wintypes.DWORD),
|
|
("ProcessCount", wintypes.DWORD),
|
|
("ThreadCount", wintypes.DWORD),
|
|
]
|
|
|
|
def get_free_ram():
|
|
#Windows is way too conservative and chalks recently used uncommitted model RAM
|
|
#as "in-use". So, calculate free RAM for the sake of general use as the greater of:
|
|
#
|
|
#1: What psutil says
|
|
#2: Total Memory - (Committed Memory - VRAM in use)
|
|
#
|
|
#We have to subtract VRAM in use from the comitted memory as WDDM creates a naked
|
|
#commit charge for all VRAM used just incase it wants to page it all out. This just
|
|
#isn't realistic so "overcommit" on our calculations by just subtracting it off.
|
|
|
|
pi = PERFORMANCE_INFORMATION()
|
|
pi.cb = ctypes.sizeof(pi)
|
|
|
|
if not psapi.GetPerformanceInfo(ctypes.byref(pi), pi.cb):
|
|
logging.warning("WARNING: Failed to query windows performance info. RAM usage may be sub optimal")
|
|
return psutil.virtual_memory().available
|
|
|
|
committed = pi.CommitTotal * pi.PageSize
|
|
total = pi.PhysicalTotal * pi.PageSize
|
|
|
|
return max(psutil.virtual_memory().available,
|
|
total - (committed - comfy_aimdo.control.get_total_vram_usage()))
|
|
|