qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5] osdep: add a qemu_close_all_open_fd() helper


From: Clément Léger
Subject: Re: [PATCH v5] osdep: add a qemu_close_all_open_fd() helper
Date: Mon, 29 Jul 2024 16:20:56 +0200
User-agent: Mozilla Thunderbird


On 29/07/2024 16:00, Philippe Mathieu-Daudé wrote:
> Hi Clément,
> 
> On 26/7/24 09:54, Clément Léger wrote:
>> Since commit 03e471c41d8b ("qemu_init: increase NOFILE soft limit on
>> POSIX"), the maximum number of file descriptors that can be opened are
>> raised to nofile.rlim_max. On recent debian distro, this yield a maximum
>> of 1073741816 file descriptors. Now, when forking to start
>> qemu-bridge-helper, this actually calls close() on the full possible file
>> descriptor range (more precisely [3 - sysconf(_SC_OPEN_MAX)]) which
>> takes a considerable amount of time. In order to reduce that time,
>> factorize existing code to close all open files descriptors in a new
>> qemu_close_all_open_fd() function. This function uses various methods
>> to close all the open file descriptors ranging from the most efficient
>> one to the least one. It also accepts an ordered array of file
>> descriptors that should not be closed since this is required by the
>> callers that calls it after forking. Since this function is not used
>> for Win32, do not implement it to force an error at link time if used.
>>
>> Signed-off-by: Clément Léger <cleger@rivosinc.com>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>> ---
>> v5:
>>   - Move qemu_close_all_open_fd() to oslib-posix.c since it does not
>>     compile on windows and is not even used on it.
>>   - v4:
>> 20240717124534.1200735-1-cleger@rivosinc.com/">https://lore.kernel.org/qemu-devel/20240717124534.1200735-1-cleger@rivosinc.com/
>>
>> v4:
>>   - Add a comment saying that qemu_close_all_open_fd() can take a NULL
>> skip
>>     array and nskip == 0
>>   - Added an assert in qemu_close_all_open_fd() to check for skip/nskip
>>     parameters
>>   - Fix spurious tabs instead of spaces
>>   - Applied checkpatch
>>   - v3:
>> 20240716144006.6571-1-cleger@rivosinc.com/">https://lore.kernel.org/qemu-devel/20240716144006.6571-1-cleger@rivosinc.com/
>>
>> v3:
>>   - Use STD*_FILENO defines instead of raw values
>>   - Fix indentation of close_all_fds_after_fork()
>>   - Check for nksip in fallback code
>>   - Check for path starting with a '.' in qemu_close_all_open_fd_proc()
>>   - Use unsigned for cur_skip
>>   - Move ifdefs inside close_fds functions rather than redefining them
>>   - Remove uneeded 'if(nskip)' test
>>   - Add comments to close_range version
>>   - Reduce range of skip fd as we find them in
>>   - v2:
>> https://lore.kernel.org/qemu-devel/20240618111704.63092-1-cleger@rivosinc.com/
>>
>> v2:
>>   - Factorize async_teardown.c close_fds implementation as well as
>> tap.c ones
>>   - Apply checkpatch
>>   - v1:
>> https://lore.kernel.org/qemu-devel/20240617162520.4045016-1-cleger@rivosinc.com/
>>
>> ---
>>   include/qemu/osdep.h    |   9 +++
>>   net/tap.c               |  33 +++++-----
>>   system/async-teardown.c |  37 +-----------
>>   util/oslib-posix.c      | 131 ++++++++++++++++++++++++++++++++++++++++
>>   4 files changed, 160 insertions(+), 50 deletions(-)
> 
> I'm getting this error on msys2, not sure if related:
> 
> WARNING: Failed to terminate process: 1 error occurred:
>     * failed to attach the runner process to the console of its parent
> process: The handle is invalid.
> 
> I find your patch hard to review. Do you mind splitting as trivial
> changes? Something like:
> 
> - Expose close_all_open_fd() renamed as qemu_close_all_open_fd()
> - Rework qemu_close_all_open_fd()
> - Factor close_all_fds_after_fork() in net/tap.c
> - Use qemu_close_all_open_fd() in net/tap.c

Yes sure, I'll do that.

Clément

> 
> Thanks,
> 
> Phil.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]