Rendimiento de OpenClaw
Desperdicio es el trabajo que una solicitud no necesita. Las grandes aceleraciones provienen de eliminar desperdicio, no de hacer el mismo trabajo más rápido. Una caché es el último recurso: oculta el desperdicio hasta que su clave, invalidación o tasa de aciertos se rompe, y el desperdicio regresa.
1. Medir
Escribe la regla de aceptación en el PR antes de la primera ejecución: flujo, carga de trabajo, métrica, frío o caliente, muestras, y el cambio que cuenta como una victoria o una regresión.
| Flujo | Carga de trabajo comprometida |
|---|---|
| Inicio de CLI | pnpm test:startup:bench (:check mantiene el presupuesto) |
| Inicio / reinicio de Gateway | scripts/bench-gateway-startup.ts, scripts/bench-gateway-restart.ts, scripts/perf/post-restart-burst-measure.ts |
| Turno de chat, fotogramas por turno | scripts/bench-channel-turn.mts, scripts/perf/transcript-broadcast-measure.ts |
| Carga en frío de Control UI | scripts/bench-control-ui-cold-load.ts, pnpm ui:check-performance (:base compara) |
| Lista de sesiones, forma multi-agente | scripts/perf/team-shape-fixture.ts, src/gateway/session-list-viewers.perf.test.ts |
| Concurrencia, estado SQLite | scripts/bench-gateway-concurrency.ts, pnpm test:sqlite:perf |
- Cuentas primero: operaciones por acción (sentencias SQL, RPCs y fotogramas, lecturas de archivos, cargas de catálogo o registro, inicios, renders) antes del tiempo de pared. Las cuentas se mantienen estables en un host cargado. Una cuenta que debería ser cero es el error.
- Flujo real: un Gateway aislado en la cabeza bajo prueba, transporte real, incluida la ruta lenta. Un Gateway simulado, una compilación desactualizada o un servidor de desarrollo miden otra cosa.
- Muestras: línea base y candidato intercalados (ABAB), al menos 5 cada uno, frío y caliente separados; mediana y p95 con dispersión, ejecutados en serie, carga del host registrada.
- Repetible: solo cuentan los scripts comprometidos; extienda uno existente cuando ninguno se ajuste.
- Perfil:
node --cpu-profpor hilo, o un trace de rendimiento del navegador, en la ruta caliente.
Terminado cuando el flujo tiene una carga de trabajo comprometida, una tabla de línea base y una regla escrita.
2. Encontrar desperdicio
Pregunte por cada operación contada: ¿esta solicitud la necesita? Desperdicio recurrente en OpenClaw:
- Trabajo anticipado en la ruta crítica: una búsqueda en el registro importó el cargador de plugins (#133518, 47.07 s → 10.36 s); tiempos de ejecución opcionales cargados al inicio (#119374).
- Recomputación por fila o por llamada: una lectura síncrona por fila archivada (#156665, 56,700 lecturas → 0); patrones de log resueltos por fotograma (#150042, 539 → 17 ms por 10,000 fotogramas).
- Re-verificación del estado admitido: comprobaciones de esquema, admisión o frescura en handles calientes (#166102, #172676; 14 PRs en la cadena de admisión SQLite).
- Re-escaneo completo por delta transmitido: cada token reprocesó toda la respuesta (#158526, 5,342 → 1 ms CPU a 256 KiB).
- Releer tu propia escritura: dos copias de seguridad de base de datos por búsqueda (#161551, 772.8 → 7.7 ms); Doctor re-escaneó y respaldó lo que acababa de comprobar (#174665, ~26 → 3.0 s).
- Construcciones repetidas de catálogo o registro: una reconstrucción de catálogo por agente al inicio (#116261, 24.9 → 5.0 s); reconstrucciones por fallo o TTL (#127178, #167008).
- Espera de datos opcionales: la página de Uso esperó los planes del proveedor y reintentó lecturas no relacionadas (#176358).
- Copias defensivas y envoltorios:
structuredClonepor turno (#172940, 1.685 MiB → 0); envoltorio por valor en el límite (#163818, 11,571 → 500 ns/evento). - Inicio o fan-out por llamada: un proceso hijo por resolución (#155779, 100 → 0).
- Cascadas de render y cargas útiles completas: un render por actualización (#159400, 250 → 79); filas completas reenviadas para un delta (#165404, 21.75 → 0.95 MB).
Terminado cuando cada cuenta dominante se rastrea hasta el código que la emite, con un sí o no sobre "necesario".
3. Arreglar en este orden
- Eliminar el desperdicio. Las eliminaciones rara vez vuelven; una eliminación fallida eliminó una protección, así que mantenga toda verificación que proteja un contrato y demuestre que el contrato aún se cumple.
- Una vez en el propietario: los llamantes consumen el hecho registrado del propietario.
- Llevar el hecho preparado a través de la ruta caliente.
- Agrupar trabajo independiente, y demostrar que el lote mantiene estables los fotogramas, las colas de latencia y el arranque en frío: la coalescencia fue revertida tres veces (#162560, #173901, #175092).
- Caché, con una razón escrita de por qué los pasos 1–4 no aplican. Siga la raíz "Identidad de caché", invalide desde las escrituras del propietario, limite el tamaño, y añada una prueba de conteo de trabajo intercalado. Tres de cuatro reparaciones de caché fueron fallos silenciosos: lectores desalojándose entre sí (#115369 → #174741), un presupuesto que oscilaba (#149773 → #149879).
Un movimiento de worker o un aplazamiento reubica el costo; cuente tanto el trabajo del hilo principal como el total.
Terminado cuando el desperdicio ha desaparecido de los conteos, o el PR dice qué paso detuvo y por qué.
4. Aterrizar
- Re-ejecute la carga de trabajo del paso 1 en línea base y candidato bajo la misma regla.
- Cada métrica orientada al usuario se mantiene o mejora: latencia, p95/p99, fotogramas, arranque en frío, CPU, memoria, conteos. Una métrica peor necesita la aceptación explícita del propietario en el PR. Un movimiento del 20% en una celda es una parada, nunca "dentro de la dispersión": cinco de seis PRs de rendimiento revertidos mostraron su regresión en su propio cuerpo.
- Revierta cambios sin una ganancia medible.
- La evidencia vive en el PR, no en nuevas pruebas: los conteos antes/después son la evidencia. Extienda la prueba de conteo de trabajo existente de un flujo solo cuando este desperdicio haya regresado antes; test-audit es dueño del valor de la prueba.
- Evidencia del PR: comando de carga de trabajo, regla de aceptación, tabla antes/después (conteos y tiempos, mediana y p95, muestras), desperdicio eliminado, y cualquier métrica que se movió en la dirección equivocada.
Terminado cuando la tabla cumple la regla escrita en el paso 1.
Relacionado
Velocidad del conjunto de pruebas: openclaw-test-performance. Crecimiento del heap de pruebas: openclaw-test-heap-leaks. Capacidad de CI: openclaw-ci-limits.