[openclaw] OpenClaw: 런타임 플러그인 레지스트리 재사용을 통한 성능 최적화
PR 링크: openclaw/openclaw#76004 상태: Merged | 변경: +None / -None
들어가며
OpenClaw 프로젝트에서 resolvePreparedExtraParams 함수는 에이전트 런타임 플랜(buildAgentRuntimePlan)을 구축하는 과정에서 모든 임베디드 턴마다 실행되는 중요한 부분입니다. 이 함수는 prepareProviderExtraParams와 resolveProviderExtraParamsForTransport라는 두 가지 프로바이더 플러그인 훅을 호출하며, 이 과정에서 프로바이더 런타임 플러그인 해상도가 트리거됩니다. 문제는 에이전트, 모델, 설정 등 아무것도 변경되지 않았음에도 불구하고, 이 함수가 매 턴마다 약 1.9초의 동기 비용을 발생시킨다는 점이 프로파일링을 통해 확인되었습니다. 이는 안정적인 입력(프로바이더, modelId, agentId 등)에 대해 결과가 결정적임에도 불구하고 매번 재계산되어 불필요한 오버헤드를 유발하고 있었습니다.
이 PR은 이러한 비효율성을 해결하기 위해 resolvePreparedExtraParams 함수의 결과를 캐싱하여, 동일한 입력에 대해서는 재계산을 피하고 캐시된 값을 재사용함으로써 성능을 크게 향상시키는 것을 목표로 합니다.
코드 분석: resolvePreparedExtraParams 최적화
src/agents/pi-embedded-runner/extra-params.ts 파일 변경
이 PR의 핵심 변경사항은 src/agents/pi-embedded-runner/extra-params.ts 파일에 캐싱 로직을 도입한 것입니다. resolvePreparedExtraParams 함수는 이제 WeakMap과 Map을 조합한 캐시 메커니즘을 사용하여 이전에 계산된 결과를 저장하고 재사용합니다.
1. 캐시 저장소 초기화
--- a/src/agents/pi-embedded-runner/extra-params.ts
+++ b/src/agents/pi-embedded-runner/extra-params.ts
@@ -38,6 +38,8 @@ const providerRuntimeDeps = {
...defaultProviderRuntimeDeps,
};
+let preparedExtraParamsCache = new WeakMap<OpenClawConfig, Map<string, Record<string, unknown>>>();
+
export const __testing = {
setProviderRuntimeDepsForTest(
deps: Partial<typeof defaultProviderRuntimeDeps> | undefined,
@@ -51,6 +53,7 @@ export const __testing = {
deps?.wrapProviderStreamFn ?? defaultProviderRuntimeDeps.wrapProviderStreamFn;
},
resetProviderRuntimeDepsForTest(): void {
+ clearPreparedExtraParamsCache();
providerRuntimeDeps.prepareProviderExtraParams =
defaultProviderRuntimeDeps.prepareProviderExtraParams;
providerRuntimeDeps.resolveProviderExtraParamsForTransport =
preparedExtraParamsCache라는 WeakMap이 새로 추가되었습니다. 이 WeakMap은 OpenClawConfig 객체 참조를 키로 사용합니다. WeakMap을 사용하면 OpenClawConfig 객체가 더 이상 참조되지 않을 때 가비지 컬렉션될 수 있으므로, 수동으로 캐시를 무효화할 필요 없이 메모리 누수를 방지할 수 있습니다. 각 OpenClawConfig 객체에 대해서는 내부적으로 Map<string, Record<string, unknown>>을 사용하여 실제 캐시된 데이터를 저장합니다. __testing.resetProviderRuntimeDepsForTest 함수에 clearPreparedExtraParamsCache() 호출이 추가되어 테스트 환경에서 캐시를 쉽게 초기화할 수 있도록 했습니다.
2. 캐시 키 생성 로직
--- a/src/agents/pi-embedded-runner/extra-params.ts
+++ b/src/agents/pi-embedded-runner/extra-params.ts
@@ -134,6 +137,60 @@ function hasExplicitTransportSetting(settings: { transport?: unknown }): boolean
return Object.hasOwn(settings,
> ⚠️ **알림:** 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
- [onnxruntime] ONNX Runtime 스레드 풀의 지능형 대기: Exponential Backoff 도입으로 성능 및 전력 효율성 향상
- [sglang] SGLang 고성능 서빙: 비동기 알림 배치 처리와 SSE 고속 경로 최적화 분석
- [abtop] Linux 성능 최적화: lsof 대신 /proc/net/tcp 파싱으로 포트 탐색 개선
- [ollama] Ollama MLX Gemma4 성능 최적화: Fused Operations를 통한 효율성 증대
- [sglang] sglang, AMD MI35x 환경에서 GLM-5-MXFP4 모델의 성능 및 정확도 테스트 추가
PR Analysis 의 다른글
- 이전글 [sglang] HunyuanVideo VAE 디코딩 성능 향상: GroupNorm SiLU 커널 최적화
- 현재글 : [openclaw] OpenClaw: 런타임 플러그인 레지스트리 재사용을 통한 성능 최적화
- 다음글 [vllm] vLLM IR의 진화: maybe_inplace 오버로드를 통한 메모리 최적화
댓글