From 08330011dfd45b22d89e4bb5e7651accc0eb03ce Mon Sep 17 00:00:00 2001 From: Vibhu Prashar Date: Wed, 10 Sep 2025 17:51:58 +0530 Subject: [PATCH] chore: switch to using submodules for docs Signed-off-by: Vibhu Prashar --- .gitmodules | 8 + docs/kepler/design/metrics.md | 257 -- docs/kepler/design/metrics.zh-qc.md | 78 - docs/kepler/design/metrics.zh.md | 260 -- docs/kepler/developer/dev-docs.md | 73 - docs/kepler/developer/dev-docs.zh-qc.md | 79 - docs/kepler/developer/dev-docs.zh.md | 74 - docs/kepler/installation/guide.md | 327 -- docs/kepler/installation/guide.zh-qc.md | 65 - docs/kepler/installation/guide.zh.md | 330 -- .../usage/assets/power-attribution.excalidraw | 2732 ----------------- .../kepler/usage/assets/power-attribution.png | Bin 179630 -> 0 bytes docs/kepler/usage/configuration.md | 306 -- docs/kepler/usage/configuration.zh-qc.md | 80 - docs/kepler/usage/configuration.zh.md | 309 -- docs/kepler/usage/power-attribution.md | 215 -- docs/kepler/usage/power-attribution.zh-qc.md | 80 - docs/kepler/usage/power-attribution.zh.md | 205 -- docs/submodules/kepler | 1 + docs/submodules/kepler-operator | 1 + mkdocs.yml | 36 +- 21 files changed, 41 insertions(+), 5475 deletions(-) create mode 100644 .gitmodules delete mode 100644 docs/kepler/design/metrics.md delete mode 100644 docs/kepler/design/metrics.zh-qc.md delete mode 100644 docs/kepler/design/metrics.zh.md delete mode 100644 docs/kepler/developer/dev-docs.md delete mode 100644 docs/kepler/developer/dev-docs.zh-qc.md delete mode 100644 docs/kepler/developer/dev-docs.zh.md delete mode 100644 docs/kepler/installation/guide.md delete mode 100644 docs/kepler/installation/guide.zh-qc.md delete mode 100644 docs/kepler/installation/guide.zh.md delete mode 100644 docs/kepler/usage/assets/power-attribution.excalidraw delete mode 100644 docs/kepler/usage/assets/power-attribution.png delete mode 100644 docs/kepler/usage/configuration.md delete mode 100644 docs/kepler/usage/configuration.zh-qc.md delete mode 100644 docs/kepler/usage/configuration.zh.md delete mode 100644 docs/kepler/usage/power-attribution.md delete mode 100644 docs/kepler/usage/power-attribution.zh-qc.md delete mode 100644 docs/kepler/usage/power-attribution.zh.md create mode 160000 docs/submodules/kepler create mode 160000 docs/submodules/kepler-operator diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..faf45c92 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,8 @@ +[submodule "docs/submodules/kepler"] + path = docs/submodules/kepler + url = https://github.com/sustainable-computing-io/kepler.git + branch = main +[submodule "docs/submodules/kepler-operator"] + path = docs/submodules/kepler-operator + url = https://github.com/sustainable-computing-io/kepler-operator.git + branch = v1alpha1 diff --git a/docs/kepler/design/metrics.md b/docs/kepler/design/metrics.md deleted file mode 100644 index 7d728ddb..00000000 --- a/docs/kepler/design/metrics.md +++ /dev/null @@ -1,257 +0,0 @@ -# Kepler Metrics - -This document describes the metrics exported by Kepler for monitoring energy consumption at various levels (node, container, process, VM). - -## Overview - -Kepler exports metrics in Prometheus format that can be scraped by Prometheus or other compatible monitoring systems. - -### Metric Types - -- **COUNTER**: A cumulative metric that only increases over time -- **GAUGE**: A metric that can increase and decrease - -## Metrics Reference - -### Node Metrics - -These metrics provide energy and power information at the node level. - -#### kepler_node_cpu_active_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu in active state at node level in joules -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_active_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu in active state at node level in watts -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_idle_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu in idle state at node level in joules -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_idle_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu in idle state at node level in watts -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_info - -- **Type**: GAUGE -- **Description**: CPU information from procfs -- **Labels**: - - `processor` - - `vendor_id` - - `model_name` - - `physical_id` - - `core_id` - -#### kepler_node_cpu_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu at node level in joules -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_usage_ratio - -- **Type**: GAUGE -- **Description**: CPU usage ratio of a node (value between 0.0 and 1.0) -- **Constant Labels**: - - `node_name` - -#### kepler_node_cpu_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu at node level in watts -- **Labels**: - - `zone` - - `path` -- **Constant Labels**: - - `node_name` - -### Container Metrics - -These metrics provide energy and power information for containers. - -#### kepler_container_cpu_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu at container level in joules -- **Labels**: - - `container_id` - - `container_name` - - `runtime` - - `state` - - `zone` - - `pod_id` -- **Constant Labels**: - - `node_name` - -#### kepler_container_cpu_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu at container level in watts -- **Labels**: - - `container_id` - - `container_name` - - `runtime` - - `state` - - `zone` - - `pod_id` -- **Constant Labels**: - - `node_name` - -### Process Metrics - -These metrics provide energy and power information for individual processes. - -#### kepler_process_cpu_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu at process level in joules -- **Labels**: - - `pid` - - `comm` - - `exe` - - `type` - - `state` - - `container_id` - - `vm_id` - - `zone` -- **Constant Labels**: - - `node_name` - -#### kepler_process_cpu_seconds_total - -- **Type**: COUNTER -- **Description**: Total user and system time of cpu at process level in seconds -- **Labels**: - - `pid` - - `comm` - - `exe` - - `type` - - `container_id` - - `vm_id` -- **Constant Labels**: - - `node_name` - -#### kepler_process_cpu_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu at process level in watts -- **Labels**: - - `pid` - - `comm` - - `exe` - - `type` - - `state` - - `container_id` - - `vm_id` - - `zone` -- **Constant Labels**: - - `node_name` - -### Virtual Machine Metrics - -These metrics provide energy and power information for virtual machines. - -#### kepler_vm_cpu_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu at vm level in joules -- **Labels**: - - `vm_id` - - `vm_name` - - `hypervisor` - - `state` - - `zone` -- **Constant Labels**: - - `node_name` - -#### kepler_vm_cpu_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu at vm level in watts -- **Labels**: - - `vm_id` - - `vm_name` - - `hypervisor` - - `state` - - `zone` -- **Constant Labels**: - - `node_name` - -### Pod Metrics - -These metrics provide energy and power information for pods. - -#### kepler_pod_cpu_joules_total - -- **Type**: COUNTER -- **Description**: Energy consumption of cpu at pod level in joules -- **Labels**: - - `pod_id` - - `pod_name` - - `pod_namespace` - - `state` - - `zone` -- **Constant Labels**: - - `node_name` - -#### kepler_pod_cpu_watts - -- **Type**: GAUGE -- **Description**: Power consumption of cpu at pod level in watts -- **Labels**: - - `pod_id` - - `pod_name` - - `pod_namespace` - - `state` - - `zone` -- **Constant Labels**: - - `node_name` - -### Other Metrics - -Additional metrics provided by Kepler. - -#### kepler_build_info - -- **Type**: GAUGE -- **Description**: A metric with a constant '1' value labeled with version information -- **Labels**: - - `arch` - - `branch` - - `revision` - - `version` - - `goversion` - ---- - -This documentation was automatically generated by the gen-metric-docs tool. diff --git a/docs/kepler/design/metrics.zh-qc.md b/docs/kepler/design/metrics.zh-qc.md deleted file mode 100644 index 3a8336a7..00000000 --- a/docs/kepler/design/metrics.zh-qc.md +++ /dev/null @@ -1,78 +0,0 @@ -# Translation Quality Check Report: Kepler Metrics Reference - -**Original:** `docs/kepler/design/metrics.md` -**Translation:** `docs/kepler/design/metrics.zh.md` -**Reverse Translation:** `docs/kepler/design/metrics.rev.md` - -## Overall Assessment - -✅ **EXCELLENT TRANSLATION QUALITY** - -The Chinese translation demonstrates perfect accuracy for Prometheus metrics documentation. This highly structured technical reference maintains precision across all metric definitions, types, and descriptions. - -## Detailed Comparison - -### ✅ Strengths - -1. **Prometheus Metrics Terminology**: - - "COUNTER/GAUGE" → "COUNTER/GAUGE" (correctly preserved as technical terms) - - "Cumulative metric" → "累积指标" (accurate monitoring concept) - - "Energy consumption" → "能耗" (precise measurement term) - - "Power consumption" → "功耗" (correct electrical engineering term) - -2. **Metric Classification Excellence**: - - "Node/Container/Process/VM/Pod metrics" → "节点/容器/进程/虚拟机/Pod 指标" (accurate system hierarchy) - - "Active/Idle state" → "活动/空闲状态" (precise CPU state terminology) - - "Joules/Watts" → "焦耳/瓦特" (correct SI units preserved) - -3. **Label and Metadata Accuracy**: - - All metric names preserved exactly (`kepler_node_cpu_watts`, etc.) - - All label names unchanged (`container_id`, `pod_namespace`, etc.) - - Constant labels properly distinguished from variable labels - -### 📝 Technical Reference Excellence - -1. **Structured Documentation**: - - Consistent formatting across all metric definitions - - Type/Description/Labels structure maintained perfectly - - Hierarchical organization preserved (node → container → process → VM → pod) - -2. **Measurement Units and Values**: - - "Between 0.0 and 1.0" → "值在 0.0 和 1.0 之间" (precise range specification) - - "Total user and system time" → "总用户和系统时间" (accurate CPU time concept) - - "Constant '1' value" → "常量值为 '1'" (exact metric behavior description) - -3. **System Integration Concepts**: - - "Procfs" correctly preserved as Linux filesystem term - - "Hypervisor" appropriately maintained for virtualization context - - "Runtime" preserved as container runtime concept - -### 🔍 Technical Elements Verified - -- ✅ All metric names unchanged (critical for API compatibility) -- ✅ All label names preserved exactly -- ✅ Metric types (COUNTER/GAUGE) maintained -- ✅ Units of measurement accurate (joules, watts, seconds) -- ✅ Value ranges and constraints preserved - -### 📊 Documentation Structure - -1. **Reference Format**: Perfect consistency in metric documentation structure -2. **Categorization**: Clear separation of metric types by workload level -3. **Generation Note**: Tool attribution properly translated - -## Recommendation - -### ✅ APPROVED FOR PROMETHEUS METRICS REFERENCE - -This translation achieves the highest standards for technical API reference documentation. The translation maintains complete compatibility with Prometheus metric conventions while providing clear Chinese explanations. - -## Notes - -- Perfect preservation of all technical identifiers critical for monitoring system integration -- Excellent balance between technical accuracy and Chinese readability -- Structured format ideal for reference documentation use -- No risk of API compatibility issues due to unchanged metric/label names -- Suitable for technical teams implementing Kepler monitoring in Chinese environments - -This represents a gold standard for translating structured technical reference documentation. diff --git a/docs/kepler/design/metrics.zh.md b/docs/kepler/design/metrics.zh.md deleted file mode 100644 index c9e331a0..00000000 --- a/docs/kepler/design/metrics.zh.md +++ /dev/null @@ -1,260 +0,0 @@ -# Kepler 指标 - -!!! warning "机器翻译声明" - 本文档由 AI 语言模型 (Claude) 从英文自动翻译而成。如发现翻译错误或不准确之处,请在 [Kepler 文档项目](https://github.com/sustainable-computing-io/kepler-doc/issues) 中提交 issue 报告问题。 - -本文档描述了 Kepler 导出的指标,用于监控各个级别(节点、容器、进程、虚拟机)的能耗。 - -## 概述 - -Kepler 以 Prometheus 格式导出指标,可以被 Prometheus 或其他兼容的监控系统抓取。 - -### 指标类型 - -- **COUNTER**:随时间只增加的累积指标 -- **GAUGE**:可以增加和减少的指标 - -## 指标参考 - -### 节点指标 - -这些指标在节点级别提供能量和功率信息。 - -#### kepler_node_cpu_active_joules_total - -- **类型**:COUNTER -- **描述**:节点级别 CPU 在活动状态的能耗,单位为焦耳 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_active_watts - -- **类型**:GAUGE -- **描述**:节点级别 CPU 在活动状态的功耗,单位为瓦特 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_idle_joules_total - -- **类型**:COUNTER -- **描述**:节点级别 CPU 在空闲状态的能耗,单位为焦耳 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_idle_watts - -- **类型**:GAUGE -- **描述**:节点级别 CPU 在空闲状态的功耗,单位为瓦特 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_info - -- **类型**:GAUGE -- **描述**:来自 procfs 的 CPU 信息 -- **标签**: - - `processor` - - `vendor_id` - - `model_name` - - `physical_id` - - `core_id` - -#### kepler_node_cpu_joules_total - -- **类型**:COUNTER -- **描述**:节点级别 CPU 的能耗,单位为焦耳 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_usage_ratio - -- **类型**:GAUGE -- **描述**:节点的 CPU 使用率(值在 0.0 和 1.0 之间) -- **常量标签**: - - `node_name` - -#### kepler_node_cpu_watts - -- **类型**:GAUGE -- **描述**:节点级别 CPU 的功耗,单位为瓦特 -- **标签**: - - `zone` - - `path` -- **常量标签**: - - `node_name` - -### 容器指标 - -这些指标为容器提供能量和功率信息。 - -#### kepler_container_cpu_joules_total - -- **类型**:COUNTER -- **描述**:容器级别 CPU 的能耗,单位为焦耳 -- **标签**: - - `container_id` - - `container_name` - - `runtime` - - `state` - - `zone` - - `pod_id` -- **常量标签**: - - `node_name` - -#### kepler_container_cpu_watts - -- **类型**:GAUGE -- **描述**:容器级别 CPU 的功耗,单位为瓦特 -- **标签**: - - `container_id` - - `container_name` - - `runtime` - - `state` - - `zone` - - `pod_id` -- **常量标签**: - - `node_name` - -### 进程指标 - -这些指标为单个进程提供能量和功率信息。 - -#### kepler_process_cpu_joules_total - -- **类型**:COUNTER -- **描述**:进程级别 CPU 的能耗,单位为焦耳 -- **标签**: - - `pid` - - `comm` - - `exe` - - `type` - - `state` - - `container_id` - - `vm_id` - - `zone` -- **常量标签**: - - `node_name` - -#### kepler_process_cpu_seconds_total - -- **类型**:COUNTER -- **描述**:进程级别 CPU 的总用户和系统时间,单位为秒 -- **标签**: - - `pid` - - `comm` - - `exe` - - `type` - - `container_id` - - `vm_id` -- **常量标签**: - - `node_name` - -#### kepler_process_cpu_watts - -- **类型**:GAUGE -- **描述**:进程级别 CPU 的功耗,单位为瓦特 -- **标签**: - - `pid` - - `comm` - - `exe` - - `type` - - `state` - - `container_id` - - `vm_id` - - `zone` -- **常量标签**: - - `node_name` - -### 虚拟机指标 - -这些指标为虚拟机提供能量和功率信息。 - -#### kepler_vm_cpu_joules_total - -- **类型**:COUNTER -- **描述**:虚拟机级别 CPU 的能耗,单位为焦耳 -- **标签**: - - `vm_id` - - `vm_name` - - `hypervisor` - - `state` - - `zone` -- **常量标签**: - - `node_name` - -#### kepler_vm_cpu_watts - -- **类型**:GAUGE -- **描述**:虚拟机级别 CPU 的功耗,单位为瓦特 -- **标签**: - - `vm_id` - - `vm_name` - - `hypervisor` - - `state` - - `zone` -- **常量标签**: - - `node_name` - -### Pod 指标 - -这些指标为 Pod 提供能量和功率信息。 - -#### kepler_pod_cpu_joules_total - -- **类型**:COUNTER -- **描述**:Pod 级别 CPU 的能耗,单位为焦耳 -- **标签**: - - `pod_id` - - `pod_name` - - `pod_namespace` - - `state` - - `zone` -- **常量标签**: - - `node_name` - -#### kepler_pod_cpu_watts - -- **类型**:GAUGE -- **描述**:Pod 级别 CPU 的功耗,单位为瓦特 -- **标签**: - - `pod_id` - - `pod_name` - - `pod_namespace` - - `state` - - `zone` -- **常量标签**: - - `node_name` - -### 其他指标 - -Kepler 提供的其他指标。 - -#### kepler_build_info - -- **类型**:GAUGE -- **描述**:带有版本信息标签的常量值为 '1' 的指标 -- **标签**: - - `arch` - - `branch` - - `revision` - - `version` - - `goversion` - ---- - -本文档由 gen-metric-docs 工具自动生成。 diff --git a/docs/kepler/developer/dev-docs.md b/docs/kepler/developer/dev-docs.md deleted file mode 100644 index 2059456b..00000000 --- a/docs/kepler/developer/dev-docs.md +++ /dev/null @@ -1,73 +0,0 @@ -# Developer Documentation - -## 📍 Location of Developer Documentation - -Developer documentation for Kepler and related projects is maintained within -each project's repository under the `docs/developer/` directory. - -## 🔗 Kepler Developer Documentation - -For comprehensive developer documentation including architecture, development -workflows, testing strategies, and contribution guidelines, please visit: - -**🚀 [Kepler Developer Documentation](https://github.com/sustainable-computing-io/kepler/tree/main/docs/developer)** - -### What You'll Find There - -- **Architecture Overview** - Service-oriented design patterns and component structure -- **Development Environment Setup** - Docker Compose, local builds, and testing -- **Power Attribution Guide** - Deep dive into energy measurement and attribution algorithms -- **Pre-commit Hooks** - Code quality and automated checks setup -- **Release Workflow** - How releases are created and managed -- **Testing Strategy** - Unit tests, integration tests, and race detection -- **Service Interfaces** - Understanding the service framework and lifecycle management -- **Configuration Management** - YAML hierarchy and CLI flag systems - -## 🛠️ Quick Developer Setup - -For immediate development setup, the key commands are: - -```bash -# Clone and build -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler -make build - -# Development with Docker Compose (includes Grafana + Prometheus) -cd compose/dev -docker compose up -d - -# Run tests -make test - -# Local development -sudo ./bin/kepler --config.file hack/config.yaml -``` - -## 📚 Related Project Documentation - -For other projects in the Kepler ecosystem, check their respective repositories: - -- **Kepler Operator**: [sustainable-computing-io/kepler-operator](https://github.com/sustainable-computing-io/kepler-operator) -- **Kepler Model Server**: [sustainable-computing-io/kepler-model-server](https://github.com/sustainable-computing-io/kepler-model-server) - -## 🤝 Contributing - -Before contributing to Kepler, please review: - -1. **[Developer Documentation](https://github.com/sustainable-computing-io/kepler/tree/main/docs/developer)** - Technical implementation details -2. **[Contributing Guide](../../project/contributing.md)** - General contribution process -3. **[Code of Conduct](https://github.com/sustainable-computing-io/kepler/blob/main/CODE_OF_CONDUCT.md)** - Community guidelines - -## 💬 Developer Support - -- **GitHub Issues**: [Report bugs or request features](https://github.com/sustainable-computing-io/kepler/issues) -- **GitHub Discussions**: [Ask questions and share ideas](https://github.com/sustainable-computing-io/kepler/discussions) -- **Slack Channel**: [#kepler in CNCF Slack](https://cloud-native.slack.com/archives/C06HYDN4A01) -- **Community session recordings**: - - [youtube](https://youtube.com/playlist?list=PL8-Q56LqwwAjox1MSt8VzviKO-PBD4zue&si=pJhOwkatydv3-c1t) - - [bilibili](https://space.bilibili.com/276546/lists/2476604), in case you don't have access to youtube - ---- - -*Developer documentation is actively maintained in the project repository to ensure it stays current with the codebase.* diff --git a/docs/kepler/developer/dev-docs.zh-qc.md b/docs/kepler/developer/dev-docs.zh-qc.md deleted file mode 100644 index 0c0266c2..00000000 --- a/docs/kepler/developer/dev-docs.zh-qc.md +++ /dev/null @@ -1,79 +0,0 @@ -# Translation Quality Check Report: Developer Documentation Index - -**Original:** `docs/kepler/developer/dev-docs.md` -**Translation:** `docs/kepler/developer/dev-docs.zh.md` -**Reverse Translation:** `docs/kepler/developer/dev-docs.rev.md` - -## Overall Assessment - -✅ **EXCELLENT TRANSLATION QUALITY** - -The Chinese translation perfectly serves as a developer documentation index, maintaining clear navigation while providing appropriate Chinese technical terminology for development concepts. - -## Detailed Comparison - -### ✅ Strengths - -1. **Developer-Oriented Language**: - - "Developer Documentation" → "开发者文档" (standard technical role term) - - "Development workflows" → "开发工作流程" (accurate DevOps terminology) - - "Testing strategies" → "测试策略" (appropriate software engineering term) - - "Contribution guidelines" → "贡献指南" (correct open-source community term) - -2. **Technical Development Concepts**: - - "Service-oriented design patterns" → "面向服务的设计模式" (accurate architecture term) - - "Pre-commit hooks" → "Pre-commit Hook" (correctly preserved as technical term) - - "Race detection" → "竞态检测" (precise concurrent programming concept) - - "Lifecycle management" → "生命周期管理" (standard software architecture term) - -3. **Development Environment Setup**: - - All command-line instructions preserved exactly - - Docker Compose, make, git commands unchanged - - File paths and repository URLs intact - -### 📝 Navigation and Structure Excellence - -1. **Documentation Navigation**: - - Clear pointers to actual developer documentation location - - Appropriate explanation of distributed documentation structure - - Cross-references properly maintained with Chinese versions - -2. **Quick Start Guide**: - - Development setup commands perfectly preserved - - Code comments appropriately translated in context - - Local development instructions clear and accurate - -3. **Community Integration**: - - GitHub Issues/Discussions properly explained - - CNCF Slack channel information maintained - - Community interaction guidelines clearly communicated - -### 🔍 Technical Elements Verified - -- ✅ All Git commands and repository URLs preserved -- ✅ Docker Compose setup instructions unchanged -- ✅ Make targets preserved exactly -- ✅ File paths and directory structures intact -- ✅ External links and references maintained - -### 📊 Developer Experience Features - -1. **Ecosystem Overview**: Related projects properly introduced with correct repository links -2. **Contribution Process**: Clear workflow from documentation to contribution to support -3. **Technical Scope**: Appropriate balance of overview vs detailed implementation guidance - -## Recommendation - -### ✅ APPROVED FOR DEVELOPER COMMUNITY USE - -This translation effectively serves Chinese-speaking developers as an entry point to Kepler development, maintaining technical accuracy while providing clear navigation to detailed resources. - -## Notes - -- Excellent handling of mixed English/Chinese technical terminology -- Perfect preservation of all development commands and procedures -- Clear communication about distributed documentation structure -- Appropriate level of detail for an index/navigation document -- Effective integration with broader open-source community resources - -This represents an ideal approach to translating technical navigation documents that bridge to detailed implementation resources. diff --git a/docs/kepler/developer/dev-docs.zh.md b/docs/kepler/developer/dev-docs.zh.md deleted file mode 100644 index 515fb3ef..00000000 --- a/docs/kepler/developer/dev-docs.zh.md +++ /dev/null @@ -1,74 +0,0 @@ -# 开发者文档 - -!!! warning "机器翻译声明" - 本文档由 AI 语言模型 (Claude) 从英文自动翻译而成。如发现翻译错误或不准确之处,请在 [Kepler 文档项目](https://github.com/sustainable-computing-io/kepler-doc/issues) 中提交 issue 报告问题。 - -## 📍 开发者文档位置 - -Kepler 和相关项目的开发者文档在每个项目的仓库中的 `docs/developer/` 目录下维护。 - -## 🔗 Kepler 开发者文档 - -有关包括架构、开发工作流程、测试策略和贡献指南在内的全面开发者文档,请访问: - -**🚀 [Kepler 开发者文档](https://github.com/sustainable-computing-io/kepler/tree/main/docs/developer)** - -### 您将在那里找到什么 - -- **架构概述** - 面向服务的设计模式和组件结构 -- **开发环境设置** - Docker Compose、本地构建和测试 -- **功率归因指南** - 深入了解能量测量和归因算法 -- **Pre-commit Hook** - 代码质量和自动检查设置 -- **发布工作流程** - 如何创建和管理发布版本 -- **测试策略** - 单元测试、集成测试和竞态检测 -- **服务接口** - 理解服务框架和生命周期管理 -- **配置管理** - YAML 层次结构和 CLI 标志系统 - -## 🛠️ 快速开发者设置 - -对于即时开发设置,关键命令如下: - -```bash -# 克隆和构建 -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler -make build - -# 使用 Docker Compose 开发(包括 Grafana + Prometheus) -cd compose/dev -docker compose up -d - -# 运行测试 -make test - -# 本地开发 -sudo ./bin/kepler --config.file hack/config.yaml -``` - -## 📚 相关项目文档 - -对于 Kepler 生态系统中的其他项目,请查看其各自的仓库: - -- **Kepler Operator**: [sustainable-computing-io/kepler-operator](https://github.com/sustainable-computing-io/kepler-operator) -- **Kepler Model Server**: [sustainable-computing-io/kepler-model-server](https://github.com/sustainable-computing-io/kepler-model-server) - -## 🤝 贡献 - -在为 Kepler 贡献之前,请查看: - -1. **[开发者文档](https://github.com/sustainable-computing-io/kepler/tree/main/docs/developer)** - 技术实现细节 -2. **[贡献指南](../../project/contributing.zh.md)** - 一般贡献流程 -3. **[行为准则](https://github.com/sustainable-computing-io/kepler/blob/main/CODE_OF_CONDUCT.md)** - 社区准则 - -## 💬 开发者支持 - -- **GitHub Issues**: [报告错误或请求功能](https://github.com/sustainable-computing-io/kepler/issues) -- **GitHub Discussions**: [提问和分享想法](https://github.com/sustainable-computing-io/kepler/discussions) -- **Slack 频道**: [CNCF Slack 中的 #kepler](https://cloud-native.slack.com/archives/C06HYDN4A01) -- **社区会议录像**: - - [youtube](https://youtube.com/playlist?list=PL8-Q56LqwwAjox1MSt8VzviKO-PBD4zue&si=pJhOwkatydv3-c1t) - - [bilibili](https://space.bilibili.com/276546/lists/2476604), 如果你没有Youtube访问方式 - ---- - -*开发者文档在项目仓库中积极维护,以确保与代码库保持同步。* diff --git a/docs/kepler/installation/guide.md b/docs/kepler/installation/guide.md deleted file mode 100644 index 9a6e30f4..00000000 --- a/docs/kepler/installation/guide.md +++ /dev/null @@ -1,327 +0,0 @@ -# Kepler Installation Guide - -This guide covers different methods to install and run Kepler (Kubernetes-based Efficient Power Level Exporter) for monitoring energy consumption metrics. - -## Prerequisites - -- **For Local Installation**: Go 1.21+ and sudo access for hardware sensor access -- **For Kubernetes**: Kubernetes cluster (v1.20+) with kubectl configured -- **For Helm**: Helm 3.0+ installed - -## Installation Methods - -### 1. Helm Chart Installation (Recommended for Kubernetes) - -#### Prerequisites for Helm - -- Helm 3.0+ -- Kubernetes cluster with kubectl configured - -#### Install from Release (Recommended) - -```bash -# Install from GitHub release (replace VERSION with desired version, e.g., v0.10.2) -helm install kepler \ - https://github.com/sustainable-computing-io/kepler/releases/download/VERSION/kepler-helm-VERSION.tgz \ - --namespace kepler \ - --create-namespace - -# Example with specific version: -# helm install kepler \ -# https://github.com/sustainable-computing-io/kepler/releases/download/v0.10.2/kepler-helm-0.10.2.tgz \ -# --namespace kepler \ -# --create-namespace -``` - -#### Install from Source - -```bash -# Clone the repository -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler - -# Install Kepler using Helm -helm install kepler manifests/helm/kepler/ \ - --namespace kepler \ - --create-namespace \ - --set namespace.create=false -``` - -#### Customizing the Installation - -Create a `values.yaml` file to customize the installation: - -```yaml -# values.yaml -image: - repository: quay.io/sustainable_computing_io/kepler - tag: "v0.10.0" - pullPolicy: IfNotPresent - -resources: - limits: - cpu: 100m - memory: 400Mi - requests: - cpu: 100m - memory: 200Mi - -tolerations: - - operator: Exists - -nodeSelector: - kubernetes.io/os: linux - -# Enable ServiceMonitor for Prometheus -serviceMonitor: - enabled: true - interval: 30s -``` - -Install with custom values: - -```bash -helm install kepler manifests/helm/kepler/ \ - --namespace kepler \ - --create-namespace \ - --set namespace.create=false \ - --values values.yaml -``` - -#### Helm Management Commands - -```bash -# Check installation status -helm status kepler -n kepler - -# List releases -helm list -n kepler - -# Upgrade release -helm upgrade kepler manifests/helm/kepler/ -n kepler - -# Uninstall -helm uninstall kepler -n kepler -``` - -### 2. Local Installation - -#### Building from Source - -```bash -# Clone the repository -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler - -# Build Kepler -make build - -# Run Kepler (requires sudo for hardware access) -sudo ./bin/kepler --config.file hack/config.yaml -``` - -#### Configuration - -Kepler can be configured using YAML files or CLI flags. The default configuration is in `hack/config.yaml`: - -```bash -# Run with custom configuration -sudo ./bin/kepler --config.file /path/to/your/config.yaml - -# Run with CLI flags -sudo ./bin/kepler --log.level=debug --exporter.stdout -``` - -**Access Points:** - -- Metrics: - -### 3. Docker Compose (Recommended for Development) - -The Docker Compose setup provides a complete monitoring stack with Kepler, Prometheus, and Grafana: - -```bash -cd compose/dev - -# Start the complete stack -docker compose up -d - -# View logs -docker compose logs -f kepler - -# Stop the stack -docker compose down -``` - -**Access Points:** - -- Kepler Metrics: -- Prometheus: -- Grafana: (admin/admin) - -### 4. Kubernetes with Kustomize - -#### Quick Setup with Kind - -```bash -# Create a local cluster with monitoring stack -make cluster-up - -# Deploy Kepler -make deploy - -# Clean up -make cluster-down -``` - -#### Manual Kubernetes Deployment - -```bash -# Deploy using kustomize -kubectl kustomize manifests/k8s | \ - sed -e "s||quay.io/sustainable_computing_io/kepler:latest|g" | \ - kubectl apply --server-side --force-conflicts -f - - -# Check deployment status -kubectl get pods -n kepler - -# Access metrics (port-forward) -kubectl port-forward -n kepler svc/kepler 28282:28282 -``` - -#### Custom Image Deployment - -```bash -# Build and push custom image -make image push IMG_BASE=your-registry.com/yourorg VERSION=v1.0.0 - -# Deploy with custom image -make deploy IMG_BASE=your-registry.com/yourorg VERSION=v1.0.0 -``` - -## Verification - -### Check Deployment Status - -```bash -# Check pods -kubectl get pods -n kepler - -# Check DaemonSet -kubectl get daemonset -n kepler - -# Check services -kubectl get svc -n kepler - -# View logs -kubectl logs -n kepler -l app.kubernetes.io/name=kepler -``` - -### Access Metrics - -```bash -# Port forward to access metrics locally -kubectl port-forward -n kepler svc/kepler 28282:28282 - -# Test metrics endpoint -curl http://localhost:28282/metrics -``` - -### Verify Metrics Collection - -Look for key metrics like: - -- `kepler_node_cpu_watts` -- `kepler_container_cpu_watts` -- `kepler_process_cpu_watts` - -## Configuration Options - -### Helm Chart Values - -Key configuration options in `values.yaml`: - -```yaml -# Image configuration -image: - repository: quay.io/sustainable_computing_io/kepler - tag: "latest" - pullPolicy: IfNotPresent - -# DaemonSet configuration -daemonset: - hostPID: true - securityContext: - privileged: true - -# Resource limits -resources: - limits: - cpu: 100m - memory: 400Mi - requests: - cpu: 100m - memory: 200Mi - -# Node scheduling -tolerations: - - operator: Exists - -nodeSelector: - kubernetes.io/os: linux - -# Monitoring -serviceMonitor: - enabled: true - interval: 30s - scrapeTimeout: 10s -``` - -### Environment-Specific Settings - -- **Development**: Use fake CPU meter when RAPL unavailable -- **Production**: Ensure nodes have Intel RAPL support -- **Cloud**: May need different privilege configurations - -## Troubleshooting - -### Common Issues - -1. **Permission Denied**: Ensure privileged security context is enabled -2. **No Metrics**: Check if nodes support Intel RAPL sensors -3. **Pod Crashes**: Review logs for hardware access issues -4. **ServiceMonitor Not Found**: Ensure Prometheus Operator is installed - -### Debug Commands - -```bash -# Check pod logs -kubectl logs -n kepler -l app.kubernetes.io/name=kepler - -# Describe pod for events -kubectl describe pod -n kepler -l app.kubernetes.io/name=kepler - -# Check node hardware -kubectl exec -n kepler -it -- ls /sys/class/powercap/intel-rapl - -# Test with fake meter (development) -helm upgrade kepler manifests/helm/kepler/ -n kepler \ - --set env.KEPLER_FAKE_CPU_METER=true -``` - -### Getting Help - -- **Documentation**: -- **Issues**: -- **Discussions**: -- **Slack**: [#kepler channel in CNCF Slack](https://cloud-native.slack.com/archives/C06HYDN4A01) - -## Next Steps - -After successful installation: - -1. **Set up Prometheus**: Configure scraping of Kepler metrics -2. **Install Grafana**: Use pre-built dashboards for visualization -3. **Configure Alerts**: Set up energy consumption alerts -4. **Explore Metrics**: Learn about available energy metrics -5. **Optimize Workloads**: Use insights to improve energy efficiency diff --git a/docs/kepler/installation/guide.zh-qc.md b/docs/kepler/installation/guide.zh-qc.md deleted file mode 100644 index 5a02b760..00000000 --- a/docs/kepler/installation/guide.zh-qc.md +++ /dev/null @@ -1,65 +0,0 @@ -# Translation Quality Check Report: Kepler Installation Guide - -**Original:** `docs/kepler/installation/guide.md` -**Translation:** `docs/kepler/installation/guide.zh.md` -**Reverse Translation:** `docs/kepler/installation/guide.rev.md` - -## Overall Assessment - -✅ **EXCELLENT TRANSLATION QUALITY** - -The Chinese translation demonstrates high accuracy with proper technical terminology, complete preservation of code blocks, and appropriate adaptation to Chinese language conventions. - -## Detailed Comparison - -### ✅ Strengths - -1. **Technical Accuracy**: All technical terms properly translated - - "Kubernetes-based Efficient Power Level Exporter" → "基于 Kubernetes 的高效功率级别导出器" - - "energy consumption metrics" → "能耗指标" - -2. **Code Preservation**: All code blocks, commands, and URLs preserved exactly - - Bash commands unchanged - - YAML configurations intact - - GitHub URLs preserved - -3. **Structure Maintenance**: Document structure and formatting maintained - - Headers properly translated - - Lists and bullet points preserved - - Admonition blocks (warning) properly formatted - -4. **Contextual Translation**: Proper adaptation for Chinese audience - - "先决条件" instead of literal "前提条件" - - "故障排除" for troubleshooting - - "后续步骤" for next steps - -### 📝 Minor Differences - -1. **Translation Disclaimer**: Chinese version includes machine translation warning (expected) - -2. **Terminology Consistency**: - - "Repository" consistently translated as "仓库" - - "Deploy/Deployment" consistently as "部署" - - "Configuration" consistently as "配置" - -### 🔍 Technical Elements Verified - -- ✅ All Helm commands preserved -- ✅ Kubernetes resource names unchanged -- ✅ Port numbers and URLs intact -- ✅ File paths preserved -- ✅ Environment variables maintained -- ✅ YAML syntax correct - -## Recommendation - -### ✅ APPROVED FOR PRODUCTION USE - -This translation meets professional standards for technical documentation. The translation accurately conveys all technical information while being accessible to Chinese-speaking users. - -## Notes - -- Translation includes appropriate disclaimer about AI translation -- All cross-references and internal links properly maintained -- Technical context preserved throughout document -- No loss of critical information identified diff --git a/docs/kepler/installation/guide.zh.md b/docs/kepler/installation/guide.zh.md deleted file mode 100644 index 9b107fc4..00000000 --- a/docs/kepler/installation/guide.zh.md +++ /dev/null @@ -1,330 +0,0 @@ -# Kepler 安装指南 - -!!! warning "机器翻译声明" - 本文档由 AI 语言模型 (Claude) 从英文自动翻译而成。如发现翻译错误或不准确之处,请在 [Kepler 文档项目](https://github.com/sustainable-computing-io/kepler-doc/issues) 中提交 issue 报告问题。 - -本指南涵盖了安装和运行 Kepler(基于 Kubernetes 的高效功率级别导出器)以监控能耗指标的不同方法。 - -## 先决条件 - -- **本地安装**:Go 1.21+ 和 sudo 权限以访问硬件传感器 -- **Kubernetes**:Kubernetes 集群(v1.20+)且已配置 kubectl -- **Helm**:已安装 Helm 3.0+ - -## 安装方法 - -### 1. Helm Chart 安装(推荐用于 Kubernetes) - -#### Helm 先决条件 - -- Helm 3.0+ -- 已配置 kubectl 的 Kubernetes 集群 - -#### 从发布版安装(推荐) - -```bash -# 从 GitHub 发布版安装(将 VERSION 替换为所需版本,例如 v0.10.2) -helm install kepler \ - https://github.com/sustainable-computing-io/kepler/releases/download/VERSION/kepler-helm-VERSION.tgz \ - --namespace kepler \ - --create-namespace - -# 指定版本的示例: -# helm install kepler \ -# https://github.com/sustainable-computing-io/kepler/releases/download/v0.10.2/kepler-helm-0.10.2.tgz \ -# --namespace kepler \ -# --create-namespace -``` - -#### 从源码安装 - -```bash -# 克隆仓库 -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler - -# 使用 Helm 安装 Kepler -helm install kepler manifests/helm/kepler/ \ - --namespace kepler \ - --create-namespace \ - --set namespace.create=false -``` - -#### 自定义安装 - -创建 `values.yaml` 文件来自定义安装: - -```yaml -# values.yaml -image: - repository: quay.io/sustainable_computing_io/kepler - tag: "v0.10.0" - pullPolicy: IfNotPresent - -resources: - limits: - cpu: 100m - memory: 400Mi - requests: - cpu: 100m - memory: 200Mi - -tolerations: - - operator: Exists - -nodeSelector: - kubernetes.io/os: linux - -# 为 Prometheus 启用 ServiceMonitor -serviceMonitor: - enabled: true - interval: 30s -``` - -使用自定义值安装: - -```bash -helm install kepler manifests/helm/kepler/ \ - --namespace kepler \ - --create-namespace \ - --set namespace.create=false \ - --values values.yaml -``` - -#### Helm 管理命令 - -```bash -# 检查安装状态 -helm status kepler -n kepler - -# 列出发布版 -helm list -n kepler - -# 升级发布版 -helm upgrade kepler manifests/helm/kepler/ -n kepler - -# 卸载 -helm uninstall kepler -n kepler -``` - -### 2. 本地安装 - -#### 从源码构建 - -```bash -# 克隆仓库 -git clone https://github.com/sustainable-computing-io/kepler.git -cd kepler - -# 构建 Kepler -make build - -# 运行 Kepler(需要 sudo 权限访问硬件) -sudo ./bin/kepler --config.file hack/config.yaml -``` - -#### 配置 - -Kepler 可以使用 YAML 文件或 CLI 标志进行配置。默认配置在 `hack/config.yaml` 中: - -```bash -# 使用自定义配置运行 -sudo ./bin/kepler --config.file /path/to/your/config.yaml - -# 使用 CLI 标志运行 -sudo ./bin/kepler --log.level=debug --exporter.stdout -``` - -**访问端点:** - -- 指标: - -### 3. Docker Compose(推荐用于开发) - -Docker Compose 设置提供了包含 Kepler、Prometheus 和 Grafana 的完整监控堆栈: - -```bash -cd compose/dev - -# 启动完整堆栈 -docker compose up -d - -# 查看日志 -docker compose logs -f kepler - -# 停止堆栈 -docker compose down -``` - -**访问端点:** - -- Kepler 指标: -- Prometheus: -- Grafana:(admin/admin) - -### 4. 使用 Kustomize 的 Kubernetes - -#### 使用 Kind 快速设置 - -```bash -# 创建带监控堆栈的本地集群 -make cluster-up - -# 部署 Kepler -make deploy - -# 清理 -make cluster-down -``` - -#### 手动 Kubernetes 部署 - -```bash -# 使用 kustomize 部署 -kubectl kustomize manifests/k8s | \ - sed -e "s||quay.io/sustainable_computing_io/kepler:latest|g" | \ - kubectl apply --server-side --force-conflicts -f - - -# 检查部署状态 -kubectl get pods -n kepler - -# 访问指标(端口转发) -kubectl port-forward -n kepler svc/kepler 28282:28282 -``` - -#### 自定义镜像部署 - -```bash -# 构建并推送自定义镜像 -make image push IMG_BASE=your-registry.com/yourorg VERSION=v1.0.0 - -# 使用自定义镜像部署 -make deploy IMG_BASE=your-registry.com/yourorg VERSION=v1.0.0 -``` - -## 验证 - -### 检查部署状态 - -```bash -# 检查 Pod -kubectl get pods -n kepler - -# 检查 DaemonSet -kubectl get daemonset -n kepler - -# 检查服务 -kubectl get svc -n kepler - -# 查看日志 -kubectl logs -n kepler -l app.kubernetes.io/name=kepler -``` - -### 访问指标 - -```bash -# 端口转发以本地访问指标 -kubectl port-forward -n kepler svc/kepler 28282:28282 - -# 测试指标端点 -curl http://localhost:28282/metrics -``` - -### 验证指标收集 - -查找关键指标,如: - -- `kepler_node_cpu_watts` -- `kepler_container_cpu_watts` -- `kepler_process_cpu_watts` - -## 配置选项 - -### Helm Chart 值 - -`values.yaml` 中的关键配置选项: - -```yaml -# 镜像配置 -image: - repository: quay.io/sustainable_computing_io/kepler - tag: "latest" - pullPolicy: IfNotPresent - -# DaemonSet 配置 -daemonset: - hostPID: true - securityContext: - privileged: true - -# 资源限制 -resources: - limits: - cpu: 100m - memory: 400Mi - requests: - cpu: 100m - memory: 200Mi - -# 节点调度 -tolerations: - - operator: Exists - -nodeSelector: - kubernetes.io/os: linux - -# 监控 -serviceMonitor: - enabled: true - interval: 30s - scrapeTimeout: 10s -``` - -### 环境特定设置 - -- **开发**:在 RAPL 不可用时使用假 CPU 计量器 -- **生产**:确保节点支持 Intel RAPL -- **云端**:可能需要不同的权限配置 - -## 故障排除 - -### 常见问题 - -1. **权限被拒绝**:确保启用了特权安全上下文 -2. **无指标**:检查节点是否支持 Intel RAPL 传感器 -3. **Pod 崩溃**:查看日志了解硬件访问问题 -4. **找不到 ServiceMonitor**:确保已安装 Prometheus Operator - -### 调试命令 - -```bash -# 检查 Pod 日志 -kubectl logs -n kepler -l app.kubernetes.io/name=kepler - -# 描述 Pod 以查看事件 -kubectl describe pod -n kepler -l app.kubernetes.io/name=kepler - -# 检查节点硬件 -kubectl exec -n kepler -it -- ls /sys/class/powercap/intel-rapl - -# 使用假计量器进行测试(开发) -helm upgrade kepler manifests/helm/kepler/ -n kepler \ - --set env.KEPLER_FAKE_CPU_METER=true -``` - -### 获取帮助 - -- **文档**: -- **问题**: -- **讨论**: -- **Slack**:[CNCF Slack 中的 #kepler 频道](https://cloud-native.slack.com/archives/C06HYDN4A01) - -## 后续步骤 - -成功安装后: - -1. **设置 Prometheus**:配置 Kepler 指标抓取 -2. **安装 Grafana**:使用预构建的仪表板进行可视化 -3. **配置告警**:设置能耗告警 -4. **探索指标**:了解可用的能耗指标 -5. **优化工作负载**:使用洞察来提高能效 diff --git a/docs/kepler/usage/assets/power-attribution.excalidraw b/docs/kepler/usage/assets/power-attribution.excalidraw deleted file mode 100644 index 5c1a15f7..00000000 --- a/docs/kepler/usage/assets/power-attribution.excalidraw +++ /dev/null @@ -1,2732 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://excalidraw.com", - "elements": [ - { - "id": "1XRePpaJSWDmJ7vYkOyTB", - "type": "rectangle", - "x": 2214.4533421513697, - "y": 1277.2779503320116, - "width": 405.2566337668242, - "height": 368.6995192543585, - "angle": 0, - "strokeColor": "#e03131", - "backgroundColor": "#eaddd7", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "a0", - "roundness": { - "type": 3 - }, - "seed": 385763071, - "version": 1286, - "versionNonce": 1460455327, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "Tv0V-Us4SVtz2DLANKr0L", - "type": "rectangle", - "x": 1536.568056751259, - "y": 150.25214232388066, - "width": 495.385340277895, - "height": 81.50175082367025, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a1", - "roundness": { - "type": 3 - }, - "seed": 1119555359, - "version": 1047, - "versionNonce": 1248885695, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "FxfgWnLs4U2r-ia0osX6o", - "type": "text", - "x": 1575.0867879938814, - "y": 172.13514865897537, - "width": 266.111901610868, - "height": 42.68030224180979, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a2", - "roundness": null, - "seed": 1206506303, - "version": 1242, - "versionNonce": 1535683551, - "isDeleted": false, - "boundElements": [ - { - "id": "gCGIKL1hQWrdXqSCbCoKV", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "75% cpu ", - "fontSize": 34.14424179344783, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "75% cpu ", - "autoResize": false, - "lineHeight": 1.25 - }, - { - "id": "NMriYEooml-cqsEIImkH6", - "type": "line", - "x": 1868.5620519295007, - "y": 147.60278916372704, - "width": 0.808462407634579, - "height": 87.69632089297602, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a3", - "roundness": { - "type": 2 - }, - "seed": 518722399, - "version": 1061, - "versionNonce": 822640671, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -0.808462407634579, - 87.69632089297602 - ] - ], - "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, - "startArrowhead": null, - "endArrowhead": null, - "polygon": false - }, - { - "id": "FOlbdasWmsOxUQHi42jXw", - "type": "rectangle", - "x": 1473.4997950800353, - "y": 325.13906463094304, - "width": 610.1651518266211, - "height": 79.0053500109077, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a4", - "roundness": { - "type": 3 - }, - "seed": 1611616127, - "version": 1189, - "versionNonce": 1298211903, - "isDeleted": false, - "boundElements": [ - { - "id": "LWLxieSNDefwBPpy5e7g9", - "type": "arrow" - }, - { - "id": "z5c4HX9aKN7ejhrd1kpnN", - "type": "arrow" - }, - { - "id": "gCGIKL1hQWrdXqSCbCoKV", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "5ShAhIgiFVnOBsVNM3ivq", - "type": "text", - "x": 1568.6907809951335, - "y": 354.905746472047, - "width": 66.135986328125, - "height": 35, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a5", - "roundness": null, - "seed": 1167525791, - "version": 1120, - "versionNonce": 679054527, - "isDeleted": false, - "boundElements": [ - { - "id": "gCGIKL1hQWrdXqSCbCoKV", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "75 W", - "fontSize": 28, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "75 W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "2OVMT-44zDGuZfbc-Eqn0", - "type": "line", - "x": 1868.302579197325, - "y": 321.7577252368508, - "width": 0.808462407634579, - "height": 87.69632089297602, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a6", - "roundness": { - "type": 2 - }, - "seed": 1840430015, - "version": 1188, - "versionNonce": 407346399, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -0.808462407634579, - 87.69632089297602 - ] - ], - "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, - "startArrowhead": null, - "endArrowhead": null, - "polygon": false - }, - { - "id": "B4DZmLHA1k1xP7QIlUcxL", - "type": "text", - "x": 1892.348707618763, - "y": 351.1878261240065, - "width": 185.4159393310547, - "height": 35, - "angle": 0, - "strokeColor": "#228be6", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a7", - "roundness": null, - "seed": 1552083935, - "version": 1059, - "versionNonce": 1612622079, - "isDeleted": false, - "boundElements": [ - { - "id": "LWLxieSNDefwBPpy5e7g9", - "type": "arrow" - }, - { - "id": "W2cPSvqfPy05o2NhrLAjB", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "25W - unused", - "fontSize": 28, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "25W - unused", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "6nV4RlJiK2dZmIE5Jm7TX", - "type": "text", - "x": 1445.0086414897796, - "y": 44.02503884363091, - "width": 636.4339065995038, - "height": 90.46427052485654, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "a8", - "roundness": null, - "seed": 1041766399, - "version": 1156, - "versionNonce": 702133567, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "Power Attribution", - "fontSize": 72.37141641988524, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Power Attribution", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "AgzW0cLTSTnKL7Aoua8Gx", - "type": "text", - "x": 1893.068745875029, - "y": 171.74939027453252, - "width": 119.19593811035156, - "height": 35, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [], - "frameId": null, - "index": "a9", - "roundness": null, - "seed": 1752350751, - "version": 1069, - "versionNonce": 1015985503, - "isDeleted": false, - "boundElements": [ - { - "id": "LWLxieSNDefwBPpy5e7g9", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "25% idle", - "fontSize": 28, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "25% idle", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "LWLxieSNDefwBPpy5e7g9", - "type": "arrow", - "x": 1934.1922274310725, - "y": 211.74939027453263, - "width": 93.78432219348201, - "height": 108.38967435640996, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [], - "frameId": null, - "index": "aA", - "roundness": null, - "seed": 495150143, - "version": 3135, - "versionNonce": 607791519, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 0, - 54.19483717820515 - ], - [ - 93.78432219348201, - 54.19483717820515 - ], - [ - 93.78432219348201, - 108.38967435640996 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "AgzW0cLTSTnKL7Aoua8Gx", - "focus": 0.3099851856030595, - "gap": 5.000000000000114, - "fixedPoint": [ - 0.34500740719848555, - 1.1428571428571461 - ] - }, - "endBinding": { - "elementId": "FOlbdasWmsOxUQHi42jXw", - "focus": 0.8174645106643993, - "gap": 5.000000000000455, - "fixedPoint": [ - 0.9087322553321994, - -0.06328685334993314 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "gCGIKL1hQWrdXqSCbCoKV", - "type": "arrow", - "x": 1707.9271308332027, - "y": 219.81545090078515, - "width": 60.66653238870413, - "height": 100.32361373015743, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [], - "frameId": null, - "index": "aB", - "roundness": null, - "seed": 220890207, - "version": 3281, - "versionNonce": 262249919, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 0, - 50.161806865078944 - ], - [ - -60.66653238870413, - 50.161806865078944 - ], - [ - -60.66653238870413, - 100.32361373015743 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "FxfgWnLs4U2r-ia0osX6o", - "focus": 0.0016204308398678523, - "gap": 5, - "fixedPoint": [ - 0.4991897845800656, - 1.1428571428571428 - ] - }, - "endBinding": { - "elementId": "FOlbdasWmsOxUQHi42jXw", - "focus": -0.43044664925787895, - "gap": 5.000000000000455, - "fixedPoint": [ - 0.2847766753710601, - -0.06328685334993314 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "f4BNoJJCNH-nYXjN3Qnms", - "type": "text", - "x": 1756.6844941203963, - "y": 265.52584617616435, - "width": 181.51875029291955, - "height": 89.29496359273668, - "angle": 0, - "strokeColor": "#c2255c", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [], - "frameId": null, - "index": "aC", - "roundness": null, - "seed": 389587071, - "version": 1332, - "versionNonce": 1648725471, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "100W", - "fontSize": 71.43597087418925, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "100W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "TQRyz2Veo3RgL2By6_w89", - "type": "text", - "x": 2260.667907288207, - "y": 388.8564164955462, - "width": 488.01776123046875, - "height": 41.047682162285106, - "angle": 0, - "strokeColor": "#228be6", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 90, - "groupIds": [], - "frameId": null, - "index": "aD", - "roundness": null, - "seed": 1299069087, - "version": 1169, - "versionNonce": 2000058879, - "isDeleted": false, - "boundElements": [ - { - "id": "W2cPSvqfPy05o2NhrLAjB", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "kepler_node_cpu_idle_watts{}", - "fontSize": 32.838145729828085, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_node_cpu_idle_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "W2cPSvqfPy05o2NhrLAjB", - "type": "arrow", - "x": 2082.7646469498177, - "y": 385.0372347781779, - "width": 172.90326033838937, - "height": 30.69979256548777, - "angle": 0, - "strokeColor": "#228be6", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aE", - "roundness": null, - "seed": 897305791, - "version": 2903, - "versionNonce": 133252671, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 86.45163016919469, - 0 - ], - [ - 86.45163016919469, - 30.69979256548777 - ], - [ - 172.90326033838937, - 30.69979256548777 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "B4DZmLHA1k1xP7QIlUcxL", - "focus": 0.9342519230954992, - "gap": 5, - "fixedPoint": [ - 1.026780367721713, - 0.9671259615477571 - ] - }, - "endBinding": { - "elementId": "TQRyz2Veo3RgL2By6_w89", - "focus": -0.3097261249414697, - "gap": 5.000000000003638, - "fixedPoint": [ - -0.009980522629977314, - 0.6548630624707406 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "39ECs3AUE5tfHkhJBjdc5", - "type": "text", - "x": 592.6205931898603, - "y": 342.83688344816187, - "width": 651.444091796875, - "height": 50.290725803173046, - "angle": 0, - "strokeColor": "#e64980", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aF", - "roundness": null, - "seed": 1258413279, - "version": 1516, - "versionNonce": 1938564703, - "isDeleted": false, - "boundElements": [ - { - "id": "z5c4HX9aKN7ejhrd1kpnN", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "kepler_node_cpu_active_watts{}", - "fontSize": 40.23258064253844, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_node_cpu_active_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "z5c4HX9aKN7ejhrd1kpnN", - "type": "arrow", - "x": 1468.4997950800353, - "y": 371.41089209109646, - "width": 510.69812598313456, - "height": 68.57400864293459, - "angle": 0, - "strokeColor": "#c2255c", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aG", - "roundness": null, - "seed": 1100015871, - "version": 3202, - "versionNonce": 1565481631, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -109.71755504664998, - 0 - ], - [ - -109.71755504664998, - -68.57400864293459 - ], - [ - -510.69812598313456, - -68.57400864293459 - ], - [ - -510.69812598313456, - -33.57400864293504 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "FOlbdasWmsOxUQHi42jXw", - "focus": -0.1713593434815469, - "gap": 5, - "fixedPoint": [ - -0.00819450272607629, - 0.5856796717407745 - ] - }, - "endBinding": { - "elementId": "39ECs3AUE5tfHkhJBjdc5", - "focus": 0.1211432585097617, - "gap": 5.000000000000455, - "fixedPoint": [ - 0.5605716292548809, - -0.09942190970894646 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "HLcOmanNarkONVcVKe0Gb", - "type": "text", - "x": 1006.2082651903802, - "y": 1212.905725711187, - "width": 1106.2251078858426, - "height": 426.9850764635573, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aH", - "roundness": null, - "seed": 111767839, - "version": 2078, - "versionNonce": 820555455, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "16 Core Machine \n* 4 core allocated to VM\n* VM uses 100% CPU\n* VM use 4/16 of CPU -> Cpu usage is 25% and idle is 75%\n\n* Node power consumption is 40W\n* 25% of 40W is 10W\n* 100% of cpu usage is VM -> 10W \n", - "fontSize": 37.954229018982865, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "16 Core Machine \n* 4 core allocated to VM\n* VM uses 100% CPU\n* VM use 4/16 of CPU -> Cpu usage is 25% and idle is 75%\n\n* Node power consumption is 40W\n* 25% of 40W is 10W\n* 100% of cpu usage is VM -> 10W \n", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "qiZ6nwQumsqI26j4CQY8e", - "type": "rectangle", - "x": 2248.212648485711, - "y": 1306.5553034789004, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#fa5252", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "SxeJ8ddw9xkqIS2JCB6qE" - ], - "frameId": null, - "index": "aI", - "roundness": { - "type": 3 - }, - "seed": 62649663, - "version": 1270, - "versionNonce": 1250066143, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "IdXfxtRS5h3FchBIKWKfH", - "type": "rectangle", - "x": 2339.3180341368534, - "y": 1306.5553034789, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#fa5252", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "SxeJ8ddw9xkqIS2JCB6qE" - ], - "frameId": null, - "index": "aJ", - "roundness": { - "type": 3 - }, - "seed": 539555167, - "version": 1345, - "versionNonce": 212683519, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "F_afMtRL9VLMmpzylnxLG", - "type": "rectangle", - "x": 2430.423419787996, - "y": 1306.5553034789004, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#fa5252", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "SxeJ8ddw9xkqIS2JCB6qE" - ], - "frameId": null, - "index": "aK", - "roundness": { - "type": 3 - }, - "seed": 54587775, - "version": 1325, - "versionNonce": 870945567, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "wLzWm4OFMOIxX99jOD2Iz", - "type": "rectangle", - "x": 2521.5288054391385, - "y": 1306.5553034789, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#fa5252", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "SxeJ8ddw9xkqIS2JCB6qE" - ], - "frameId": null, - "index": "aL", - "roundness": { - "type": 3 - }, - "seed": 373582239, - "version": 1399, - "versionNonce": 413652799, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "HfWPHx7G5_rR5a0iGz8wm", - "type": "rectangle", - "x": 2248.623626657225, - "y": 1403.3258606906288, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "Wx0Mxn__kUoXSQweHa9Ke" - ], - "frameId": null, - "index": "aM", - "roundness": { - "type": 3 - }, - "seed": 1180949951, - "version": 1427, - "versionNonce": 826840927, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "kgcnuifdhPf1DWGt7nDH8", - "type": "rectangle", - "x": 2339.7290123083676, - "y": 1403.325860690628, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "Wx0Mxn__kUoXSQweHa9Ke" - ], - "frameId": null, - "index": "aN", - "roundness": { - "type": 3 - }, - "seed": 113233375, - "version": 1502, - "versionNonce": 1411142527, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "cCXdUVSJY_tTNebsJamAs", - "type": "rectangle", - "x": 2430.83439795951, - "y": 1403.3258606906288, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "Wx0Mxn__kUoXSQweHa9Ke" - ], - "frameId": null, - "index": "aO", - "roundness": { - "type": 3 - }, - "seed": 308853247, - "version": 1482, - "versionNonce": 962825119, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "0Y_M-LY41cpLqijSk8RRW", - "type": "rectangle", - "x": 2521.9397836106527, - "y": 1403.325860690628, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "Wx0Mxn__kUoXSQweHa9Ke" - ], - "frameId": null, - "index": "aP", - "roundness": { - "type": 3 - }, - "seed": 1851728415, - "version": 1556, - "versionNonce": 1028571071, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "j3IBKe7qcxM2UUZx3Gmq7", - "type": "rectangle", - "x": 2249.3201998292825, - "y": 1474.4969184709826, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "GJ0eJt4M8hd9Jg6rr7siw" - ], - "frameId": null, - "index": "aQ", - "roundness": { - "type": 3 - }, - "seed": 731088447, - "version": 1437, - "versionNonce": 1644064735, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "FLZ-81BbctWYqvWxJV4Pw", - "type": "rectangle", - "x": 2340.425585480425, - "y": 1474.4969184709817, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "GJ0eJt4M8hd9Jg6rr7siw" - ], - "frameId": null, - "index": "aR", - "roundness": { - "type": 3 - }, - "seed": 1759929951, - "version": 1512, - "versionNonce": 293805055, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "8whuSnXYPkrvIOGZRRO8c", - "type": "rectangle", - "x": 2431.5309711315676, - "y": 1474.4969184709826, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "GJ0eJt4M8hd9Jg6rr7siw" - ], - "frameId": null, - "index": "aS", - "roundness": { - "type": 3 - }, - "seed": 354959999, - "version": 1492, - "versionNonce": 534594591, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "gF5xWfKSxzyD3FZcg6EAf", - "type": "rectangle", - "x": 2522.63635678271, - "y": 1474.4969184709817, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "GJ0eJt4M8hd9Jg6rr7siw" - ], - "frameId": null, - "index": "aT", - "roundness": { - "type": 3 - }, - "seed": 1897503391, - "version": 1566, - "versionNonce": 217933887, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "S124uFEAqu0wEY4J0oigU", - "type": "rectangle", - "x": 2249.675452147032, - "y": 1551.275825644639, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "OOfCIgyTIk6yY116k-m80" - ], - "frameId": null, - "index": "aU", - "roundness": { - "type": 3 - }, - "seed": 1365962431, - "version": 1515, - "versionNonce": 113510495, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "5rWdOARqsDoP_-5H4kH82", - "type": "rectangle", - "x": 2340.7808377981746, - "y": 1551.2758256446382, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "OOfCIgyTIk6yY116k-m80" - ], - "frameId": null, - "index": "aV", - "roundness": { - "type": 3 - }, - "seed": 549240543, - "version": 1590, - "versionNonce": 721527935, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "CqSEiVof839m49idua1kM", - "type": "rectangle", - "x": 2431.886223449317, - "y": 1551.275825644639, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "OOfCIgyTIk6yY116k-m80" - ], - "frameId": null, - "index": "aW", - "roundness": { - "type": 3 - }, - "seed": 564103935, - "version": 1570, - "versionNonce": 158776479, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "n04j9lyCqVe-NOaT-8qVF", - "type": "rectangle", - "x": 2522.9916091004598, - "y": 1551.2758256446382, - "width": 53.36447071138309, - "height": 47.7361594811523, - "angle": 0, - "strokeColor": "#a5d8ff", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 100, - "groupIds": [ - "OOfCIgyTIk6yY116k-m80" - ], - "frameId": null, - "index": "aX", - "roundness": { - "type": 3 - }, - "seed": 1888736031, - "version": 1644, - "versionNonce": 1708380351, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "QuM7CIPFogZ4a7ejWDPep", - "type": "text", - "x": 2241.7489186637613, - "y": 1125.9349025874815, - "width": 364.9867317016462, - "height": 187.370002375284, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "aY", - "roundness": null, - "seed": 1175066431, - "version": 1946, - "versionNonce": 968450271, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "40 W", - "fontSize": 149.89600190022716, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "40 W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "s3hdJJg41KSfZ4Dx181VB", - "type": "text", - "x": 2629.4327310571553, - "y": 1447.2944716429765, - "width": 248.28256225585938, - "height": 126.26587459076185, - "angle": 0, - "strokeColor": "#4dabf7", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "aZ", - "roundness": null, - "seed": 2019743583, - "version": 2099, - "versionNonce": 1991765247, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "30 W", - "fontSize": 101.01269967260949, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "30 W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "_jLbQKLQHdCLjLCqFIPmE", - "type": "text", - "x": 2635.154475937501, - "y": 1288.464466690256, - "width": 229.999755859375, - "height": 126.26587459076185, - "angle": 0, - "strokeColor": "#e03131", - "backgroundColor": "#ff8787", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 0, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "aa", - "roundness": null, - "seed": 1039045503, - "version": 2109, - "versionNonce": 139457823, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "10 W", - "fontSize": 101.01269967260949, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "10 W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "pTUCz5hl69eR_63dEpwZ8", - "type": "rectangle", - "x": 1440.6131149742614, - "y": 646.9338727645634, - "width": 552.5778055837405, - "height": 328.6578350603985, - "angle": 0, - "strokeColor": "#ff8787", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 10, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ab", - "roundness": { - "type": 3 - }, - "seed": 787336095, - "version": 1104, - "versionNonce": 368179519, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "QMHuIbjSSAz-FoCKyFd2V", - "type": "rectangle", - "x": 1427.446881898628, - "y": 638.4669606683167, - "width": 728.319954516287, - "height": 342.2608173240607, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ac", - "roundness": { - "type": 3 - }, - "seed": 126943167, - "version": 1761, - "versionNonce": 83786079, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "lFtQ0ya1ZiLlpqM0jh9pa", - "type": "text", - "x": 1469.343559260742, - "y": 644.6667629272627, - "width": 166.29792515435784, - "height": 71.53191338063563, - "angle": 0, - "strokeColor": "#ff8787", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ad", - "roundness": null, - "seed": 704163807, - "version": 1783, - "versionNonce": 986051967, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "75 W", - "fontSize": 57.22553070450849, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "75 W", - "autoResize": false, - "lineHeight": 1.25 - }, - { - "id": "Led4U0PtAdCzQTNfqE-GZ", - "type": "line", - "x": 2003.0808475706435, - "y": 640.7530285730365, - "width": 0.37652929350177494, - "height": 341.48897236709263, - "angle": 0, - "strokeColor": "#868e96", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 4, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ae", - "roundness": { - "type": 2 - }, - "seed": 1614109695, - "version": 1840, - "versionNonce": 512290207, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -0.37652929350177494, - 75.9055609538994 - ], - [ - -0.05671814868856018, - 341.48897236709263 - ] - ], - "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, - "startArrowhead": null, - "endArrowhead": null, - "polygon": false - }, - { - "id": "vnxQNnO-YKZ3pHSuIpN_m", - "type": "text", - "x": 2020.4752271143407, - "y": 771.9007024788141, - "width": 117.81849482998724, - "height": 58.81931755229357, - "angle": 0, - "strokeColor": "#228be6", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 50, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "af", - "roundness": null, - "seed": 1581745183, - "version": 1739, - "versionNonce": 1534583231, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "25 W", - "fontSize": 47.05545404183486, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "25 W", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "j3y_T96kHNLBIKQ2FNfxg", - "type": "rectangle", - "x": 1453.1124143414236, - "y": 739.6695553138272, - "width": 212.20122296663072, - "height": 79.1127135862744, - "angle": 0, - "strokeColor": "#e03131", - "backgroundColor": "#fff5f5", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ag", - "roundness": { - "type": 3 - }, - "seed": 69183551, - "version": 1825, - "versionNonce": 1655919071, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "joPJITqVMw2dqDAb7lA8o" - }, - { - "id": "mtzyRybxr_3MVEA6Qgbcf", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "joPJITqVMw2dqDAb7lA8o", - "type": "text", - "x": 1537.9060113594069, - "y": 759.6120288019355, - "width": 42.61402893066406, - "height": 39.227766610057905, - "angle": 0, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ah", - "roundness": null, - "seed": 1604208735, - "version": 1770, - "versionNonce": 759938559, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "VM", - "fontSize": 31.382213288046326, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "j3y_T96kHNLBIKQ2FNfxg", - "originalText": "VM", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "tquEJc_mkpENxUfWSBuDH", - "type": "rectangle", - "x": 1492.3081216803148, - "y": 864.132098744745, - "width": 192.10603968362835, - "height": 57.40342340491839, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ai", - "roundness": { - "type": 3 - }, - "seed": 1855186047, - "version": 1926, - "versionNonce": 1686473279, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "sCQju54yb3slYyrdoDoFt" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "sCQju54yb3slYyrdoDoFt", - "type": "text", - "x": 1528.158634503086, - "y": 873.2199271421753, - "width": 120.40501403808594, - "height": 39.227766610057905, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "aj", - "roundness": null, - "seed": 549518495, - "version": 1883, - "versionNonce": 1022880351, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "Process", - "fontSize": 31.382213288046326, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "tquEJc_mkpENxUfWSBuDH", - "originalText": "Process", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Dq-MuW8sparwF_aKsyI9C", - "type": "rectangle", - "x": 1768.9452149150857, - "y": 859.9110652531538, - "width": 180.3648707441082, - "height": 66.28611655707364, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ak", - "roundness": { - "type": 3 - }, - "seed": 433459391, - "version": 2311, - "versionNonce": 1953056383, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "B4KGDGfHF4u5x1IaKqZcJ" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "B4KGDGfHF4u5x1IaKqZcJ", - "type": "text", - "x": 1798.9251432680967, - "y": 873.4402402266616, - "width": 120.40501403808594, - "height": 39.227766610057905, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "al", - "roundness": null, - "seed": 863215839, - "version": 2269, - "versionNonce": 1234837151, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "Process", - "fontSize": 31.382213288046326, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Dq-MuW8sparwF_aKsyI9C", - "originalText": "Process", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "GOewdipiUrl7HcdoB0oMd", - "type": "rectangle", - "x": 1518.5783034525302, - "y": 906.9837618323738, - "width": 211.1721467308623, - "height": 59.04875243186069, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "am", - "roundness": { - "type": 3 - }, - "seed": 1059728639, - "version": 1982, - "versionNonce": 1329263295, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "bVWmqq7uwozf7Y0gppSYL" - }, - { - "id": "YFiAF9cmbbmDiSzpPfpOq", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "bVWmqq7uwozf7Y0gppSYL", - "type": "text", - "x": 1563.9618697989183, - "y": 916.8942547432752, - "width": 120.40501403808594, - "height": 39.227766610057905, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "an", - "roundness": null, - "seed": 142226719, - "version": 1937, - "versionNonce": 1844200159, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": "Process", - "fontSize": 31.382213288046326, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "GOewdipiUrl7HcdoB0oMd", - "originalText": "Process", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "ifiGllEGg33QNLcbH196b", - "type": "rectangle", - "x": 1688.2671747029726, - "y": 710.2321360140029, - "width": 291.24801743545476, - "height": 124.16306763334786, - "angle": 0, - "strokeColor": "#2f9e44", - "backgroundColor": "#ebfbee", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [ - "4e42pS648cxqd28tS0Psj", - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ao", - "roundness": { - "type": 3 - }, - "seed": 383007039, - "version": 2123, - "versionNonce": 313677599, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "YA7kfv2528PlWhOGMWvAW" - }, - { - "id": "RfgfZm_hxBLuZjg-g2aCY", - "type": "arrow" - } - ], - "updated": 1753862125633, - "link": null, - "locked": false - }, - { - "id": "YA7kfv2528PlWhOGMWvAW", - "type": "text", - "x": 1693.2671747029726, - "y": 751.8942991355419, - "width": 176.51593017578125, - "height": 40.83874139026978, - "angle": 0, - "strokeColor": "#2f9e44", - "backgroundColor": "#ffc9c9", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [ - "4e42pS648cxqd28tS0Psj", - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ap", - "roundness": null, - "seed": 798538079, - "version": 2203, - "versionNonce": 699931455, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125633, - "link": null, - "locked": false, - "text": " Container", - "fontSize": 32.670993112215825, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "middle", - "containerId": "ifiGllEGg33QNLcbH196b", - "originalText": " Container", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "fFOvafBQ_Y_kouZCvelRl", - "type": "rectangle", - "x": 1930.1611291785248, - "y": 727.5646953734515, - "width": 24.147130439278637, - "height": 22.732811343948423, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "4e42pS648cxqd28tS0Psj", - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "aq", - "roundness": { - "type": 3 - }, - "seed": 404239743, - "version": 2516, - "versionNonce": 1223399295, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false - }, - { - "id": "FxfvbNYMnp7jalOuQe1BC", - "type": "rectangle", - "x": 1930.7732733015237, - "y": 793.9530279469625, - "width": 24.147130439278637, - "height": 22.732811343948423, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "4e42pS648cxqd28tS0Psj", - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "ar", - "roundness": { - "type": 3 - }, - "seed": 395521439, - "version": 2522, - "versionNonce": 1537888159, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false - }, - { - "id": "aUeeDxZCZIqprQGm8AQWY", - "type": "rectangle", - "x": 1928.787060987539, - "y": 757.8104760039566, - "width": 24.147130439278637, - "height": 22.732811343948423, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 70, - "groupIds": [ - "4e42pS648cxqd28tS0Psj", - "PzM6vxolgtgSXDp3wfSXj" - ], - "frameId": null, - "index": "as", - "roundness": { - "type": 3 - }, - "seed": 960111039, - "version": 2519, - "versionNonce": 1914504127, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false - }, - { - "id": "gNM2ran1Ke6iaosKIlxMD", - "type": "rectangle", - "x": 1543.9845356758415, - "y": 154.46307846077593, - "width": 320.42256375072014, - "height": 71.25597594550482, - "angle": 0, - "strokeColor": "#ff8787", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "at", - "roundness": { - "type": 3 - }, - "seed": 1311609311, - "version": 608, - "versionNonce": 1818506207, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false - }, - { - "id": "WRvQsDssvMJmPESGe2gBX", - "type": "rectangle", - "x": 1479.1463210377533, - "y": 331.966376402843, - "width": 377.37121048822195, - "height": 66.14914934781564, - "angle": 0, - "strokeColor": "#ff8787", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 30, - "groupIds": [], - "frameId": null, - "index": "au", - "roundness": { - "type": 3 - }, - "seed": 796786175, - "version": 718, - "versionNonce": 1385193471, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false - }, - { - "id": "GN9kfgDPm-zJHHrMoc05u", - "type": "arrow", - "x": 1538.9845356758415, - "y": 189.9910664335282, - "width": 371.194660244431, - "height": 52.31385272522448, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "av", - "roundness": null, - "seed": 1076618783, - "version": 2861, - "versionNonce": 505924703, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -371.194660244431, - 0 - ], - [ - -371.194660244431, - 52.31385272522448 - ] - ], - "lastCommittedPoint": null, - "startBinding": null, - "endBinding": { - "elementId": "lC7v09A9ZieFjknR78TcZ", - "focus": 0.48345503676042223, - "gap": 4.999999999999545, - "fixedPoint": [ - 0.741727518380211, - -0.09942190970892838 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "lC7v09A9ZieFjknR78TcZ", - "type": "text", - "x": 792.2872634282176, - "y": 247.30491915875223, - "width": 506.2541198730469, - "height": 50.290725803173046, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aw", - "roundness": null, - "seed": 791136831, - "version": 1571, - "versionNonce": 378121279, - "isDeleted": false, - "boundElements": [ - { - "id": "GN9kfgDPm-zJHHrMoc05u", - "type": "arrow" - } - ], - "updated": 1753862125634, - "link": null, - "locked": false, - "text": "kepler_node_cpu_watts{}", - "fontSize": 40.23258064253844, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_node_cpu_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "b2HR8DZ40_6i95J3ltBFZ", - "type": "text", - "x": 757.8726335035026, - "y": 666.0779411517199, - "width": 462.80572509765625, - "height": 50.290725803173046, - "angle": 0, - "strokeColor": "#e8590c", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ax", - "roundness": null, - "seed": 2035427935, - "version": 1765, - "versionNonce": 692906111, - "isDeleted": false, - "boundElements": [ - { - "id": "mtzyRybxr_3MVEA6Qgbcf", - "type": "arrow" - } - ], - "updated": 1753862125634, - "link": null, - "locked": false, - "text": "kepler_vm_cpu_watts{}", - "fontSize": 40.23258064253844, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_vm_cpu_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "mtzyRybxr_3MVEA6Qgbcf", - "type": "arrow", - "x": 1448.1124143414236, - "y": 769.1314949319101, - "width": 222.43405574026474, - "height": 78.00819087860373, - "angle": 0, - "strokeColor": "#e8590c", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 90, - "groupIds": [], - "frameId": null, - "index": "ay", - "roundness": null, - "seed": 729515647, - "version": 1897, - "versionNonce": 1964905663, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -111.21702787013237, - 0 - ], - [ - -111.21702787013237, - -78.00819087860373 - ], - [ - -222.43405574026474, - -78.00819087860373 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "j3y_T96kHNLBIKQ2FNfxg", - "focus": 0.2551907706729307, - "gap": 5, - "fixedPoint": [ - -0.02356254092270837, - 0.37240461466353153 - ] - }, - "endBinding": { - "elementId": "b2HR8DZ40_6i95J3ltBFZ", - "focus": -0.00397687638835201, - "gap": 5, - "fixedPoint": [ - 1.010803669291137, - 0.4980115618058205 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "8vp_IgoPaUwBVclobYRHJ", - "type": "text", - "x": 729.3505855494113, - "y": 922.4495238059465, - "width": 562.89794921875, - "height": 50.290725803173046, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "az", - "roundness": null, - "seed": 1684299423, - "version": 1931, - "versionNonce": 1864049887, - "isDeleted": false, - "boundElements": [ - { - "id": "YFiAF9cmbbmDiSzpPfpOq", - "type": "arrow" - } - ], - "updated": 1753862125634, - "link": null, - "locked": false, - "text": "kepler_process_cpu_watts{}", - "fontSize": 40.23258064253844, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_process_cpu_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "LQ7X2UMInsvvGlcmggleL", - "type": "text", - "x": 689.1489734525858, - "y": 821.3031980348676, - "width": 595.162353515625, - "height": 50.290725803173046, - "angle": 0, - "strokeColor": "#12b886", - "backgroundColor": "#e7f5ff", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b00", - "roundness": null, - "seed": 381498047, - "version": 1796, - "versionNonce": 1527822623, - "isDeleted": false, - "boundElements": [ - { - "id": "RfgfZm_hxBLuZjg-g2aCY", - "type": "arrow" - } - ], - "updated": 1753862125634, - "link": null, - "locked": false, - "text": "kepler_container_cpu_watts{}", - "fontSize": 40.23258064253844, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "top", - "containerId": null, - "originalText": "kepler_container_cpu_watts{}", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "YFiAF9cmbbmDiSzpPfpOq", - "type": "arrow", - "x": 1513.5783034525307, - "y": 943.93236265069, - "width": 216.32976868436936, - "height": 3.5625240568429035, - "angle": 0, - "strokeColor": "#1971c2", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 90, - "groupIds": [], - "frameId": null, - "index": "b01", - "roundness": null, - "seed": 187073247, - "version": 1983, - "versionNonce": 1767783775, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -108.1648843421849, - 0 - ], - [ - -108.1648843421849, - 3.5625240568429035 - ], - [ - -216.32976868436936, - 3.5625240568429035 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "GOewdipiUrl7HcdoB0oMd", - "focus": -0.2514608453735838, - "gap": 4.999999999999545, - "fixedPoint": [ - -0.02367736501903358, - 0.6257304226867968 - ] - }, - "endBinding": { - "elementId": "8vp_IgoPaUwBVclobYRHJ", - "focus": -0.003976876388343583, - "gap": 5, - "fixedPoint": [ - 1.0088826047544488, - 0.4980115618058205 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "RfgfZm_hxBLuZjg-g2aCY", - "type": "arrow", - "x": 1683.267174702973, - "y": 803.1171019736892, - "width": 393.9558477347623, - "height": 37.49309417107406, - "angle": 0, - "strokeColor": "#12b886", - "backgroundColor": "#fcc2d7", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 2, - "opacity": 90, - "groupIds": [], - "frameId": null, - "index": "b02", - "roundness": null, - "seed": 573624063, - "version": 2024, - "versionNonce": 109918591, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -3.2673760177813165, - 0 - ], - [ - -3.2673760177813165, - 35.61500659003514 - ], - [ - -202.1116118762725, - 35.61500659003514 - ], - [ - -202.1116118762725, - 37.49309417107406 - ], - [ - -393.9558477347623, - 37.49309417107406 - ] - ], - "lastCommittedPoint": null, - "startBinding": { - "elementId": "ifiGllEGg33QNLcbH196b", - "focus": -0.4961770473322147, - "gap": 4.999999999999545, - "fixedPoint": [ - -0.017167498834932415, - 0.7480885236661076 - ] - }, - "endBinding": { - "elementId": "LQ7X2UMInsvvGlcmggleL", - "focus": -0.2321845508669285, - "gap": 5, - "fixedPoint": [ - 1.008401069003214, - 0.38390772456653377 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": [ - { - "index": 2, - "start": [ - -3.2673760177813165, - 0 - ], - "end": [ - -3.2673760177813165, - 35.61500659003514 - ] - } - ], - "startIsSpecial": false, - "endIsSpecial": false - }, - { - "id": "qxIWMtx6UK9e_vXRsyP4n", - "type": "text", - "x": 1658.1150791740365, - "y": 539.3016476403734, - "width": 377.6168585135299, - "height": 136.6260705925365, - "angle": 0, - "strokeColor": "#c2255c", - "backgroundColor": "#e3fafc", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 40, - "groupIds": [], - "frameId": null, - "index": "b03", - "roundness": null, - "seed": 1448908575, - "version": 1572, - "versionNonce": 2026353055, - "isDeleted": false, - "boundElements": [], - "updated": 1753862125634, - "link": null, - "locked": false, - "text": "100 W", - "fontSize": 109.3008564740292, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "100 W", - "autoResize": false, - "lineHeight": 1.25 - } - ], - "appState": { - "gridSize": 20, - "gridStep": 5, - "gridModeEnabled": false, - "viewBackgroundColor": "#fdf8f6", - "lockedMultiSelections": {} - }, - "files": {} -} diff --git a/docs/kepler/usage/assets/power-attribution.png b/docs/kepler/usage/assets/power-attribution.png deleted file mode 100644 index 0246d034e6422fc7b41f6396caa80a1dc09dda56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179630 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 diff --git a/docs/kepler/usage/configuration.md b/docs/kepler/usage/configuration.md deleted file mode 100644 index 9c53af8f..00000000 --- a/docs/kepler/usage/configuration.md +++ /dev/null @@ -1,306 +0,0 @@ -# ⚙️ Kepler Configuration Guide - -Kepler supports configuration through both command-line flags and a configuration file. This guide outlines all available configuration options for configuring Kepler. - -## 🛠️ Configuration Methods - -Kepler supports two primary methods for configuration: - -1. **Command-line flags**: For quick adjustments and one-time settings -2. **Configuration file**: For persistent and comprehensive configuration - -> ⚡ **Tip:** Command-line flags take precedence over configuration file settings when both are specified. - -## 🖥️ Command-line Flags - -You can configure Kepler by passing flags when starting the service. The following flags are available: - -| Flag | Description | Default | Values | -|------|-------------|---------|--------| -| `--config.file` | Path to YAML configuration file | | Any valid file path | -| `--log.level` | Logging level | `info` | `debug`, `info`, `warn`, `error` | -| `--log.format` | Output format for logs | `text` | `text`, `json` | -| `--host.sysfs` | Path to sysfs filesystem | `/sys` | Any valid directory path | -| `--host.procfs` | Path to procfs filesystem | `/proc` | Any valid directory path | -| `--monitor.interval` | Monitor refresh interval | `5s` | Any valid duration | -| `--monitor.max-terminated` | Maximum number of terminated workloads to keep in memory until exported | `500` | Negative number indicates `unlimited` and `0` disables the feature | -| `--web.config-file` | Path to TLS server config file | `""` | Any valid file path | -| `--web.listen-address` | Web server listen addresses (can be specified multiple times) | `:28282` | Any valid host:port or :port format | -| `--debug.pprof` | Enable pprof debugging endpoints | `false` | `true`, `false` | -| `--exporter.stdout` | Enable stdout exporter | `false` | `true`, `false` | -| `--exporter.prometheus` | Enable Prometheus exporter | `true` | `true`, `false` | -| `--metrics` | Metrics levels to export (can be specified multiple times) | `node,process,container,vm,pod` | `node`, `process`, `container`, `vm`, `pod` | -| `--kube.enable` | Monitor kubernetes | `false` | `true`, `false` | -| `--kube.config` | Path to a kubeconfig file | `""` | Any valid file path | -| `--kube.node-name` | Name of kubernetes node on which kepler is running | `""` | Any valid node name | - -### 💡 Examples - -```bash -# Run with debug logging -kepler --log.level=debug - -# Use a different procfs path and JSON logging -kepler --host.procfs=/custom/proc --log.format=json - -# Load configuration from file -kepler --config.file=/path/to/config.yaml - -# Use custom listen addresses -kepler --web.listen-address=:8080 --web.listen-address=localhost:9090 - -# Enable stdout exporter and disable Prometheus exporter -kepler --exporter.stdout=true --exporter.prometheus=false - -# Enable Kubernetes monitoring with specific kubeconfig and node name -kepler --kube.enable=true --kube.config=/path/to/kubeconfig --kube.node-name=my-node - -# Export only node and container level metrics -kepler --metrics=node --metrics=container - -# Export only process level metrics -kepler --metrics=process - -# Set maximum terminated workloads to 1000 -kepler --monitor.max-terminated=1000 - -# Disable terminated workload tracking -kepler --monitor.max-terminated=0 - -# Unlimited terminated workload tracking -kepler --monitor.max-terminated=-1 -``` - -## 🗂️ Configuration File - -Kepler can load configuration from a YAML file. The configuration file offers more extensive options than command-line flags. - -### 🧾 Sample Configuration File - -```yaml -log: - level: debug # debug, info, warn, error (default: info) - format: text # text or json (default: text) - -monitor: - interval: 5s # Monitor refresh interval (default: 5s) - staleness: 1000ms # Duration after which data is considered stale (default: 1000ms) - maxTerminated: 500 # Maximum number of terminated workloads to keep in memory (default: 500) - minTerminatedEnergyThreshold: 10 # Minimum energy threshold for terminated workloads (default: 10) - -host: - sysfs: /sys # Path to sysfs filesystem (default: /sys) - procfs: /proc # Path to procfs filesystem (default: /proc) - -rapl: - zones: [] # RAPL zones to be enabled, empty enables all default zones - -exporter: - stdout: # stdout exporter related config - enabled: false # disabled by default - prometheus: # prometheus exporter related config - enabled: true - debugCollectors: - - go - - process - metricsLevel: - - node - - process - - container - - vm - - pod - -debug: # debug related config - pprof: # pprof related config - enabled: true - -web: - configFile: "" # Path to TLS server config file - listenAddresses: # Web server listen addresses - - ":28282" - -kube: # kubernetes related config - enabled: false # Enable kubernetes monitoring (default: false) - config: "" # Path to kubeconfig file (optional if running in-cluster) - nodeName: "" # Name of the kubernetes node (required when enabled) - -# WARN: DO NOT ENABLE THIS IN PRODUCTION - for development/testing only -dev: - fake-cpu-meter: - enabled: false - zones: [] # Zones to be enabled, empty enables all default zones -``` - -## 🧩 Configuration Options in Detail - -### 📝 Logging Configuration - -```yaml -log: - level: info # Logging level - format: text # Output format -``` - -- **level**: Controls the verbosity of logging - - `debug`: Very verbose, includes detailed operational information - - `info`: Standard operational information - - `warn`: Only warnings and errors - - `error`: Only errors - -- **format**: Controls the output format of logs - - `text`: Human-readable format - - `json`: JSON format, suitable for log processing systems - -### 📊 Monitor Configuration - -```yaml -monitor: - interval: 5s - staleness: 1000ms - maxTerminated: 500 - minTerminatedEnergyThreshold: 10 -``` - -- **interval**: The monitor's refresh interval. All processes with a lifetime less than this interval will be ignored. Setting to 0s disables monitor refreshes. - -- **staleness**: Duration after which data computed by the monitor is considered stale and recomputed when requested again. Especially useful when multiple Prometheus instances are scraping Kepler, ensuring they receive the same data within the staleness window. Should be shorter than the monitor interval. - -- **maxTerminated**: Maximum number of terminated workloads (processes, containers, VMs, pods) to keep in memory until the data is exported. This prevents unbounded memory growth in high-churn environments. Set 0 to disable. When the limit is reached, the least power consuming terminated workloads are removed first. - -- **minTerminatedEnergyThreshold**: Minimum energy consumption threshold (in joules) for terminated workloads to be tracked. Only terminated workloads with energy consumption above this threshold will be included in the tracking. This helps filter out short-lived processes that consume minimal energy. Default is 10 joules. - -### 🗄️ Host Configuration - -```yaml -host: - sysfs: /sys # Path to sysfs - procfs: /proc # Path to procfs -``` - -These settings specify where Kepler should look for system information. In containerized environments, you might need to adjust these paths. - -### 🔋 RAPL Zones Configuration - -```yaml -rapl: - zones: [] # RAPL zones to be enabled -``` - -Running Average Power Limiting (RAPL) is Intel's power capping mechanism. By default, Kepler enables all available zones. You can restrict to specific zones by listing them. - -Example with specific zones: - -```yaml -rapl: - zones: ["package", "core", "uncore"] -``` - -### 📦 Exporter Configuration - -```yaml -exporter: - stdout: # stdout exporter related config - enabled: false # disabled by default - prometheus: # prometheus exporter related config - enabled: true - debugCollectors: - - go - - process - metricsLevel: - - node - - process - - container - - vm - - pod -``` - -- **stdout**: Configuration for the stdout exporter - - `enabled`: Enable or disable the stdout exporter (default: false) - -- **prometheus**: Configuration for the Prometheus exporter - - `enabled`: Enable or disable the Prometheus exporter (default: true) - - `debugCollectors`: List of debug collectors to enable (available: "go", "process") - - `metricsLevel`: List of metric levels to expose. Controls the granularity of metrics exported: - - `node`: Node-level metrics (system-wide power consumption) - - `process`: Process-level metrics (per-process power consumption) - - `container`: Container-level metrics (per-container power consumption) - - `vm`: Virtual machine-level metrics (per-VM power consumption) - - `pod`: Pod-level metrics (per-pod power consumption in Kubernetes) - -### 🐞 Debug Configuration - -```yaml -debug: - pprof: - enabled: true -``` - -- **pprof**: Configuration for pprof debugging - - `enabled`: When enabled, this exposes [pprof](https://golang.org/pkg/net/http/pprof/) debug endpoints that can be used for profiling Kepler (default: true) - -### 🌐 Web Configuration - -```yaml -web: - configFile: "" # Path to TLS server config file - listenAddresses: # Web server listen addresses - - ":28282" -``` - -- **configFile**: Path to a TLS server configuration file for securing Kepler's web endpoints -- **listenAddresses**: List of addresses where the web server should listen (default: [":28282"]) - - Supports both host:port format (e.g., "localhost:8080", "0.0.0.0:9090") and port-only format (e.g., ":8080") - - Multiple addresses can be specified for listening on different interfaces or ports - - IPv6 addresses are supported using bracket notation (e.g., "[::1]:8080") - -Example TLS server configuration file content: - -```yaml -# TLS server configuration -tls_server_config: - cert_file: /path/to/cert.pem # Path to the certificate file - key_file: /path/to/key.pem # Path to the key file -``` - -### 🐳 Kubernetes Configuration - -```yaml -kube: - enabled: false # Enable kubernetes monitoring - config: "" # Path to kubeconfig file - nodeName: "" # Name of the kubernetes node -``` - -- **enabled**: Enable or disable Kubernetes monitoring (default: false) - - When enabled, Kepler will monitor Kubernetes resources and expose pod level information - -- **config**: Path to a kubeconfig file (optional) - - Required when running Kepler outside of a Kubernetes cluster - - When running inside a cluster, Kepler can use the in-cluster configuration - - Must be a valid and readable kubeconfig file - -- **nodeName**: Name of the Kubernetes node on which Kepler is running (required when enabled) - - This helps Kepler identify which node it's monitoring - - Must match the actual node name in the Kubernetes cluster - - Required when `enabled` is set to `true` - -### 🧑‍🔬 Development Configuration - -```yaml -dev: - fake-cpu-meter: - enabled: false - zones: [] -``` - -⚠️ **WARNING**: This section is for development and testing only. Do not enable in production. - -- **fake-cpu-meter**: When enabled, uses a fake CPU meter instead of real hardware metrics - - `enabled`: Set to `true` to enable fake CPU meter - - `zones`: Specific zones to enable, empty enables all - -## 📖 Further Reading - -For more details see the config file example in the main Kepler repository at `hack/config.yaml` - -Happy configuring! 🎉 diff --git a/docs/kepler/usage/configuration.zh-qc.md b/docs/kepler/usage/configuration.zh-qc.md deleted file mode 100644 index 44490717..00000000 --- a/docs/kepler/usage/configuration.zh-qc.md +++ /dev/null @@ -1,80 +0,0 @@ -# Translation Quality Check Report: Kepler Configuration Guide - -**Original:** `docs/kepler/usage/configuration.md` -**Translation:** `docs/kepler/usage/configuration.zh.md` -**Reverse Translation:** `docs/kepler/usage/configuration.rev.md` - -## Overall Assessment - -✅ **EXCELLENT TRANSLATION QUALITY** - -The Chinese translation demonstrates exceptional technical accuracy while maintaining perfect formatting and code preservation. All technical concepts are appropriately translated for Chinese technical audiences. - -## Detailed Comparison - -### ✅ Strengths - -1. **Technical Terminology Excellence**: - - "Configuration" → "配置" (standard technical term) - - "Command-line flags" → "命令行标志" (accurate technical translation) - - "Monitoring" → "监控" (correct industry standard) - - "Workloads" → "工作负载" (proper Kubernetes terminology) - -2. **Complex Table Translation**: - - Configuration flags table fully translated with technical accuracy - - Parameter descriptions maintained - - Default values and formats preserved exactly - -3. **Code Block Preservation**: - - All YAML configurations unchanged - - Command-line examples preserved - - Code comments properly translated in context - -4. **Emoji and Formatting**: - - All emojis (⚙️🛠️🖥️💡🗂️🧾etc.) preserved - - Markdown headers and structure maintained - - Admonition blocks properly formatted - -### 📝 Translation Highlights - -1. **Context-Aware Translation**: - - "Staleness" → "过时" (appropriate for caching context) - - "Terminated workloads" → "已终止工作负载" (precise technical meaning) - - "Debug endpoints" → "调试端点" (correct networking terminology) - -2. **Consistent Technical Vocabulary**: - - "Exporter" consistently as "导出器" - - "Metrics" consistently as "指标" - - "Threshold" consistently as "阈值" - -3. **Cultural Adaptation**: - - "Happy configuring! 🎉" → "配置愉快!🎉" (natural Chinese expression) - - Warning messages appropriately formal in Chinese - -### 🔍 Technical Elements Verified - -- ✅ All command-line flags preserved exactly -- ✅ YAML syntax and indentation maintained -- ✅ Parameter names unchanged (e.g., `--log.level`, `--host.sysfs`) -- ✅ File paths and URLs intact -- ✅ Default values preserved -- ✅ Technical specifications accurate - -### 📊 Advanced Features - -1. **Complex Configuration Sections**: Each configuration section (logging, monitoring, RAPL, etc.) properly explained in Chinese -2. **Warning Blocks**: Development warnings appropriately emphasized -3. **Cross-References**: Links to external documentation maintained - -## Recommendation - -### ✅ APPROVED FOR PRODUCTION USE - -This translation achieves professional-grade quality suitable for technical documentation in enterprise environments. The translator demonstrates deep understanding of both Kubernetes ecosystem terminology and Chinese technical writing conventions. - -## Notes - -- Translation maintains perfect balance between technical accuracy and readability -- All emoji indicators and formatting preserved for user experience -- Complex nested YAML structures properly documented in Chinese -- No technical information loss identified in any section diff --git a/docs/kepler/usage/configuration.zh.md b/docs/kepler/usage/configuration.zh.md deleted file mode 100644 index 3a47ce5f..00000000 --- a/docs/kepler/usage/configuration.zh.md +++ /dev/null @@ -1,309 +0,0 @@ -# ⚙️ Kepler 配置指南 - -!!! warning "机器翻译声明" - 本文档由 AI 语言模型 (Claude) 从英文自动翻译而成。如发现翻译错误或不准确之处,请在 [Kepler 文档项目](https://github.com/sustainable-computing-io/kepler-doc/issues) 中提交 issue 报告问题。 - -Kepler 支持通过命令行标志和配置文件进行配置。本指南概述了配置 Kepler 的所有可用配置选项。 - -## 🛠️ 配置方法 - -Kepler 支持两种主要的配置方法: - -1. **命令行标志**:用于快速调整和一次性设置 -2. **配置文件**:用于持久和全面的配置 - -> ⚡ **提示:** 当同时指定命令行标志和配置文件设置时,命令行标志优先。 - -## 🖥️ 命令行标志 - -您可以通过在启动服务时传递标志来配置 Kepler。以下标志可用: - -| 标志 | 描述 | 默认值 | 值 | -|------|-------------|---------|--------| -| `--config.file` | YAML 配置文件路径 | | 任何有效的文件路径 | -| `--log.level` | 日志级别 | `info` | `debug`, `info`, `warn`, `error` | -| `--log.format` | 日志输出格式 | `text` | `text`, `json` | -| `--host.sysfs` | sysfs 文件系统路径 | `/sys` | 任何有效的目录路径 | -| `--host.procfs` | procfs 文件系统路径 | `/proc` | 任何有效的目录路径 | -| `--monitor.interval` | 监控刷新间隔 | `5s` | 任何有效的持续时间 | -| `--monitor.max-terminated` | 在导出前保存在内存中的已终止工作负载的最大数量 | `500` | 负数表示 `unlimited`,`0` 禁用此功能 | -| `--web.config-file` | TLS 服务器配置文件路径 | `""` | 任何有效的文件路径 | -| `--web.listen-address` | Web 服务器监听地址(可多次指定) | `:28282` | 任何有效的 host:port 或 :port 格式 | -| `--debug.pprof` | 启用 pprof 调试端点 | `false` | `true`, `false` | -| `--exporter.stdout` | 启用 stdout 导出器 | `false` | `true`, `false` | -| `--exporter.prometheus` | 启用 Prometheus 导出器 | `true` | `true`, `false` | -| `--metrics` | 要导出的指标级别(可多次指定) | `node,process,container,vm,pod` | `node`, `process`, `container`, `vm`, `pod` | -| `--kube.enable` | 监控 kubernetes | `false` | `true`, `false` | -| `--kube.config` | kubeconfig 文件路径 | `""` | 任何有效的文件路径 | -| `--kube.node-name` | 运行 kepler 的 kubernetes 节点名称 | `""` | 任何有效的节点名称 | - -### 💡 示例 - -```bash -# 使用调试日志级别运行 -kepler --log.level=debug - -# 使用不同的 procfs 路径和 JSON 日志 -kepler --host.procfs=/custom/proc --log.format=json - -# 从文件加载配置 -kepler --config.file=/path/to/config.yaml - -# 使用自定义监听地址 -kepler --web.listen-address=:8080 --web.listen-address=localhost:9090 - -# 启用 stdout 导出器并禁用 Prometheus 导出器 -kepler --exporter.stdout=true --exporter.prometheus=false - -# 启用 Kubernetes 监控并指定 kubeconfig 和节点名称 -kepler --kube.enable=true --kube.config=/path/to/kubeconfig --kube.node-name=my-node - -# 仅导出节点和容器级别指标 -kepler --metrics=node --metrics=container - -# 仅导出进程级别指标 -kepler --metrics=process - -# 将最大已终止工作负载设置为 1000 -kepler --monitor.max-terminated=1000 - -# 禁用已终止工作负载跟踪 -kepler --monitor.max-terminated=0 - -# 无限制已终止工作负载跟踪 -kepler --monitor.max-terminated=-1 -``` - -## 🗂️ 配置文件 - -Kepler 可以从 YAML 文件加载配置。配置文件提供比命令行标志更广泛的选项。 - -### 🧾 示例配置文件 - -```yaml -log: - level: debug # debug, info, warn, error (默认: info) - format: text # text 或 json (默认: text) - -monitor: - interval: 5s # 监控刷新间隔 (默认: 5s) - staleness: 1000ms # 数据被认为过时的持续时间 (默认: 1000ms) - maxTerminated: 500 # 在内存中保存已终止工作负载的最大数量 (默认: 500) - minTerminatedEnergyThreshold: 10 # 已终止工作负载的最低能量阈值 (默认: 10) - -host: - sysfs: /sys # sysfs 文件系统路径 (默认: /sys) - procfs: /proc # procfs 文件系统路径 (默认: /proc) - -rapl: - zones: [] # 要启用的 RAPL 区域,空值启用所有默认区域 - -exporter: - stdout: # stdout 导出器相关配置 - enabled: false # 默认禁用 - prometheus: # prometheus 导出器相关配置 - enabled: true - debugCollectors: - - go - - process - metricsLevel: - - node - - process - - container - - vm - - pod - -debug: # 调试相关配置 - pprof: # pprof 相关配置 - enabled: true - -web: - configFile: "" # TLS 服务器配置文件路径 - listenAddresses: # Web 服务器监听地址 - - ":28282" - -kube: # kubernetes 相关配置 - enabled: false # 启用 kubernetes 监控 (默认: false) - config: "" # kubeconfig 文件路径 (在集群内运行时可选) - nodeName: "" # kubernetes 节点名称 (启用时必需) - -# 警告:请勿在生产环境中启用 - 仅用于开发/测试 -dev: - fake-cpu-meter: - enabled: false - zones: [] # 要启用的区域,空值启用所有默认区域 -``` - -## 🧩 详细配置选项 - -### 📝 日志配置 - -```yaml -log: - level: info # 日志级别 - format: text # 输出格式 -``` - -- **level**:控制日志的详细程度 - - `debug`:非常详细,包含详细的操作信息 - - `info`:标准操作信息 - - `warn`:仅警告和错误 - - `error`:仅错误 - -- **format**:控制日志的输出格式 - - `text`:人类可读格式 - - `json`:JSON 格式,适用于日志处理系统 - -### 📊 监控配置 - -```yaml -monitor: - interval: 5s - staleness: 1000ms - maxTerminated: 500 - minTerminatedEnergyThreshold: 10 -``` - -- **interval**:监控的刷新间隔。生命周期少于此间隔的所有进程将被忽略。设置为 0s 禁用监控刷新。 - -- **staleness**:监控器计算的数据被认为过时并在再次请求时重新计算的持续时间。在多个 Prometheus 实例抓取 Kepler 时特别有用,确保它们在过时窗口内接收相同的数据。应短于监控间隔。 - -- **maxTerminated**:在数据导出前在内存中保存已终止工作负载(进程、容器、虚拟机、Pod)的最大数量。这防止了在高流失环境中的无限内存增长。设置为 0 禁用。达到限制时,首先移除功耗最低的已终止工作负载。 - -- **minTerminatedEnergyThreshold**:已终止工作负载跟踪的最低能耗阈值(以焦耳为单位)。只有能耗高于此阈值的已终止工作负载才会被包含在跟踪中。这有助于过滤掉消耗最少能量的短期进程。默认为 10 焦耳。 - -### 🗄️ 主机配置 - -```yaml -host: - sysfs: /sys # sysfs 路径 - procfs: /proc # procfs 路径 -``` - -这些设置指定 Kepler 应该在哪里查找系统信息。在容器化环境中,您可能需要调整这些路径。 - -### 🔋 RAPL 区域配置 - -```yaml -rapl: - zones: [] # 要启用的 RAPL 区域 -``` - -运行平均功率限制(RAPL)是 Intel 的功率限制机制。默认情况下,Kepler 启用所有可用区域。您可以通过列出特定区域来限制。 - -具体区域示例: - -```yaml -rapl: - zones: ["package", "core", "uncore"] -``` - -### 📦 导出器配置 - -```yaml -exporter: - stdout: # stdout 导出器相关配置 - enabled: false # 默认禁用 - prometheus: # prometheus 导出器相关配置 - enabled: true - debugCollectors: - - go - - process - metricsLevel: - - node - - process - - container - - vm - - pod -``` - -- **stdout**:stdout 导出器配置 - - `enabled`:启用或禁用 stdout 导出器(默认:false) - -- **prometheus**:Prometheus 导出器配置 - - `enabled`:启用或禁用 Prometheus 导出器(默认:true) - - `debugCollectors`:要启用的调试收集器列表(可用:"go"、"process") - - `metricsLevel`:要公开的指标级别列表。控制导出指标的粒度: - - `node`:节点级指标(系统范围的功耗) - - `process`:进程级指标(每个进程的功耗) - - `container`:容器级指标(每个容器的功耗) - - `vm`:虚拟机级指标(每个虚拟机的功耗) - - `pod`:Pod 级指标(Kubernetes 中每个 Pod 的功耗) - -### 🐞 调试配置 - -```yaml -debug: - pprof: - enabled: true -``` - -- **pprof**:pprof 调试配置 - - `enabled`:启用时,这会公开可用于分析 Kepler 的 [pprof](https://golang.org/pkg/net/http/pprof/) 调试端点(默认:true) - -### 🌐 Web 配置 - -```yaml -web: - configFile: "" # TLS 服务器配置文件路径 - listenAddresses: # Web 服务器监听地址 - - ":28282" -``` - -- **configFile**:用于保护 Kepler Web 端点的 TLS 服务器配置文件路径 -- **listenAddresses**:Web 服务器应监听的地址列表(默认:[":28282"]) - - 支持 host:port 格式(例如,"localhost:8080"、"0.0.0.0:9090")和仅端口格式(例如,":8080") - - 可以指定多个地址以在不同接口或端口上监听 - - 支持使用括号表示法的 IPv6 地址(例如,"[::1]:8080") - -TLS 服务器配置文件内容示例: - -```yaml -# TLS 服务器配置 -tls_server_config: - cert_file: /path/to/cert.pem # 证书文件路径 - key_file: /path/to/key.pem # 密钥文件路径 -``` - -### 🐳 Kubernetes 配置 - -```yaml -kube: - enabled: false # 启用 kubernetes 监控 - config: "" # kubeconfig 文件路径 - nodeName: "" # kubernetes 节点名称 -``` - -- **enabled**:启用或禁用 Kubernetes 监控(默认:false) - - 启用时,Kepler 将监控 Kubernetes 资源并公开 Pod 级别信息 - -- **config**:kubeconfig 文件路径(可选) - - 在 Kubernetes 集群外运行 Kepler 时必需 - - 在集群内运行时,Kepler 可以使用集群内配置 - - 必须是有效且可读的 kubeconfig 文件 - -- **nodeName**:运行 Kepler 的 Kubernetes 节点名称(启用时必需) - - 这有助于 Kepler 识别它正在监控的节点 - - 必须与 Kubernetes 集群中的实际节点名称匹配 - - 当 `enabled` 设置为 `true` 时必需 - -### 🧑‍🔬 开发配置 - -```yaml -dev: - fake-cpu-meter: - enabled: false - zones: [] -``` - -⚠️ **警告**:此部分仅用于开发和测试。请勿在生产环境中启用。 - -- **fake-cpu-meter**:启用时,使用假 CPU 计量器而不是真实硬件指标 - - `enabled`:设置为 `true` 启用假 CPU 计量器 - - `zones`:要启用的特定区域,空值启用所有区域 - -## 📖 延伸阅读 - -更多详细信息,请参阅主 Kepler 仓库中 `hack/config.yaml` 的配置文件示例 - -配置愉快!🎉 diff --git a/docs/kepler/usage/power-attribution.md b/docs/kepler/usage/power-attribution.md deleted file mode 100644 index b867c58a..00000000 --- a/docs/kepler/usage/power-attribution.md +++ /dev/null @@ -1,215 +0,0 @@ -# Understanding Kepler Power Attribution - -This guide explains how Kepler measures and attributes power consumption to -processes, containers, VMs, and pods running on your system. - -## How Power Attribution Works - -### The Big Picture - -Modern systems lack per-workload energy metering, providing only aggregate -power consumption at the hardware level. Kepler addresses this attribution -challenge through proportional distribution based on resource utilization: - -1. **Hardware Energy Collection** - Intel RAPL sensors provide cumulative - energy counters at package, core, DRAM, and uncore levels -2. **System Activity Analysis** - CPU utilization metrics from `/proc/stat` - determine the ratio of active vs idle system operation -3. **Power Domain Separation** - Total energy is split into active power - (proportional to workload activity) and idle power (baseline consumption) -4. **Proportional Attribution** - Active power is distributed to workloads - based on their CPU time consumption ratios - -### Core Philosophy - -Kepler implements a **CPU-time-proportional energy attribution model** that -distributes hardware-measured energy consumption to individual workloads based -on their computational resource usage patterns. - -The fundamental principle recognizes that system power consumption has two -distinct components: - -- **Active Power**: Energy consumed by computational work, proportional to CPU - utilization and scalable with workload activity -- **Idle Power**: Fixed baseline energy for maintaining system operation, - including memory refresh, clock distribution, and idle core power states - -### Attribution Formula - -All workload types use the same proportional attribution formula: - -```text -Workload Power = (Workload CPU Time Δ / Node CPU Time Δ) × Active Power -``` - -This ensures energy conservation - the sum of attributed power remains -proportional to measured hardware consumption while maintaining fairness based -on actual resource utilization. - -![Power Attribution Diagram](assets/power-attribution.png) - -*Figure 1: Power attribution flow showing how total measured power is -decomposed into active and idle components, with active power distributed -proportionally based on workload CPU time deltas.* - -## Understanding Energy vs Power - -- **Energy**: Measured in microjoules (μJ) as cumulative counters from hardware -- **Power**: Calculated as rate in microwatts (μW) using `Power = ΔEnergy / Δtime` - -## Energy Zones - -Hardware energy is read from different zones: - -- **Package**: CPU package-level energy consumption -- **Core**: Individual CPU core energy -- **DRAM**: Memory subsystem energy -- **Uncore**: Integrated graphics and other uncore components -- **PSys**: Platform-level energy (most comprehensive when available) - -## Attribution Examples - -### Example 1: Basic Power Split - -**System State:** - -- Hardware reports: 40W total system power -- Node CPU usage: 25% utilization ratio -- Power split: 40W × 25% = 10W active, 30W idle - -**Workload Attribution:** -If a container used 20% of total node CPU time during the measurement -interval: - -- **Container power** = (20% CPU usage) × 10W active = 2W - -### Example 2: Multi-Workload Scenario - -**System State:** - -- Total power: 60W -- CPU usage ratio: 33.3% (1/3) -- Active power: 20W, Idle power: 40W -- Node total CPU time: 1000ms - -**Process-Level CPU Usage:** - -- Process 1 (standalone): 100ms CPU time -- Process 2 (in container-A): 80ms CPU time -- Process 3 (in container-A): 70ms CPU time -- Process 4 (in container-B): 60ms CPU time -- Process 5 (QEMU hypervisor): 200ms CPU time -- Process 6 (in container-C, pod-X): 90ms CPU time -- Process 7 (in container-D, pod-X): 110ms CPU time - -**Hierarchical CPU Time Aggregation:** - -- Container-A CPU time: 80ms + 70ms = 150ms -- Container-B CPU time: 60ms -- Container-C CPU time: 90ms (part of pod-X) -- Container-D CPU time: 110ms (part of pod-X) -- Pod-X CPU time: 90ms + 110ms = 200ms -- VM CPU time: 200ms (QEMU hypervisor process) - -**Independent Power Attribution (each from node active power):** - -- Process 1: (100ms / 1000ms) × 20W = 2W -- Container-A: (150ms / 1000ms) × 20W = 3W -- Container-B: (60ms / 1000ms) × 20W = 1.2W -- Pod-X: (200ms / 1000ms) × 20W = 4W -- VM: (200ms / 1000ms) × 20W = 4W - -**Note:** Each workload type calculates power independently from node active -power based on its own CPU time, not by inheriting from constituent workloads. - -### Example 3: Container with Multiple Processes - -**Container "web-server":** - -- Process 1 (nginx): 100ms CPU time -- Process 2 (worker): 50ms CPU time -- Container total: 150ms CPU time - -**If node total CPU time is 1000ms:** - -- Container CPU ratio: 150ms / 1000ms = 15% -- Container power: 15% × active power - -### Example 4: Pod with Multiple Containers - -**Pod "frontend":** - -- Container 1 (nginx): 200ms CPU time -- Container 2 (sidecar): 50ms CPU time -- Pod total: 250ms CPU time - -**If node total CPU time is 1000ms:** - -- Pod CPU ratio: 250ms / 1000ms = 25% -- Pod power: 25% × active power - -## Limitations and Considerations - -### When CPU Attribution Works Well - -- **CPU-bound workloads** with similar instruction mixes -- **Steady-state workloads** without significant frequency scaling -- **Relative comparisons** between similar workload types -- **Trend analysis** over longer time periods - -### When to Exercise Caution - -- **Mixed workload environments** with varying compute vs I/O patterns -- **High-performance computing** workloads using specialized instructions -- **Absolute power budgeting** decisions based solely on Kepler metrics -- **Fine-grained optimization** requiring precise per-process power measurement - -### Workload-Specific Characteristics - -#### Compute vs Memory-Bound Workloads - -```text -Example Scenario: -- Process A: 50% CPU, compute-intensive (high frequency, active execution) -- Process B: 50% CPU, memory-bound (frequent stalls, lower frequency) - -Current Attribution: Both receive equal power -Reality: Process A likely consumes 2-3x more power -``` - -#### CPU Power States Impact - -Modern CPUs implement sophisticated power management that affects attribution -accuracy: - -- **C-States (CPU Sleep States)**: Different sleep behaviors affect power consumption -- **P-States (Performance States)**: Dynamic frequency scaling affects power per CPU cycle -- **Instruction-Level Variations**: Vector instructions consume more power than scalar operations - -### Beyond CPU Attribution - -#### Memory and I/O Considerations - -- **DRAM Power**: Memory-intensive workloads consume more DRAM power -- **Storage I/O**: Triggers storage controller and device power -- **Network I/O**: Consumes network interface and PCIe power -- **GPU Workloads**: Integrated graphics power not captured by CPU metrics - -## Key Metrics - -- `kepler_node_cpu_watts{}`: Total node power consumption -- `kepler_process_cpu_watts{}`: Individual process power -- `kepler_container_cpu_watts{}`: Container-level power -- `kepler_vm_cpu_watts{}`: Virtual machine power -- `kepler_pod_cpu_watts{}`: Kubernetes pod power - -## Conclusion - -Kepler's power attribution system provides practical, proportional distribution -of hardware energy consumption to individual workloads. While CPU-time-based -attribution has inherent limitations due to modern CPU complexity, it offers a -good balance between accuracy, simplicity, and performance overhead for most -monitoring and optimization use cases. - -Understanding both the capabilities and limitations helps users make informed -decisions about when and how to rely on Kepler's power attribution metrics. diff --git a/docs/kepler/usage/power-attribution.zh-qc.md b/docs/kepler/usage/power-attribution.zh-qc.md deleted file mode 100644 index 400a1079..00000000 --- a/docs/kepler/usage/power-attribution.zh-qc.md +++ /dev/null @@ -1,80 +0,0 @@ -# Translation Quality Check Report: Kepler Power Attribution Guide - -**Original:** `docs/kepler/usage/power-attribution.md` -**Translation:** `docs/kepler/usage/power-attribution.zh.md` -**Reverse Translation:** `docs/kepler/usage/power-attribution.rev.md` - -## Overall Assessment - -✅ **EXCELLENT TRANSLATION QUALITY** - -The Chinese translation demonstrates exceptional technical accuracy for complex power attribution algorithms and system architecture concepts. This is one of Kepler's most technically sophisticated documents, and the translation maintains precision throughout. - -## Detailed Comparison - -### ✅ Strengths - -1. **Advanced Technical Concepts**: - - "Power attribution" → "功率归因" (precise technical term) - - "CPU-time-proportional energy attribution model" → "基于 CPU 时间比例的能量归因模型" (accurate algorithm description) - - "Proportional distribution" → "比例分配" (correct mathematical concept) - - "Energy conservation" → "能量守恒" (proper physics principle) - -2. **Hardware Architecture Terminology**: - - "Intel RAPL sensors" → "Intel RAPL 传感器" (correctly preserved technical name) - - "Package, core, DRAM, uncore" → "封装、内核、DRAM 和非内核" (accurate hardware component terms) - - "Cumulative energy counters" → "累积能量计数器" (precise hardware measurement concept) - - "P-States/C-States" → "P 状态/C 状态" (correctly preserved CPU terminology) - -3. **Mathematical and Algorithmic Precision**: - - Attribution formula preserved exactly with Chinese explanation - - Complex calculations maintained (150ms / 1000ms × 20W = 3W) - - Hierarchical aggregation concepts accurately explained - - Energy vs Power distinction clearly maintained (μJ vs μW) - -### 📝 Complex System Concepts - -1. **Power Management Architecture**: - - "Active/Idle power split" → "活动/空闲功率分割" (accurate power domain concept) - - "Baseline consumption" → "基线消耗" (correct system architecture term) - - "Dynamic frequency scaling" → "动态频率缩放" (precise CPU technology term) - -2. **Workload Classification**: - - "CPU-bound vs Memory-bound" → "CPU 密集型与内存密集型" (standard performance analysis terms) - - "Compute-intensive" → "计算密集型" (appropriate workload characterization) - - "High-performance computing" → "高性能计算" (standard HPC terminology) - -3. **Measurement Limitations**: - - Complex limitation scenarios properly explained in Chinese - - Technical caveats appropriately communicated - - Performance trade-offs clearly articulated - -### 🔍 Technical Elements Verified - -- ✅ All mathematical formulas preserved exactly -- ✅ Hardware component names maintained -- ✅ Metric names unchanged (`kepler_node_cpu_watts{}`, etc.) -- ✅ Technical diagrams and references intact -- ✅ Code examples and calculations accurate - -### 📊 Advanced Features Excellence - -1. **Multi-Workload Scenarios**: Complex hierarchical examples with containers, pods, and VMs accurately translated -2. **Performance Analysis**: Sophisticated power management concepts properly explained -3. **System Architecture**: Deep hardware and software interaction concepts maintained - -## Recommendation - -### ✅ APPROVED FOR TECHNICAL ARCHITECTURE DOCUMENTATION - -This translation achieves the highest level of technical accuracy for advanced system architecture documentation. The translator demonstrates deep understanding of power management, CPU architecture, and performance measurement concepts. - -## Notes - -- Exceptional handling of complex algorithmic and mathematical concepts -- Perfect preservation of technical precision in limitation discussions -- Advanced hardware architecture terminology correctly translated -- No loss of technical depth or accuracy in any section -- Suitable for expert-level technical audiences in Chinese-speaking regions - -This represents one of the most technically challenging translations in the documentation set, and it achieves excellent quality standards throughout. diff --git a/docs/kepler/usage/power-attribution.zh.md b/docs/kepler/usage/power-attribution.zh.md deleted file mode 100644 index ffdfeb11..00000000 --- a/docs/kepler/usage/power-attribution.zh.md +++ /dev/null @@ -1,205 +0,0 @@ -# 理解 Kepler 功率归因 - -!!! warning "机器翻译声明" - 本文档由 AI 语言模型 (Claude) 从英文自动翻译而成。如发现翻译错误或不准确之处,请在 [Kepler 文档项目](https://github.com/sustainable-computing-io/kepler-doc/issues) 中提交 issue 报告问题。 - -本指南解释了 Kepler 如何测量和归因功率消耗到 -在您系统上运行的进程、容器、虚拟机和 Pod。 - -## 功率归因的工作原理 - -### 全局视图 - -现代系统缺乏按工作负载的能耗计量,仅在硬件级别提供聚合 -功耗。Kepler 通过基于资源利用率的比例分配来解决这一归因 -挑战: - -1. **硬件能耗收集** - Intel RAPL 传感器在封装、内核、DRAM 和非内核级别提供累积 - 能量计数器 -2. **系统活动分析** - 来自 `/proc/stat` 的 CPU 利用率指标 - 确定活动与空闲系统操作的比率 -3. **功率域分离** - 总能量分为活动功率 - (与工作负载活动成正比)和空闲功率(基线消耗) -4. **比例归因** - 活动功率根据工作负载的 CPU 时间消耗比率分配给工作负载 - -### 核心理念 - -Kepler 实现了一个**基于 CPU 时间比例的能量归因模型**,该模型 -根据各个工作负载的计算资源使用模式将硬件测量的能耗分配给它们。 - -基本原理认识到系统功耗有两个 -不同的组成部分: - -- **活动功率**:计算工作消耗的能量,与 CPU 利用率成正比并随工作负载活动可扩展 -- **空闲功率**:维持系统运行的固定基线能量, - 包括内存刷新、时钟分配和空闲内核功率状态 - -### 归因公式 - -所有工作负载类型使用相同的比例归因公式: - -```text -工作负载功率 = (工作负载 CPU 时间 Δ / 节点 CPU 时间 Δ) × 活动功率 -``` - -这确保了能量守恒 - 归因功率的总和保持 -与测量的硬件消耗成正比,同时基于实际资源利用率保持公平性。 - -![功率归因图](assets/power-attribution.png) - -*图 1:功率归因流程,显示总测量功率如何 -分解为活动和空闲组件,活动功率根据工作负载 CPU 时间增量按比例分配。* - -## 理解能量与功率 - -- **能量**:以微焦耳 (μJ) 为单位测量,作为来自硬件的累积计数器 -- **功率**:使用 `功率 = ΔEnergy / Δtime` 计算为微瓦 (μW) 的速率 - -## 能量区域 - -硬件能量从不同区域读取: - -- **Package**:CPU 封装级能耗 -- **Core**:单个 CPU 内核能量 -- **DRAM**:内存子系统能量 -- **Uncore**:集成显卡和其他非内核组件 -- **PSys**:平台级能量(可用时最全面) - -## 归因示例 - -### 示例 1:基本功率分配 - -**系统状态:** - -- 硬件报告:40W 总系统功率 -- 节点 CPU 使用率:25% 利用率 -- 功率分配:40W × 25% = 10W 活动,30W 空闲 - -**工作负载归因:** -如果一个容器在测量间隔内使用了总节点 CPU 时间的 20%: - -- **容器功率** = (20% CPU 使用率) × 10W 活动 = 2W - -### 示例 2:多工作负载场景 - -**系统状态:** - -- 总功率:60W -- CPU 使用率:33.3% (1/3) -- 活动功率:20W,空闲功率:40W -- 节点总 CPU 时间:1000ms - -**进程级 CPU 使用率:** - -- 进程 1(独立):100ms CPU 时间 -- 进程 2(在容器-A 中):80ms CPU 时间 -- 进程 3(在容器-A 中):70ms CPU 时间 -- 进程 4(在容器-B 中):60ms CPU 时间 -- 进程 5(QEMU 虚拟机管理程序):200ms CPU 时间 -- 进程 6(在容器-C,Pod-X 中):90ms CPU 时间 -- 进程 7(在容器-D,Pod-X 中):110ms CPU 时间 - -**分层 CPU 时间聚合:** - -- 容器-A CPU 时间:80ms + 70ms = 150ms -- 容器-B CPU 时间:60ms -- 容器-C CPU 时间:90ms(Pod-X 的一部分) -- 容器-D CPU 时间:110ms(Pod-X 的一部分) -- Pod-X CPU 时间:90ms + 110ms = 200ms -- 虚拟机 CPU 时间:200ms(QEMU 虚拟机管理程序进程) - -**独立功率归因(每个都来自节点活动功率):** - -- 进程 1:(100ms / 1000ms) × 20W = 2W -- 容器-A:(150ms / 1000ms) × 20W = 3W -- 容器-B:(60ms / 1000ms) × 20W = 1.2W -- Pod-X:(200ms / 1000ms) × 20W = 4W -- 虚拟机:(200ms / 1000ms) × 20W = 4W - -**注意:** 每种工作负载类型根据自己的 CPU 时间独立地从节点活动功率计算功率,而不是从构成工作负载继承。 - -### 示例 3:具有多个进程的容器 - -**容器 "web-server":** - -- 进程 1(nginx):100ms CPU 时间 -- 进程 2(worker):50ms CPU 时间 -- 容器总计:150ms CPU 时间 - -**如果节点总 CPU 时间为 1000ms:** - -- 容器 CPU 比率:150ms / 1000ms = 15% -- 容器功率:15% × 活动功率 - -### 示例 4:具有多个容器的 Pod - -**Pod "frontend":** - -- 容器 1(nginx):200ms CPU 时间 -- 容器 2(sidecar):50ms CPU 时间 -- Pod 总计:250ms CPU 时间 - -**如果节点总 CPU 时间为 1000ms:** - -- Pod CPU 比率:250ms / 1000ms = 25% -- Pod 功率:25% × 活动功率 - -## 限制和注意事项 - -### CPU 归因效果良好的情况 - -- **CPU 密集型工作负载**,具有相似的指令组合 -- **稳态工作负载**,没有显著的频率缩放 -- **相对比较**,在相似工作负载类型之间 -- **趋势分析**,在较长时间段内 - -### 需要谨慎的情况 - -- **混合工作负载环境**,具有不同的计算与 I/O 模式 -- **高性能计算**工作负载使用专用指令 -- **绝对功率预算**决策仅基于 Kepler 指标 -- **细粒度优化**需要精确的每进程功率测量 - -### 工作负载特定特征 - -#### 计算与内存密集型工作负载 - -```text -示例场景: -- 进程 A:50% CPU,计算密集型(高频率,活跃执行) -- 进程 B:50% CPU,内存密集型(频繁停顿,较低频率) - -当前归因:两者都接收相等的功率 -实际情况:进程 A 可能消耗 2-3 倍更多功率 -``` - -#### CPU 功率状态影响 - -现代 CPU 实现复杂的功率管理,影响归因准确性: - -- **C 状态(CPU 睡眠状态)**:不同的睡眠行为影响功耗 -- **P 状态(性能状态)**:动态频率缩放影响每 CPU 周期的功率 -- **指令级变化**:向量指令比标量操作消耗更多功率 - -### 超越 CPU 归因 - -#### 内存和 I/O 考虑 - -- **DRAM 功率**:内存密集型工作负载消耗更多 DRAM 功率 -- **存储 I/O**:触发存储控制器和设备功率 -- **网络 I/O**:消耗网络接口和 PCIe 功率 -- **GPU 工作负载**:集成显卡功率未被 CPU 指标捕获 - -## 关键指标 - -- `kepler_node_cpu_watts{}`:总节点功耗 -- `kepler_process_cpu_watts{}`:单个进程功率 -- `kepler_container_cpu_watts{}`:容器级功率 -- `kepler_vm_cpu_watts{}`:虚拟机功率 -- `kepler_pod_cpu_watts{}`:Kubernetes Pod 功率 - -## 结论 - -Kepler 的功率归因系统为单个工作负载提供实用的、成比例的硬件能耗分配。虽然基于 CPU 时间的归因由于现代 CPU 复杂性而具有固有限制,但它为大多数监控和优化用例在准确性、简单性和性能开销之间提供了良好的平衡。 - -理解能力和限制有助于用户就何时以及如何依赖 Kepler 的功率归因指标做出明智决策。 diff --git a/docs/submodules/kepler b/docs/submodules/kepler new file mode 160000 index 00000000..0eef5fe8 --- /dev/null +++ b/docs/submodules/kepler @@ -0,0 +1 @@ +Subproject commit 0eef5fe8e37cb4b26c62702f8081d0daa3790036 diff --git a/docs/submodules/kepler-operator b/docs/submodules/kepler-operator new file mode 160000 index 00000000..8a57e1ed --- /dev/null +++ b/docs/submodules/kepler-operator @@ -0,0 +1 @@ +Subproject commit 8a57e1ed7e1a3ebb16e34eea3ebe71c5e50cb5ad diff --git a/mkdocs.yml b/mkdocs.yml index dfba838b..8f66c314 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,19 +16,45 @@ theme: - rust docs_dir: ./docs + +# Exclude files that contain links to non-documentation files +exclude_docs: | + submodules/*/CONTRIBUTING.md + submodules/*/GOVERNANCE.md + submodules/*/README.md + submodules/*/code-of-conduct.md + submodules/*/MAINTAINERS.md + submodules/*/SECURITY.md + submodules/*/Contributors.md + submodules/*/Operator-SDK.md + nav: - Home: index.md - Kepler: - Getting Started: - - Installation Guide: kepler/installation/guide.md + - Installation Guide: submodules/kepler/docs/user/installation.md - Concepts/Guides: - - Power Attribution: kepler/usage/power-attribution.md + - Power Attribution: submodules/kepler/docs/developer/power-attribution-guide.md - Reference: - - Configuration: kepler/usage/configuration.md - - Metrics: kepler/design/metrics.md + - Configuration: submodules/kepler/docs/user/configuration.md + - Metrics: submodules/kepler/docs/user/metrics.md - Developer: - - Guides: kepler/developer/dev-docs.md + - Overview: submodules/kepler/docs/developer/index.md + - Architecture: submodules/kepler/docs/developer/design/architecture/index.md + - Pre-commit Setup: submodules/kepler/docs/developer/pre-commit.md + - Release Process: submodules/kepler/docs/developer/release.md + - Profiling: submodules/kepler/docs/developer/profiling.md - Kepler Operator: + - User Guides: + - Grafana Deployment: submodules/kepler-operator/docs/user-guides/grafana-deployment.md + - Developer: + - Overview: submodules/kepler-operator/docs/developer/README.md + - Architecture: submodules/kepler-operator/docs/developer/architecture.md + - Grafana Deployment Overview: submodules/kepler-operator/docs/developer/grafana-deployment-overview.md + - Pre-commit Hooks: submodules/kepler-operator/docs/developer/pre-commit-hooks.md + - Reference: + - API Documentation: submodules/kepler-operator/docs/api.md + - Release Design: submodules/kepler-operator/docs/design/release.md - OpenShift: - Overview: kepler-operator/openshift/index.md - Quick Start: kepler-operator/openshift/quickstart.md