mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
5d612ec095
- Rename old "model_management" directory to "model_management_OLD" in order to catch dangling references to original model manager. - Caught and fixed most dangling references (still checking) - Rename lora, textual_inversion and model_patcher modules - Introduce a RawModel base class to simplfy the Union returned by the model loaders. - Tidy up the model manager 2-related tests. Add useful fixtures, and a finalizer to the queue and installer fixtures that will stop the services and release threads.
76 lines
3.0 KiB
Python
76 lines
3.0 KiB
Python
import ctypes
|
|
|
|
|
|
class Struct_mallinfo2(ctypes.Structure):
|
|
"""A ctypes Structure that matches the libc mallinfo2 struct.
|
|
|
|
Docs:
|
|
- https://man7.org/linux/man-pages/man3/mallinfo.3.html
|
|
- https://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html
|
|
|
|
struct mallinfo2 {
|
|
size_t arena; /* Non-mmapped space allocated (bytes) */
|
|
size_t ordblks; /* Number of free chunks */
|
|
size_t smblks; /* Number of free fastbin blocks */
|
|
size_t hblks; /* Number of mmapped regions */
|
|
size_t hblkhd; /* Space allocated in mmapped regions (bytes) */
|
|
size_t usmblks; /* See below */
|
|
size_t fsmblks; /* Space in freed fastbin blocks (bytes) */
|
|
size_t uordblks; /* Total allocated space (bytes) */
|
|
size_t fordblks; /* Total free space (bytes) */
|
|
size_t keepcost; /* Top-most, releasable space (bytes) */
|
|
};
|
|
"""
|
|
|
|
_fields_ = [
|
|
("arena", ctypes.c_size_t),
|
|
("ordblks", ctypes.c_size_t),
|
|
("smblks", ctypes.c_size_t),
|
|
("hblks", ctypes.c_size_t),
|
|
("hblkhd", ctypes.c_size_t),
|
|
("usmblks", ctypes.c_size_t),
|
|
("fsmblks", ctypes.c_size_t),
|
|
("uordblks", ctypes.c_size_t),
|
|
("fordblks", ctypes.c_size_t),
|
|
("keepcost", ctypes.c_size_t),
|
|
]
|
|
|
|
def __str__(self):
|
|
s = ""
|
|
s += f"{'arena': <10}= {(self.arena/2**30):15.5f} # Non-mmapped space allocated (GB) (uordblks + fordblks)\n"
|
|
s += f"{'ordblks': <10}= {(self.ordblks): >15} # Number of free chunks\n"
|
|
s += f"{'smblks': <10}= {(self.smblks): >15} # Number of free fastbin blocks \n"
|
|
s += f"{'hblks': <10}= {(self.hblks): >15} # Number of mmapped regions \n"
|
|
s += f"{'hblkhd': <10}= {(self.hblkhd/2**30):15.5f} # Space allocated in mmapped regions (GB)\n"
|
|
s += f"{'usmblks': <10}= {(self.usmblks): >15} # Unused\n"
|
|
s += f"{'fsmblks': <10}= {(self.fsmblks/2**30):15.5f} # Space in freed fastbin blocks (GB)\n"
|
|
s += (
|
|
f"{'uordblks': <10}= {(self.uordblks/2**30):15.5f} # Space used by in-use allocations (non-mmapped)"
|
|
" (GB)\n"
|
|
)
|
|
s += f"{'fordblks': <10}= {(self.fordblks/2**30):15.5f} # Space in free blocks (non-mmapped) (GB)\n"
|
|
s += f"{'keepcost': <10}= {(self.keepcost/2**30):15.5f} # Top-most, releasable space (GB)\n"
|
|
return s
|
|
|
|
|
|
class LibcUtil:
|
|
"""A utility class for interacting with the C Standard Library (`libc`) via ctypes.
|
|
|
|
Note that this class will raise on __init__() if 'libc.so.6' can't be found. Take care to handle environments where
|
|
this shared library is not available.
|
|
|
|
TODO: Improve cross-OS compatibility of this class.
|
|
"""
|
|
|
|
def __init__(self):
|
|
self._libc = ctypes.cdll.LoadLibrary("libc.so.6")
|
|
|
|
def mallinfo2(self) -> Struct_mallinfo2:
|
|
"""Calls `libc` `mallinfo2`.
|
|
|
|
Docs: https://man7.org/linux/man-pages/man3/mallinfo.3.html
|
|
"""
|
|
mallinfo2 = self._libc.mallinfo2
|
|
mallinfo2.restype = Struct_mallinfo2
|
|
return mallinfo2()
|