| """Memory watchdog: periodically read the memory usage of the main test process |
| and print it out, until terminated.""" |
| |
| |
| import sys |
| import time |
| from test.libregrtest.utils import get_process_memory_usage |
| |
| |
| ONE_GIB = (1024 ** 3) |
| |
| |
| def watchdog(pid): |
| while True: |
| mem = get_process_memory_usage(pid) |
| if mem is None: |
| # get_process_memory_usage() is not supported on the platform, |
| # or something went wrong. Exit since the next call is likely to |
| # fail the same way. |
| return |
| |
| # Prefer sys.stdout.write() to print() to use a single write() syscall. |
| # print(msg) calls write(msg.encode()) and then write(b"\n"). |
| sys.stdout.write(f" ... process data size: {mem / ONE_GIB:.1f} GiB\n") |
| sys.stdout.flush() |
| time.sleep(1) |
| |
| def main(): |
| if len(sys.argv) != 2: |
| print(f"usage: python {sys.argv[0]} pid") |
| sys.exit(1) |
| pid = int(sys.argv[1]) |
| |
| try: |
| watchdog(pid) |
| except KeyboardInterrupt: |
| pass |
| |
| if __name__ == "__main__": |
| main() |