2013-09-29 6 views
2

Я перешел с ipython 0.10 на 1.1.0. Теперь я испытываю очень раздражающие замедление процесса запуска.Slow ipython --pylab и ipython notebook startup

Хотя ipython сама по себе еще в кратчайшие сроки, ipython --pylab занимает очень медленный старт, т.е. ~8 secs (на Intel (R) ядра (TM) 2 Duo CPU системы P9500 @ 2.53GHz) и тем более нового ipython notebook которого у меня не было в ipython 0.10, а именно ~12 secs.

Когда я делаю strace -o tessi.txt -tt ipython --pylab Я могу определить, по крайней мере, разделы, которые, как представляется, несут ответственность за большие куски этих задержек. Любая помощь по избавлению от них была бы очень желанной.

Для варианта --pylab, выход Strace содержит секцию, которая разъедает ~5 secs, и которой нет при запуске просто IPython, а именно

10:23:24.331968 stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=868, ...}) = 0 
10:23:24.332028 socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 9 
10:23:24.332074 connect(9, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = 0 
10:23:24.332152 sendto(9, "\2\0\0\0\4\0\0\0\35\0\0\0MYHOST.DOM.AIN."..., 41, MSG_NOSIGNAL, NULL, 0) = 41 
!! -> 10:23:24.332227 poll([{fd=9, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=9, revents=POLLIN|POLLHUP}]) 
!! -> 10:23:29.336301 read(9, "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32) = 32 
10:23:29.336533 close(9)    = 0 
10:23:29.336839 close(7)    = 0 

где я заменить мое реальное имя хоста с MYHOST.DOM.AIN

В случае ipython notebook, по-видимому, существуют по существу две такие области. Первый, похоже, такой же, как для ipython --pylab. Второй один забирает другой ~4 secs

10:39:31.823298 stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=868, ...}) = 0 
10:39:31.823358 socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 9 
10:39:31.823405 connect(9, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = 0 
10:39:31.823499 sendto(9, "\2\0\0\0\4\0\0\0\35\0\0\0MYHOST.DOM.AIN."..., 41, MSG_NOSIGNAL, NULL, 0) = 41 
!! -> 10:39:31.824166 poll([{fd=9, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=9, revents=POLLIN|POLLHUP}]) 
!! -> 10:39:36.827298 read(9, "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32) = 32 
10:39:36.827503 close(9)    = 0 
10:39:36.827828 close(7)    = 0  

10:39:38.591774 setsockopt(6, SOL_TCP, TCP_NODELAY, [0], 4) = 0 
10:39:38.591922 poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 4, 0) = 0 (Timeout) 
10:39:38.592007 poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 4, 0) = 0 (Timeout) 
!! -> 10:39:38.592049 poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 4, 3600000) = ? ERESTART_RESTARTBLOCK (To be restarted) 
!! -> 10:39:42.355658 --- SIGINT (Interrupt) @ 0 (0) --- 
10:39:42.355773 write(5, "\0", 1)  = 1 
10:39:42.355916 rt_sigreturn(0x2)  = -1 EINTR (Interrupted system call) 
10:39:42.356113 rt_sigaction(SIGINT, {0x7f26dc0fbfc6, [], SA_RESTORER, 0x7f26dbe5a2d0}, {0x7f26dc0fbfc6, [], SA_RESTORER, 0x7f26dbe5a2d0}, 8) = 0 
10:39:42.356672 clone(child_stack=0x7f26cfb49ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f26cfb4a9d0, tls=0x7f26cfb4a700, child_tidptr=0x7f26cfb4a9d0) = 11084 

Любая помощь о том, как избавиться от этих задержек было бы только приветствовать.

Наконец, и пока я нахожусь на нем. Когда я смотрю выходные данные strace, я вижу, что при запуске ipython пытается открыть много «связанных с python» файлов в тех местах, где я бы наивно думал, что это никогда не будет так, и где мои системы python определенно не были установлен? Все эти многочисленные открытые вызовы терпят неудачу. Например .:

