Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Apr 2019 14:59:53 +1000
From:      Kubilay Kocak <koobs@FreeBSD.org>
To:        Dima Pasechnik <dimpase+freebsd@gmail.com>, Alexander Zagrebin <alex@zagrebin.ru>
Cc:        FreeBSD Ports <freebsd-ports@freebsd.org>
Subject:   Re: python 3 subprocess performance
Message-ID:  <800de545-0310-fcda-ebae-a4dffabe47e9@FreeBSD.org>
In-Reply-To: <CAAWYfq16Y90-nXeV3TkT10uh=_tK=Vgjk_QEJo=DM-P8KGFNQg@mail.gmail.com>
References:  <20190411161649.1b740d21@vm2.home.zagrebin.ru> <8f3f8413-60f2-bb03-a6b4-4f6364cdc3df@rlwinm.de> <20190411143926.5rg4jskmodt4shhi@laparbeit> <9729db47-12c4-caf4-cdcf-1913dab73c8e@rlwinm.de> <20190412101012.4142854f@vm2.home.zagrebin.ru> <CAAWYfq2P5QsSbc2bzQauApF6=ijQYpKCb2HQ1jy-4dNZCOB_=g@mail.gmail.com> <20190412104531.7b492a3c@vm2.home.zagrebin.ru> <CAAWYfq16Y90-nXeV3TkT10uh=_tK=Vgjk_QEJo=DM-P8KGFNQg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 12/04/2019 8:41 pm, Dima Pasechnik wrote:
> On Fri, Apr 12, 2019 at 9:46 AM Alexander Zagrebin <alex@zagrebin.ru> wrote:
>>
>> В Fri, 12 Apr 2019 09:36:13 +0200
>> Dima Pasechnik <dimpase+freebsd@gmail.com> пишет:
>>
>>> On Fri, Apr 12, 2019 at 9:11 AM Alexander Zagrebin <alex@zagrebin.ru>
>>> wrote:
>>>>
>>>> В Thu, 11 Apr 2019 17:32:42 +0200
>>>> Jan Bramkamp <crest@rlwinm.de> пишет:
>>>>
>>>>> The reason is that that python does something stupid (tm). It
>>>>> tries to close all file descriptors (except a few whitelisted
>>>>> ones) up to the maximum file descriptor number. It does this by
>>>>> asking the kernel for the maximum possible number and closing
>>>>> everything it doesn't want to keep. Some time later someone came
>>>>> up with an optimization (read the open file descriptors
>>>>> from /dev/fd). All of this pain and suffering is caused by good
>>>>> old Ulrich Drepper braindamage:
>>>>> https://sourceware.org/bugzilla/show_bug.cgi?id=10353.
>>>>>
>>>>> Most Linux distros have lower default file descriptor limits than
>>>>> FreeBSD making this workaround less painful. The correct solution
>>>>> would be to teach python3 about closefrom(2).
>>>>
>>>> Thank you for hint and testing!
>>>>
>>>> Indeed the problem is in closing more than 400,000 file descriptors
>>>> in loop. It seems that all current versions of Python are affected.
>>>> Python2 uses False as default value for the close_fds parameter of
>>>> the Popen constructor, so this issue is mostly not visible.
>>>> Python3 has changed this default to True.
>>>>
>>>> As Jan Bramkamp suggested, I've wrote simple patch to fix an issue
>>>> (see attached file). It seems the problem has gone.
>>>
>>> The attachment has been stripped out. Could you paste the diff into
>>> the message?
>>
>> Yes, sure.
>>
>> --- Modules/_posixsubprocess.c.orig     2018-12-24 00:37:14.000000000
>> +0300 +++ Modules/_posixsubprocess.c          2019-04-12
>> 09:25:21.549389000 +0300 @@ -235,11 +235,15 @@
>> _close_fds_by_brute_force(long start_fd, }
>>           start_fd = keep_fd + 1;
>>       }
>> +#if defined(__FreeBSD__)
>> +    closefrom(start_fd);
>> +#else
>>       if (start_fd <= end_fd) {
>>           for (fd_num = start_fd; fd_num < end_fd; ++fd_num) {
>>               close(fd_num);
>>           }
>>       }
>> +#endif
>>   }
>>
>>> If this is a Python issue, shouldn't this be reported upstream, on
>>> https://bugs.python.org ?
>>
>> May be. Rather, it is a FreeBSD-specific optimization.
> 
> Well, closefrom() is also available in Darwin (a.k.a. MacOSX :-)),
> OpenBSD and NetBSD. (It's not documented in current MacOSX, but it is
> there, I just checked)
> Anyway, FreeBSD Python maintainers will ask for an upstream PR.
> 
> I can do such a PR is noone else is willing to...
> 
> Dima
> 
> 

Hi Dima,

Issue exists for this:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=221700

Pending *upstreamable* patches for lang/python*, that we can carry 
locally until released.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?800de545-0310-fcda-ebae-a4dffabe47e9>