Slow no-op installs on macOS: repeated PHP and pkg-config subprocesses
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- php
- Área
- performance
Línea de trabajo
Start by tracing Php\Pie\Util\Process::run() and the PHP-installation and dependency queries it serves; the issue names no source files or tests, so first locate those call sites and relevant tests. Reproduce with the supplied pie install command and profile repeated PHP and pkg-config invocations. Done means already-installed extensions are still verified correctly with redundant query results reused within one invocation and runtime reduced.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What are you trying to do?
Run pie install for seven already-installed extensions. All extensions are verified successfully; nothing is compiled or updated.
What platform, and PIE version are you using?
- PIE 1.5.1
- Homebrew PHP 8.4.26, NTS, ARM64 on both platforms
- macOS 27.0.1 (26A434), compared with Linux ARM64
Steps to reproduce the issue
With the extensions already installed, invoke PIE directly on macOS:
/usr/bin/time /opt/homebrew/opt/[email protected]/bin/php /opt/homebrew/bin/pie install \
apcu/apcu mongodb/mongodb-extension pecl/pcov phpredis/phpredis \
noisebynorthwest/php-spx --with-zlib-dir=/opt/homebrew/opt/zlib \
xdebug/xdebug bsn4/grpc
What do you expect to happen?
Verification of already-installed extensions should complete quickly, avoiding repeated identical queries of the PHP installation and system dependencies.
What is actually happening?
The direct macOS invocation takes 46.19 seconds:
46.19 real 36.34 user 7.65 sys
An equivalent verbose Linux run takes 8.44 seconds (3.47 seconds user, 1.33 seconds system). A verbose macOS run takes 47.95 seconds (37.24 seconds user, 8.10 seconds system).
Logs/output
The direct macOS run reports:
PIE 1.5.1
You are running PHP 8.4.26
Target PHP installation: 8.4.26 nts, on Linux/OSX/etc arm64
Found package: apcu/apcu:v5.1.28 which provides ext-apcu
Found package: mongodb/mongodb-extension:2.5.3 which provides ext-mongodb
Found package: pecl/pcov:v1.0.12 which provides ext-pcov
Found package: phpredis/phpredis:6.3.0 which provides ext-redis
Found package: noisebynorthwest/php-spx:v0.4.22 which provides ext-spx
Found package: xdebug/xdebug:3.5.3 which provides ext-xdebug
Found package: bsn4/grpc:v0.4.0 which provides ext-grpc
✅ PIE package apcu/apcu (apcu) is already installed and verified.
✅ PIE package bsn4/grpc (grpc) is already installed and verified.
✅ PIE package mongodb/mongodb-extension (mongodb) is already installed and verified.
✅ PIE package noisebynorthwest/php-spx (spx) is already installed and verified.
✅ PIE package pecl/pcov (pcov) is already installed and verified.
✅ PIE package phpredis/phpredis (redis) is already installed and verified.
✅ PIE package xdebug/xdebug (xdebug) is already installed and verified.
Anything else?
Timing Php\Pie\Util\Process::run() in a temporary copy of the installed PHAR, using microtime(true) around each invocation and logging the command and elapsed time in a finally block, produced a similar total runtime of 46.81 seconds:
| Subprocess | Calls | Cumulative elapsed time |
|---|---|---|
| PHP | 114 | 35.84 s |
| pkg-config | 810 | 8.88 s |
| php-config | 1 | 0.01 s |
PHP invocations included 47 full-version queries, 30 loaded-extension queries, 13 major/minor-version queries, and 11 php -i calls.
Normal PHP startup on this Mac takes approximately 0.31 seconds per launch. Disabling Xdebug did not improve the overall runtime (48.90 seconds). Removing MongoDB's INI from a temporary configuration reduced PHP startup from approximately 0.317 to 0.167 seconds, but was only used to measure startup, not to run installation verification.
The subprocess measurements identify where the macOS run spends its time; equivalent subprocess profiling has not been performed on Linux, so the underlying platform difference is not established.
Could PHP installation information and dependency query results be cached within a single PIE invocation? Repeated subprocess calls appear to amplify startup overhead substantially for already-installed extensions.
- Lenguaje dominante
- PHP
- Estrellas
- 2k
- Forks
- 74
- Merge medio
- 6 h 35 min
- PR fusionados (30 d)
- 12
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de php/pie
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
Los mantenedores suelen responder en 1 día
-
Do not duplicate an ext in pie show output for dev versionsPosiblemente ocupada @asgrim la tomó hace 7 días. Abiertoenhancement maintainer investigating
Los mantenedores suelen responder en 1 día
-
Add self-update feature for executable PIEsPosiblemente ocupada @asgrim la tomó hace 18 días. Abiertoenhancement maintainer investigating
Los mantenedores suelen responder en 1 día
-
Allow building from existing sources on diskPosiblemente ocupada @asgrim la tomó hace 18 días. Abiertoenhancement maintainer investigating
php/pie#738 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Optionally remove build-only dependencies and bloat after installQuizá libre de nuevo @asgrim la tomó hace 140 días y no hay ningún pull request abierto. Abiertoenhancement maintainer investigating
php/pie#618 · 2 comentarios · 4 reacciones · 1 asignado ·
Los mantenedores suelen responder en 1 día
Issues similares
-
customer-support needs-triage Platform(Default)
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
grokability/snipe-it#19767 ·
Los mantenedores suelen responder en 1 día
-
[Code Quality] SfxDownloader extract path has no destination-writability pre-check for cached zipsAbiertopriority:low type:refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
crazy-goat/workerman-bundle#1052 ·
Los mantenedores suelen responder en 1 día
-
sync-en
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
sync-en
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
Los mantenedores suelen responder en 3 días