Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Apr 2019 16:39:26 +0200
From:      Konstantin Schukraft <konstantin@schukraft.org>
To:        Jan Bramkamp <crest@rlwinm.de>
Cc:        freebsd-ports@freebsd.org
Subject:   Re: python 3 subprocess performance
Message-ID:  <20190411143926.5rg4jskmodt4shhi@laparbeit>
In-Reply-To: <8f3f8413-60f2-bb03-a6b4-4f6364cdc3df@rlwinm.de>
References:  <20190411161649.1b740d21@vm2.home.zagrebin.ru> <8f3f8413-60f2-bb03-a6b4-4f6364cdc3df@rlwinm.de>

next in thread | previous in thread | raw e-mail | index | archive | help

--kwzmq4cyo2whxe62
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Disposition: inline

>Please run python under truss -f. Does it try to close(2) all possible
>file descriptors? Does the runtime decrease if fdescfs is mounted at
>/dev/fd?
truss -f -p 17407

17407: read(5,0x1265d2e9120,50000)               = 0 (0x0)
17407: close(5)                                  = 0 (0x0)
17407: lseek(3,0x0,SEEK_CUR)                     ERR#29 'Illegal seek'
17407: fstat(3,{ mode=p--------- ,inode=1610971,size=0,blksize=4096 }) = 0 (0x0)
17407: read(3,"FreeBSD midgard 12.0-STABLE-HBSD"...,8192) = 88 (0x58)
17407: read(3,0x1265ceda078,8104)                = 0 (0x0)
17407: close(3)                                  = 0 (0x0)
17407: wait4(1948,{ EXITED,val=0 },0x0,0x0)      = 1948 (0x79c)
17407: write(1,"63\n",3)                         = 3 (0x3)
17407: pipe2(0x63857dad22e8,O_CLOEXEC)           = 0 (0x0)
17407: fstat(3,{ mode=p--------- ,inode=1610975,size=0,blksize=4096 }) = 0 (0x0)
17407: ioctl(3,TIOCGETA,0x63857dad21a0)          ERR#25 'Inappropriate ioctl for device'
17407: lseek(3,0x0,SEEK_CUR)                     ERR#29 'Illegal seek'
17407: pipe2(0x63857dad21e8,O_CLOEXEC)           = 0 (0x0)
17407: sigprocmask(SIG_BLOCK,{ SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|
SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2 },{ }) = 0 (0x0)
97164: <new process>
17407: fork()                                    = 97164 (0x17b8c)
97164: thr_self(0x1265c7e9000)                   = 0 (0x0)
17407: sigprocmask(SIG_SETMASK,{ },0x0)          = 0 (0x0)
97164: sigprocmask(SIG_SETMASK,{ },0x0)          = 0 (0x0)
97164: close(3)                                  = 0 (0x0)
97164: close(5)                                  = 0 (0x0)
17407: close(6)                                  = 0 (0x0)
97164: dup2(4,1)                                 = 1 (0x1)
17407: close(4)                                  = 0 (0x0)
97164: dup2(4,2)                                 = 2 (0x2)
97164: sigprocmask(SIG_SETMASK,{ SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPRO
F|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2 },{ }) = 0 (0x0)
97164: sigaction(SIGPIPE,{ SIG_DFL 0x0 ss_t },{ SIG_IGN 0x0 ss_t }) = 0 (0x0)
97164: sigprocmask(SIG_SETMASK,{ },0x0)          = 0 (0x0)
97164: sigprocmask(SIG_SETMASK,{ SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPRO
F|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2 },{ }) = 0 (0x0)
97164: sigaction(SIGXFSZ,{ SIG_DFL 0x0 ss_t },{ SIG_IGN 0x0 ss_t }) = 0 (0x0)
97164: sigprocmask(SIG_SETMASK,{ },0x0)          = 0 (0x0)
97164: fstatat(AT_FDCWD,"/dev",{ mode=dr-xr-xr-x ,inode=2,size=512,blksize=4096 },0x0) = 0 (0x0)
97164: fstatat(AT_FDCWD,"/dev/fd",{ mode=dr-xr-xr-x ,inode=135,size=512,blksize=4096 },0x0) = 0 (0x0)
97164: getrlimit(RLIMIT_NOFILE,{ cur=940563,max=940563 }) = 0 (0x0)
97164: close(3)                                  ERR#9 'Bad file descriptor'
97164: close(4)                                  = 0 (0x0)
97164: close(5)                                  ERR#9 'Bad file descriptor'
97164: close(7)                                  ERR#9 'Bad file descriptor'
97164: close(8)                                  ERR#9 'Bad file descriptor'
97164: close(9)                                  ERR#9 'Bad file descriptor'

The last error repeats several 10000 times.

Mounting fdescfs does indeed speed python3 up to python2 levels.

>On 11.04.19 15:16, Alexander Zagrebin wrote:
>> Hi!
>>
>> I've noticed the subprocess performance issue with python 3.
>> For example, this simple script takes just 0,15 second to complete
>> with python 2.7, but more than 5 sec with python 3.6:
>>
>> import subprocess
>>
>> for i in range(100):
>>     p = subprocess.Popen(['uname', '-a'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>     (stdoutdata, stderrdata) = p.communicate()
>>
>> Profiling with the cProfile shows, that this excessive 5 seconds was
>> wasted in the "{built-in method posix.read}"
>>
>> Could anybody confirm this issue?
>>
>_______________________________________________
>freebsd-ports@freebsd.org mailing list
>https://lists.freebsd.org/mailman/listinfo/freebsd-ports
>To unsubscribe, send any mail to "freebsd-ports-unsubscribe@freebsd.org"

--kwzmq4cyo2whxe62
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQT5hlD1gMfKZVmJgKBt4hVX4L8dwAUCXK9RnQAKCRBt4hVX4L8d
wLjEAP9HSu9LxFw4msWVmXaTnL4oPCY2d2Q8vr47cNcgJVSYugD+JL32jVO+NPqw
2px/iCIvt0kUdOImWUXMu7G8koaNLQE=
=rJ5k
-----END PGP SIGNATURE-----

--kwzmq4cyo2whxe62--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190411143926.5rg4jskmodt4shhi>