Precompilation significantly slows Julia startup
- Langage dominant
- Julia
- Étoiles
- 1.5k
- Forks
- 186
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Julia startup time with PyCall precompiled into base/userimg.jl jumps in commit d19995c5fd895aa6a249cb6b6d1164dc2826e8f2 from <1 second to ~10 seconds on several of my machines (with both Julia 0.3.6 and some 0.4 masters).
I found this with a git bisect using a quick and dirty script:
``` bash
#!/bin/bash
# GOOD PyCall: 896f82a
# BAD PyCall: ebe352f
JIFILE=/tmp/test_bisect
julia /home/jason/src/julia/contrib/build_sysimg.jl $JIFILE native /tmp/userimg.jl --force > /dev/null
T1=`date +%s`
/bin/time -f %U julia -J ${JIFILE}.ji -E "0"
TIME=$(echo `date +%s`-$T1 | bc -l)
echo $TIME
if [[ `echo "$TIME>2" | bc -l` -eq 1 ]]; then
echo "Long"
exit 1
else
echo "Short"
exit 0
fi
```
I'm not actually sure if this is a problem with PyCall or Julia, so if the latter, then let me know and I'll move the bug up the stack.
I don't know enough about PyCall to debug this further, but I did do some macro level debugging in [this mailing list thread](https://groups.google.com/forum/#!topic/julia-dev/uvEgky_QKmY). At the time I did not know that it was from PyCall specifically.
Oh, and another gotcha: the slow start seems to be dependent on stdout. Let me show you what I mean:
``` julia
$ /bin/time -f %U julia -J /tmp/test_newgit.ji -E 0 # slow start
0
9.03
$ julia -J /tmp/test_newgit.ji -E 0 >/dev/null # fast start
0.63
$ julia -J /tmp/test_newgit.ji -e 0 # fast start
0.59
$ julia -J /tmp/test_newgit.ji -e "println(3)" # slow start
3
9.40
```
Whereas with a commit before d19995c5fd895aa6a249cb6b6d1164dc2826e8f2 (precompiled), all of these would be fast.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par les commits de régression signalés d19995c5fd895aa6a249cb6b6d1164dc2826e8f2, 896f82a et ebe352f, puis inspectez contrib/build_sysimg.jl et reproduisez la mesure des temps avec le script bash fourni. Comparez le démarrage avec stdout redirigée et avec différentes expressions, et utilisez l’analyse liée de la liste de diffusion pour déterminer si PyCall ou Julia est à l’origine du ralentissement. Le travail est terminé lorsque la régression est identifiée et que le démarrage précompilé rapide est rétabli.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- bash, julia, python
- Domaine
- performance
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 32/100