We have at least two places in qemu where we're closing all possible file descriptors, - in async-teardown.c and in net/tap.c. While async-teardown one uses either close_range() or readdir(/proc/self/fd), the two calls in net/tap.c loops from 3 to RLIMIT_NOFILE, which might be quite slow, and it actually *is* slow on some systems (eg, just qemu-system-x86_64 startup with a tap device is very slow on alpine linux).
While for net/tap.c, maybe the better fix is to get rid of this closing entirely and use O_CLOEXEC instead, this needs to be prepared at first, while we alredy have almost ready-to-be-used implementation which only needs to be moved into a common place. Michael Tokarev (2): close_all_open_fd(): move to oslib-posix.c net/tap: use os_close_all_open_fd() instead of open-coding it include/sysemu/os-posix.h | 1 + net/tap.c | 15 ++------------- system/async-teardown.c | 37 +------------------------------------ util/oslib-posix.c | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 49 deletions(-) -- 2.39.2