11:11:26.465594 open("/opt/intel/composerxe-2011.3.174/compiler/lib/intel64/tls/libpython2.7.so.1.0", O_RDONLY) = -1 ENOENT (No such file or directory) 
11:11:26.465646 stat("/opt/intel/composerxe-2011.3.174/compiler/lib/intel64/tls", 0x7fff0efb0100) = -1 ENOENT (No such file or directory) 

or 

11:11:26.468293 stat("/usr/local/lib/vtk-5.4/tls/x86_64", 0x7fff0efb0100) = -1 ENOENT (No such file or directory) 
11:11:26.468347 open("/usr/local/lib/vtk-5.4/tls/libpython2.7.so.1.0", O_RDONLY) = -1 ENOENT (No such file or directory) 

время общая для этих вызовов составляют другую значительную часть оставшегося медленного запуска, но я не могу указать на определенный временной интервал. Любая идея, как уменьшить эти призывы?

+0

это может быть связано с этим вопросом: http://stackoverflow.com/questions/18544514/gethostbyname-exhostname-extremely-slow – dashesy

ответ

2

1) предлагаю не начинать с --pylab, мы рекомендуем людям использовать %matplotlib после запуска. накладные расходы при запуске при использовании --pylab, скорее всего, связаны с импортом пакетов, к которым у нас нет доступа. Например, ошибки в ArchLinux, где каждый ipython --pylab занимает сотни МБ из-за утечки памяти где-то не в коде IPython.

Доступ к сокетам все еще кажется странным, и узнать, откуда это взялось, может помочь.

2) Второй с ноутбуком, вероятно, связан с ZMQ и началом некоторой связи через сокеты на локальном хосте. Мы знаем, что в некоторых случаях это может занять несколько раз, но нам также нужно выяснить, какая часть кода медленно делает что-то в этом отношении. NOtebook также запускает веб-сервер, поэтому ожидается работа сети.

3) Возможно, из-за некоторой библиотеки, которую мы используем, мы не открываем такие строки явно в ipython. особенно VTK. У вас есть профиль, который загружает определенные вещи?

Вы можете попытаться открыть проблему на трекеру IPython, но мы, возможно, попросим вас углубиться в понимание того, что такое вызов python в ipython, который занимает много времени. Вопрос о времени запуска уже задан между core dev.

Консенсус заключался в том, что это было бы «наилучшим усилием», но мы, безусловно, слишком маленькое количество, чтобы иметь это в качестве приоритета. Тем не менее, интеграция с инструментом, таким как vbech для отслеживания регрессии, была бы приятной, и если кто-то мотивирован на медленный звонок, мы будем рады сделать все возможное, чтобы улучшить ситуацию.

+0

объявлений 1 и 2), оставляя в стороне если% matplotlib поможет мне в отношении --pylab, как это поможет с записной книжкой? В частности, поскольку, как показывает strace, 50% проблемы с ноутбуком такие же, как для -pylab. Вы предполагаете, что для ноутбука мне придется принять 12 секунд? Ad 3) Нет, я не думаю, что у меня есть профиль, загружающий VTK. Фактически я обновил свой профиль после обмена ipython 0.11 с 1.1.0. Наконец, есть ли у вас какие-либо сведения о том, что эти два ~ 5 секунд остановок в старте, которые я показал с strace? – Mark

+0

Просто отправил это также в https://github.com/ipython/ipython/issues – Mark

+0

О, я читал слишком быстро, я думал, что вы сравниваете 'ipython -pylab' с' ipython notebook -pylab', поэтому общее время вопрос, это странно. Я не удивлен для ~ 12-секундного ноутбука, так как вам нужно создать не столь маленький веб-сервер, но как только он появится, он, вероятно, останется в живых целыми днями. Но я понимаю, что это может раздражать. У нас была проблема с прослушиванием LOCALHOST, когда Wi-Fi активен на некоторых ОС (из-за медленной сети ответа), но проблемы с восходящим потоком, и мы ничего не можем с этим поделать. – Matt

Смежные вопросы