blockmine 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/README.md +469 -0
- package/.claude/agents/auth-route-debugger.md +118 -0
- package/.claude/agents/auth-route-tester.md +93 -0
- package/.claude/agents/auto-error-resolver.md +97 -0
- package/.claude/agents/build-optimizer.md +236 -0
- package/.claude/agents/code-architecture-reviewer.md +83 -0
- package/.claude/agents/code-refactor-master.md +94 -0
- package/.claude/agents/cost-optimizer.md +134 -0
- package/.claude/agents/deployment-orchestrator.md +113 -0
- package/.claude/agents/documentation-architect.md +82 -0
- package/.claude/agents/frontend-error-fixer.md +77 -0
- package/.claude/agents/iac-code-generator.md +71 -0
- package/.claude/agents/incident-responder.md +346 -0
- package/.claude/agents/infrastructure-architect.md +31 -0
- package/.claude/agents/kubernetes-specialist.md +56 -0
- package/.claude/agents/migration-planner.md +181 -0
- package/.claude/agents/network-architect.md +196 -0
- package/.claude/agents/plan-reviewer.md +52 -0
- package/.claude/agents/refactor-planner.md +63 -0
- package/.claude/agents/security-scanner.md +102 -0
- package/.claude/agents/web-research-specialist.md +78 -0
- package/.claude/commands/cost-analysis.md +315 -0
- package/.claude/commands/dev-docs-update.md +55 -0
- package/.claude/commands/dev-docs.md +51 -0
- package/.claude/commands/incident-debug.md +247 -0
- package/.claude/commands/infra-plan.md +81 -0
- package/.claude/commands/migration-plan.md +478 -0
- package/.claude/commands/route-research-for-testing.md +37 -0
- package/.claude/commands/security-review.md +66 -0
- package/.claude/hooks/CONFIG.md +448 -0
- package/.claude/hooks/README.md +163 -0
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
- package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
- package/.claude/hooks/add-skill-activation-banners.ts +132 -0
- package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +222 -0
- package/.claude/hooks/k8s-manifest-validator.sh +56 -0
- package/.claude/hooks/package-lock.json +556 -0
- package/.claude/hooks/package.json +16 -0
- package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
- package/.claude/hooks/post-tool-use-tracker.sh +183 -0
- package/.claude/hooks/security-policy-check.sh +247 -0
- package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
- package/.claude/hooks/skill-activation-prompt.sh +10 -0
- package/.claude/hooks/skill-activation-prompt.ts +141 -0
- package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
- package/.claude/hooks/terraform-validator.sh +53 -0
- package/.claude/hooks/test-input.json +7 -0
- package/.claude/hooks/test-skill-activation.ts +427 -0
- package/.claude/hooks/trigger-build-resolver.sh +79 -0
- package/.claude/hooks/tsc-check.sh +173 -0
- package/.claude/hooks/tsconfig.json +19 -0
- package/.claude/settings.json +55 -0
- package/.claude/settings.local.json +27 -14
- package/.claude/skills/README.md +507 -0
- package/.claude/skills/api-engineering/SKILL.md +63 -0
- package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
- package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
- package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
- package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
- package/.claude/skills/build-engineering/SKILL.md +431 -0
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
- package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
- package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
- package/.claude/skills/build-engineering/resources/build-security.md +95 -0
- package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
- package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
- package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
- package/.claude/skills/cloud-engineering/SKILL.md +675 -0
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
- package/.claude/skills/cybersecurity/SKILL.md +409 -0
- package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
- package/.claude/skills/database-engineering/SKILL.md +61 -0
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
- package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
- package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
- package/.claude/skills/devsecops/SKILL.md +374 -0
- package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
- package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
- package/.claude/skills/devsecops/resources/container-security.md +915 -0
- package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
- package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
- package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
- package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
- package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
- package/.claude/skills/devsecops/resources/security-testing.md +203 -0
- package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
- package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
- package/.claude/skills/documentation-as-code/SKILL.md +323 -0
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
- package/.claude/skills/engineering-management/SKILL.md +356 -0
- package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
- package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
- package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
- package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
- package/.claude/skills/error-tracking/SKILL.md +379 -0
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/.claude/skills/general-it-engineering/SKILL.md +393 -0
- package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
- package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
- package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
- package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
- package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
- package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
- package/.claude/skills/network-engineering/SKILL.md +385 -0
- package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
- package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
- package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
- package/.claude/skills/network-engineering/resources/network-security.md +921 -0
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
- package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
- package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
- package/.claude/skills/observability-engineering/SKILL.md +101 -0
- package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
- package/.claude/skills/platform-engineering/SKILL.md +555 -0
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
- package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
- package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
- package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
- package/.claude/skills/release-engineering/SKILL.md +393 -0
- package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
- package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
- package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
- package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
- package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
- package/.claude/skills/route-tester/SKILL.md +392 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +430 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +2940 -0
- package/.claude/skills/sre/SKILL.md +464 -0
- package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
- package/.claude/skills/sre/resources/capacity-planning.md +226 -0
- package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
- package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
- package/.claude/skills/sre/resources/incident-management.md +436 -0
- package/.claude/skills/sre/resources/observability-stack.md +240 -0
- package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
- package/.claude/skills/sre/resources/performance-optimization.md +108 -0
- package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
- package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
- package/.claude/skills/sre/resources/toil-reduction.md +145 -0
- package/.claude/skills/systems-engineering/SKILL.md +648 -0
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
- package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
- package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
- package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
- package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
- package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
- package/.claude/skills/technical-leadership/SKILL.md +728 -0
- package/CHANGELOG.md +90 -54
- package/README.md +94 -0
- package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
- package/backend/jest.config.js +59 -0
- package/backend/package-lock.json +6129 -0
- package/backend/package.json +16 -4
- package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
- package/backend/prisma/schema.prisma +33 -0
- package/backend/src/__tests__/core/DependencyService.test.js +336 -0
- package/backend/src/__tests__/core/UserService.test.js +875 -0
- package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
- package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
- package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
- package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
- package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
- package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
- package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
- package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
- package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
- package/backend/src/__tests__/secretsFilter.test.js +425 -0
- package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
- package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
- package/backend/src/__tests__/services/CacheManager.test.js +125 -0
- package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
- package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
- package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
- package/backend/src/__tests__/setup.js +25 -0
- package/backend/src/api/routes/apiKeys.js +181 -0
- package/backend/src/api/routes/bots.js +49 -7
- package/backend/src/api/routes/plugins.js +2 -1
- package/backend/src/api/routes/system.js +174 -0
- package/backend/src/container.js +82 -0
- package/backend/src/core/BotManager.js +142 -871
- package/backend/src/core/BotManager.old.js +1093 -0
- package/backend/src/core/BotProcess.js +1092 -858
- package/backend/src/core/EventGraphManager.js +280 -198
- package/backend/src/core/GraphExecutionEngine.js +321 -325
- package/backend/src/core/MessageQueue.js +27 -6
- package/backend/src/core/NodeRegistry.js +37 -1134
- package/backend/src/core/PluginManager.js +62 -12
- package/backend/src/core/PrismaService.js +32 -0
- package/backend/src/core/UserService.js +3 -3
- package/backend/src/core/__tests__/PrismaService.test.js +24 -0
- package/backend/src/core/commands/README.md +305 -0
- package/backend/src/core/commands/dev.js +13 -7
- package/backend/src/core/commands/ping.js +10 -4
- package/backend/src/core/commands/whois.js +63 -0
- package/backend/src/core/config/validation.js +27 -0
- package/backend/src/core/constants/graphTypes.js +21 -0
- package/backend/src/core/node-registries/actions.js +132 -0
- package/backend/src/core/node-registries/arrays.js +137 -0
- package/backend/src/core/node-registries/bot.js +23 -0
- package/backend/src/core/node-registries/data.js +290 -0
- package/backend/src/core/node-registries/debug.js +26 -0
- package/backend/src/core/node-registries/events.js +187 -0
- package/backend/src/core/node-registries/flow.js +139 -0
- package/backend/src/core/node-registries/logic.js +45 -0
- package/backend/src/core/node-registries/math.js +42 -0
- package/backend/src/core/node-registries/objects.js +98 -0
- package/backend/src/core/node-registries/strings.js +153 -0
- package/backend/src/core/node-registries/time.js +113 -0
- package/backend/src/core/node-registries/users.js +79 -0
- package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
- package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
- package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
- package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/{data_cast.js → data/cast.js} +8 -0
- package/backend/src/core/nodes/data/datetime_literal.js +27 -0
- package/backend/src/core/nodes/data/entity_info.js +69 -0
- package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
- package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
- package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
- package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
- package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
- package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
- package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
- package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
- package/backend/src/core/nodes/time/add.js +33 -0
- package/backend/src/core/nodes/time/compare.js +35 -0
- package/backend/src/core/nodes/time/diff.js +29 -0
- package/backend/src/core/nodes/time/format.js +32 -0
- package/backend/src/core/nodes/time/now.js +18 -0
- package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
- package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
- package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
- package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
- package/backend/src/core/services/BotLifecycleService.js +596 -0
- package/backend/src/core/services/BotProcessManager.js +163 -0
- package/backend/src/core/services/CacheManager.js +111 -0
- package/backend/src/core/services/CommandExecutionService.js +351 -0
- package/backend/src/core/services/ResourceMonitorService.js +90 -0
- package/backend/src/core/services/TelemetryService.js +124 -0
- package/backend/src/core/services/ValidationService.js +132 -0
- package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
- package/backend/src/core/services.js +20 -5
- package/backend/src/core/system/CommandContext.js +84 -0
- package/backend/src/core/system/Transport.js +78 -0
- package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
- package/backend/src/core/utils/jsonParser.js +18 -0
- package/backend/src/core/utils/secretsFilter.js +262 -0
- package/backend/src/core/utils/variableParser.js +89 -0
- package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
- package/backend/src/core/validation/nodeSchemas.js +112 -0
- package/backend/src/lib/prisma.js +2 -4
- package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
- package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
- package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
- package/backend/src/real-time/botApi/handlers/index.js +43 -0
- package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
- package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
- package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
- package/backend/src/real-time/botApi/index.js +40 -0
- package/backend/src/real-time/botApi/middleware.js +79 -0
- package/backend/src/real-time/botApi/utils.js +54 -0
- package/backend/src/real-time/socketHandler.js +6 -2
- package/backend/src/repositories/BaseRepository.js +43 -0
- package/backend/src/repositories/BotRepository.js +42 -0
- package/backend/src/repositories/CommandRepository.js +53 -0
- package/backend/src/repositories/EventGraphRepository.js +40 -0
- package/backend/src/repositories/GroupRepository.js +69 -0
- package/backend/src/repositories/PermissionRepository.js +48 -0
- package/backend/src/repositories/PluginRepository.js +42 -0
- package/backend/src/repositories/ServerRepository.js +27 -0
- package/backend/src/repositories/UserRepository.js +48 -0
- package/backend/src/server.js +3 -0
- package/backend/src/test-refactor.js +85 -0
- package/frontend/dist/assets/index-CfTo92bP.css +1 -0
- package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +0 -5
- package/package.json +2 -1
- package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
- package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
- package/nul +0 -0
- /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
- /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
- /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
- /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
- /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
- /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
- /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
- /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
- /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
- /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
- /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
- /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
- /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
- /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
- /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
- /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
- /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
- /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
- /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
- /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
- /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
- /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
- /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
- /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
- /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
- /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
- /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
- /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
- /package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +0 -0
|
@@ -0,0 +1,871 @@
|
|
|
1
|
+
# Performance Tuning
|
|
2
|
+
|
|
3
|
+
Comprehensive guide to Linux system performance tuning covering CPU optimization, memory management, disk I/O, network performance, profiling tools, and benchmarking for maximum efficiency.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Performance Analysis Methodology](#performance-analysis-methodology)
|
|
8
|
+
- [CPU Optimization](#cpu-optimization)
|
|
9
|
+
- [Memory Tuning](#memory-tuning)
|
|
10
|
+
- [Disk I/O Optimization](#disk-io-optimization)
|
|
11
|
+
- [Network Performance](#network-performance)
|
|
12
|
+
- [Profiling Tools](#profiling-tools)
|
|
13
|
+
- [Benchmarking](#benchmarking)
|
|
14
|
+
- [Kernel Parameters](#kernel-parameters)
|
|
15
|
+
- [Best Practices](#best-practices)
|
|
16
|
+
- [Common Issues](#common-issues)
|
|
17
|
+
|
|
18
|
+
## Performance Analysis Methodology
|
|
19
|
+
|
|
20
|
+
### The USE Method (Utilization, Saturation, Errors)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
For every resource:
|
|
24
|
+
1. Utilization: % time the resource was busy
|
|
25
|
+
2. Saturation: Degree of extra work queued
|
|
26
|
+
3. Errors: Count of error events
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Analysis Workflow:**
|
|
30
|
+
```bash
|
|
31
|
+
#!/bin/bash
|
|
32
|
+
# performance-check.sh - Quick system performance overview
|
|
33
|
+
|
|
34
|
+
echo "=== CPU Analysis ==="
|
|
35
|
+
uptime
|
|
36
|
+
mpstat -P ALL 1 1
|
|
37
|
+
|
|
38
|
+
echo -e "\n=== Memory Analysis ==="
|
|
39
|
+
free -h
|
|
40
|
+
vmstat 1 2
|
|
41
|
+
|
|
42
|
+
echo -e "\n=== Disk I/O Analysis ==="
|
|
43
|
+
iostat -x 1 2
|
|
44
|
+
|
|
45
|
+
echo -e "\n=== Network Analysis ==="
|
|
46
|
+
ss -s
|
|
47
|
+
sar -n DEV 1 2 2>/dev/null || echo "sysstat not installed"
|
|
48
|
+
|
|
49
|
+
echo -e "\n=== Top Processes ==="
|
|
50
|
+
ps aux --sort=-%cpu | head -10
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## CPU Optimization
|
|
54
|
+
|
|
55
|
+
### CPU Affinity
|
|
56
|
+
|
|
57
|
+
**Pin Process to Specific CPUs:**
|
|
58
|
+
```bash
|
|
59
|
+
# Run process on CPUs 0-3
|
|
60
|
+
taskset -c 0-3 ./my-application
|
|
61
|
+
|
|
62
|
+
# Pin existing process
|
|
63
|
+
taskset -cp 0-3 <PID>
|
|
64
|
+
|
|
65
|
+
# View current affinity
|
|
66
|
+
taskset -cp <PID>
|
|
67
|
+
|
|
68
|
+
# Example: Pin nginx workers
|
|
69
|
+
for pid in $(pgrep nginx); do
|
|
70
|
+
taskset -cp 0-3 $pid
|
|
71
|
+
done
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**systemd Service CPU Affinity:**
|
|
75
|
+
```ini
|
|
76
|
+
# /etc/systemd/system/myapp.service
|
|
77
|
+
[Service]
|
|
78
|
+
CPUAffinity=0-3
|
|
79
|
+
CPUQuota=200% # Allow up to 2 CPUs
|
|
80
|
+
CPUWeight=200 # Higher scheduling priority
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### CPU Governors
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# View available governors
|
|
87
|
+
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
|
|
88
|
+
|
|
89
|
+
# Check current governor
|
|
90
|
+
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
|
|
91
|
+
|
|
92
|
+
# Set performance governor (maximum frequency)
|
|
93
|
+
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
|
94
|
+
|
|
95
|
+
# Set powersave governor (minimum frequency)
|
|
96
|
+
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
|
97
|
+
|
|
98
|
+
# Install cpufrequtils for easier management
|
|
99
|
+
sudo apt install cpufrequtils
|
|
100
|
+
|
|
101
|
+
# Set governor permanently
|
|
102
|
+
sudo cpufreq-set -g performance
|
|
103
|
+
|
|
104
|
+
# Check CPU frequencies
|
|
105
|
+
cpufreq-info
|
|
106
|
+
watch -n 1 'grep MHz /proc/cpuinfo'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Process Priority (nice/renice)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Start with lower priority (higher nice value = lower priority)
|
|
113
|
+
nice -n 10 ./cpu-intensive-job
|
|
114
|
+
|
|
115
|
+
# Start with higher priority (requires root)
|
|
116
|
+
sudo nice -n -10 ./critical-service
|
|
117
|
+
|
|
118
|
+
# Change priority of running process
|
|
119
|
+
sudo renice -n -5 -p <PID>
|
|
120
|
+
|
|
121
|
+
# Set priority for all processes of a user
|
|
122
|
+
sudo renice -n 5 -u username
|
|
123
|
+
|
|
124
|
+
# View process priorities
|
|
125
|
+
ps -eo pid,ni,comm --sort=-ni | head
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### CPU Monitoring
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Real-time CPU usage per core
|
|
132
|
+
mpstat -P ALL 1
|
|
133
|
+
|
|
134
|
+
# Per-process CPU usage
|
|
135
|
+
pidstat 1
|
|
136
|
+
|
|
137
|
+
# CPU usage history
|
|
138
|
+
sar -u 1 10
|
|
139
|
+
|
|
140
|
+
# Top CPU consumers
|
|
141
|
+
top -bn1 | head -20
|
|
142
|
+
ps aux --sort=-%cpu | head -10
|
|
143
|
+
|
|
144
|
+
# CPU wait time (I/O wait)
|
|
145
|
+
iostat -c 1
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Memory Tuning
|
|
149
|
+
|
|
150
|
+
### Swap Configuration
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Check current swap
|
|
154
|
+
free -h
|
|
155
|
+
swapon --show
|
|
156
|
+
|
|
157
|
+
# Create swap file
|
|
158
|
+
sudo fallocate -l 4G /swapfile
|
|
159
|
+
sudo chmod 600 /swapfile
|
|
160
|
+
sudo mkswap /swapfile
|
|
161
|
+
sudo swapon /swapfile
|
|
162
|
+
|
|
163
|
+
# Make permanent
|
|
164
|
+
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
|
165
|
+
|
|
166
|
+
# Adjust swappiness (0-100, lower = less swapping)
|
|
167
|
+
# Default: 60, Recommended for servers: 10
|
|
168
|
+
sudo sysctl vm.swappiness=10
|
|
169
|
+
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swappiness.conf
|
|
170
|
+
|
|
171
|
+
# Disable swap completely (for k8s nodes)
|
|
172
|
+
sudo swapoff -a
|
|
173
|
+
# Comment out swap in /etc/fstab
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Huge Pages
|
|
177
|
+
|
|
178
|
+
**When to Use:**
|
|
179
|
+
- Large memory workloads (databases, VMs)
|
|
180
|
+
- Reduces TLB misses
|
|
181
|
+
- Better for applications with large memory allocations
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Check huge page size
|
|
185
|
+
grep Hugepagesize /proc/meminfo
|
|
186
|
+
|
|
187
|
+
# Configure huge pages (2MB pages)
|
|
188
|
+
# Calculate: (Required RAM in MB) / 2
|
|
189
|
+
# Example: For 4GB = 4096 / 2 = 2048 pages
|
|
190
|
+
|
|
191
|
+
# Temporary
|
|
192
|
+
echo 2048 | sudo tee /proc/sys/vm/nr_hugepages
|
|
193
|
+
|
|
194
|
+
# Permanent
|
|
195
|
+
echo 'vm.nr_hugepages=2048' | sudo tee -a /etc/sysctl.d/99-hugepages.conf
|
|
196
|
+
sudo sysctl -p /etc/sysctl.d/99-hugepages.conf
|
|
197
|
+
|
|
198
|
+
# Check allocation
|
|
199
|
+
cat /proc/meminfo | grep -i huge
|
|
200
|
+
|
|
201
|
+
# Mount hugetlbfs
|
|
202
|
+
sudo mkdir -p /mnt/huge
|
|
203
|
+
sudo mount -t hugetlbfs hugetlbfs /mnt/huge
|
|
204
|
+
echo 'hugetlbfs /mnt/huge hugetlbfs defaults 0 0' | sudo tee -a /etc/fstab
|
|
205
|
+
|
|
206
|
+
# Application usage (example for PostgreSQL)
|
|
207
|
+
# postgresql.conf
|
|
208
|
+
# huge_pages = on
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Memory Optimization
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# /etc/sysctl.d/99-memory.conf
|
|
215
|
+
|
|
216
|
+
# Swappiness (lower = less swap usage)
|
|
217
|
+
vm.swappiness = 10
|
|
218
|
+
|
|
219
|
+
# Cache pressure (higher = more aggressive cache reclaim)
|
|
220
|
+
vm.vfs_cache_pressure = 50
|
|
221
|
+
|
|
222
|
+
# Dirty page ratios
|
|
223
|
+
vm.dirty_ratio = 15 # % of RAM for dirty pages before blocking
|
|
224
|
+
vm.dirty_background_ratio = 5 # % to start background writes
|
|
225
|
+
|
|
226
|
+
# Overcommit strategy
|
|
227
|
+
vm.overcommit_memory = 1 # 0=heuristic, 1=always, 2=never
|
|
228
|
+
vm.overcommit_ratio = 50 # % of RAM for overcommit
|
|
229
|
+
|
|
230
|
+
# Minimum free memory (in KB)
|
|
231
|
+
vm.min_free_kbytes = 65536
|
|
232
|
+
|
|
233
|
+
# Apply changes
|
|
234
|
+
sudo sysctl -p /etc/sysctl.d/99-memory.conf
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Memory Monitoring
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Memory overview
|
|
241
|
+
free -h
|
|
242
|
+
cat /proc/meminfo
|
|
243
|
+
|
|
244
|
+
# Detailed memory stats
|
|
245
|
+
vmstat 1 5
|
|
246
|
+
|
|
247
|
+
# Per-process memory
|
|
248
|
+
ps aux --sort=-%mem | head -10
|
|
249
|
+
pmap -x <PID>
|
|
250
|
+
|
|
251
|
+
# Memory pressure (PSI - Pressure Stall Information)
|
|
252
|
+
cat /proc/pressure/memory
|
|
253
|
+
|
|
254
|
+
# OOM killer history
|
|
255
|
+
dmesg | grep -i oom
|
|
256
|
+
|
|
257
|
+
# Memory bandwidth (if available)
|
|
258
|
+
perf stat -e 'mem-loads,mem-stores' -a sleep 5
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Disk I/O Optimization
|
|
262
|
+
|
|
263
|
+
### I/O Schedulers
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# Check current scheduler
|
|
267
|
+
cat /sys/block/sda/queue/scheduler
|
|
268
|
+
|
|
269
|
+
# Available schedulers: none, mq-deadline, kyber, bfq
|
|
270
|
+
|
|
271
|
+
# Set scheduler temporarily
|
|
272
|
+
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
|
|
273
|
+
|
|
274
|
+
# Set permanently (via kernel parameter)
|
|
275
|
+
# Edit /etc/default/grub
|
|
276
|
+
GRUB_CMDLINE_LINUX="elevator=mq-deadline"
|
|
277
|
+
sudo update-grub
|
|
278
|
+
|
|
279
|
+
# Recommended schedulers:
|
|
280
|
+
# - SSD/NVMe: none (no scheduler, direct I/O)
|
|
281
|
+
# - HDD: mq-deadline or bfq
|
|
282
|
+
# - Database workloads: mq-deadline
|
|
283
|
+
# - Desktop: bfq
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Readahead Tuning
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Check current readahead
|
|
290
|
+
sudo blockdev --getra /dev/sda
|
|
291
|
+
|
|
292
|
+
# Set readahead (in 512-byte sectors)
|
|
293
|
+
# Default: 256 (128KB)
|
|
294
|
+
# Recommended for sequential: 4096 (2MB)
|
|
295
|
+
sudo blockdev --setra 4096 /dev/sda
|
|
296
|
+
|
|
297
|
+
# Make permanent
|
|
298
|
+
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/read_ahead_kb}="2048"' | \
|
|
299
|
+
sudo tee /etc/udev/rules.d/60-readahead.rules
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Filesystem Mount Options
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# /etc/fstab optimization examples
|
|
306
|
+
|
|
307
|
+
# noatime: Don't update access time (significant performance boost)
|
|
308
|
+
UUID=xxx /data ext4 defaults,noatime,nodiratime 0 2
|
|
309
|
+
|
|
310
|
+
# For databases (PostgreSQL, MySQL)
|
|
311
|
+
UUID=xxx /var/lib/postgresql ext4 noatime,data=ordered,barrier=1 0 2
|
|
312
|
+
|
|
313
|
+
# For high-performance write workloads
|
|
314
|
+
UUID=xxx /data xfs noatime,nodiratime,logbufs=8,logbsize=256k 0 2
|
|
315
|
+
|
|
316
|
+
# For SSDs
|
|
317
|
+
UUID=xxx /data ext4 noatime,discard 0 2
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### I/O Monitoring
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# Disk I/O statistics
|
|
324
|
+
iostat -x 1 5
|
|
325
|
+
|
|
326
|
+
# Per-process I/O
|
|
327
|
+
iotop
|
|
328
|
+
iotop -oPa # Show accumulated I/O
|
|
329
|
+
|
|
330
|
+
# Disk usage
|
|
331
|
+
df -h
|
|
332
|
+
du -sh /var/* | sort -h
|
|
333
|
+
|
|
334
|
+
# Find large files
|
|
335
|
+
find / -type f -size +1G -exec ls -lh {} \;
|
|
336
|
+
|
|
337
|
+
# I/O wait time
|
|
338
|
+
vmstat 1 5 # Check 'wa' column
|
|
339
|
+
|
|
340
|
+
# Detailed I/O stats
|
|
341
|
+
pidstat -d 1
|
|
342
|
+
|
|
343
|
+
# Block device stats
|
|
344
|
+
cat /proc/diskstats
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## Network Performance
|
|
348
|
+
|
|
349
|
+
### TCP/IP Tuning
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# /etc/sysctl.d/99-network-performance.conf
|
|
353
|
+
|
|
354
|
+
# === TCP Buffer Sizes ===
|
|
355
|
+
# Increase for high-bandwidth networks (10Gbps+)
|
|
356
|
+
net.core.rmem_max = 134217728 # 128MB
|
|
357
|
+
net.core.wmem_max = 134217728 # 128MB
|
|
358
|
+
net.core.rmem_default = 16777216 # 16MB
|
|
359
|
+
net.core.wmem_default = 16777216 # 16MB
|
|
360
|
+
|
|
361
|
+
# TCP autotuning
|
|
362
|
+
net.ipv4.tcp_rmem = 4096 87380 134217728
|
|
363
|
+
net.ipv4.tcp_wmem = 4096 65536 134217728
|
|
364
|
+
|
|
365
|
+
# === TCP Performance ===
|
|
366
|
+
# Window scaling
|
|
367
|
+
net.ipv4.tcp_window_scaling = 1
|
|
368
|
+
|
|
369
|
+
# Timestamps
|
|
370
|
+
net.ipv4.tcp_timestamps = 1
|
|
371
|
+
|
|
372
|
+
# Selective acknowledgments
|
|
373
|
+
net.ipv4.tcp_sack = 1
|
|
374
|
+
|
|
375
|
+
# TCP Fast Open
|
|
376
|
+
net.ipv4.tcp_fastopen = 3
|
|
377
|
+
|
|
378
|
+
# === Congestion Control ===
|
|
379
|
+
# BBR (recommended for modern kernels)
|
|
380
|
+
net.core.default_qdisc = fq
|
|
381
|
+
net.ipv4.tcp_congestion_control = bbr
|
|
382
|
+
|
|
383
|
+
# === Connection Handling ===
|
|
384
|
+
# SYN backlog
|
|
385
|
+
net.ipv4.tcp_max_syn_backlog = 8192
|
|
386
|
+
net.core.somaxconn = 4096
|
|
387
|
+
|
|
388
|
+
# Connection tracking
|
|
389
|
+
net.netfilter.nf_conntrack_max = 1000000
|
|
390
|
+
net.nf_conntrack_max = 1000000
|
|
391
|
+
|
|
392
|
+
# TIME_WAIT reuse
|
|
393
|
+
net.ipv4.tcp_tw_reuse = 1
|
|
394
|
+
net.ipv4.tcp_fin_timeout = 15
|
|
395
|
+
|
|
396
|
+
# Keep-alive
|
|
397
|
+
net.ipv4.tcp_keepalive_time = 300
|
|
398
|
+
net.ipv4.tcp_keepalive_probes = 5
|
|
399
|
+
net.ipv4.tcp_keepalive_intvl = 15
|
|
400
|
+
|
|
401
|
+
# === Network Buffers ===
|
|
402
|
+
net.core.netdev_max_backlog = 5000
|
|
403
|
+
net.core.netdev_budget = 600
|
|
404
|
+
|
|
405
|
+
# Apply settings
|
|
406
|
+
sudo sysctl -p /etc/sysctl.d/99-network-performance.conf
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### NIC Ring Buffers
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
# Check current ring buffer sizes
|
|
413
|
+
ethtool -g eth0
|
|
414
|
+
|
|
415
|
+
# Increase ring buffer size
|
|
416
|
+
sudo ethtool -G eth0 rx 4096 tx 4096
|
|
417
|
+
|
|
418
|
+
# Make permanent (systemd)
|
|
419
|
+
# /etc/systemd/system/ethtool-ring.service
|
|
420
|
+
[Unit]
|
|
421
|
+
Description=Ethtool ring buffer configuration
|
|
422
|
+
After=network.target
|
|
423
|
+
|
|
424
|
+
[Service]
|
|
425
|
+
Type=oneshot
|
|
426
|
+
ExecStart=/sbin/ethtool -G eth0 rx 4096 tx 4096
|
|
427
|
+
|
|
428
|
+
[Install]
|
|
429
|
+
WantedBy=multi-user.target
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Network Monitoring
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
# Interface statistics
|
|
436
|
+
ip -s link show eth0
|
|
437
|
+
netstat -i
|
|
438
|
+
|
|
439
|
+
# Bandwidth monitoring
|
|
440
|
+
iftop -i eth0
|
|
441
|
+
nload eth0
|
|
442
|
+
|
|
443
|
+
# Connection statistics
|
|
444
|
+
ss -s
|
|
445
|
+
|
|
446
|
+
# Network throughput
|
|
447
|
+
iperf3 -s # Server
|
|
448
|
+
iperf3 -c server-ip # Client
|
|
449
|
+
|
|
450
|
+
# Packet statistics
|
|
451
|
+
sar -n DEV 1 5
|
|
452
|
+
|
|
453
|
+
# TCP statistics
|
|
454
|
+
nstat -az | grep -i tcp
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
## Profiling Tools
|
|
458
|
+
|
|
459
|
+
### perf
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# Install perf
|
|
463
|
+
sudo apt install linux-tools-$(uname -r)
|
|
464
|
+
|
|
465
|
+
# Record system-wide CPU usage
|
|
466
|
+
sudo perf record -a -g sleep 30
|
|
467
|
+
|
|
468
|
+
# Analyze recorded data
|
|
469
|
+
sudo perf report
|
|
470
|
+
|
|
471
|
+
# Record specific process
|
|
472
|
+
sudo perf record -p <PID> -g sleep 30
|
|
473
|
+
|
|
474
|
+
# Live top (like top but with perf)
|
|
475
|
+
sudo perf top
|
|
476
|
+
|
|
477
|
+
# CPU cache statistics
|
|
478
|
+
sudo perf stat -e cache-references,cache-misses ./application
|
|
479
|
+
|
|
480
|
+
# Memory access patterns
|
|
481
|
+
sudo perf stat -e mem-loads,mem-stores ./application
|
|
482
|
+
|
|
483
|
+
# Branch prediction
|
|
484
|
+
sudo perf stat -e branches,branch-misses ./application
|
|
485
|
+
|
|
486
|
+
# Flamegraph generation
|
|
487
|
+
sudo perf record -F 99 -a -g -- sleep 30
|
|
488
|
+
sudo perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > flamegraph.svg
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
### strace
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
# Trace system calls
|
|
495
|
+
strace ./application
|
|
496
|
+
|
|
497
|
+
# Trace specific syscalls
|
|
498
|
+
strace -e open,read,write ./application
|
|
499
|
+
|
|
500
|
+
# Attach to running process
|
|
501
|
+
sudo strace -p <PID>
|
|
502
|
+
|
|
503
|
+
# Count syscalls
|
|
504
|
+
strace -c ./application
|
|
505
|
+
|
|
506
|
+
# Save to file
|
|
507
|
+
strace -o trace.log ./application
|
|
508
|
+
|
|
509
|
+
# Trace with timestamps
|
|
510
|
+
strace -tt ./application
|
|
511
|
+
|
|
512
|
+
# Trace child processes
|
|
513
|
+
strace -f ./application
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
### ftrace
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
# Function tracing
|
|
520
|
+
cd /sys/kernel/debug/tracing
|
|
521
|
+
|
|
522
|
+
# Enable function tracing
|
|
523
|
+
echo function > current_tracer
|
|
524
|
+
|
|
525
|
+
# Set filter
|
|
526
|
+
echo 'sys_read' > set_ftrace_filter
|
|
527
|
+
|
|
528
|
+
# Enable tracing
|
|
529
|
+
echo 1 > tracing_on
|
|
530
|
+
|
|
531
|
+
# View trace
|
|
532
|
+
cat trace
|
|
533
|
+
|
|
534
|
+
# Disable tracing
|
|
535
|
+
echo 0 > tracing_on
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### BPF/bpftrace
|
|
539
|
+
|
|
540
|
+
```bash
|
|
541
|
+
# Install bpftrace
|
|
542
|
+
sudo apt install bpftrace
|
|
543
|
+
|
|
544
|
+
# Trace open() syscalls
|
|
545
|
+
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'
|
|
546
|
+
|
|
547
|
+
# Count syscalls by process
|
|
548
|
+
sudo bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'
|
|
549
|
+
|
|
550
|
+
# TCP connection tracking
|
|
551
|
+
sudo bpftrace -e 'kprobe:tcp_connect { printf("PID %d connecting\n", pid); }'
|
|
552
|
+
|
|
553
|
+
# Disk I/O latency
|
|
554
|
+
sudo bpftrace -e 'tracepoint:block:block_rq_issue { @start[arg0] = nsecs; }
|
|
555
|
+
tracepoint:block:block_rq_complete /@start[arg0]/ {
|
|
556
|
+
@usecs = hist((nsecs - @start[arg0]) / 1000);
|
|
557
|
+
delete(@start[arg0]);
|
|
558
|
+
}'
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
## Benchmarking
|
|
562
|
+
|
|
563
|
+
### CPU Benchmarks
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
# sysbench CPU test
|
|
567
|
+
sudo apt install sysbench
|
|
568
|
+
|
|
569
|
+
# Single-threaded
|
|
570
|
+
sysbench cpu --cpu-max-prime=20000 run
|
|
571
|
+
|
|
572
|
+
# Multi-threaded
|
|
573
|
+
sysbench cpu --threads=4 --cpu-max-prime=20000 run
|
|
574
|
+
|
|
575
|
+
# stress-ng
|
|
576
|
+
sudo apt install stress-ng
|
|
577
|
+
|
|
578
|
+
# CPU stress test
|
|
579
|
+
stress-ng --cpu 4 --timeout 60s --metrics
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
### Memory Benchmarks
|
|
583
|
+
|
|
584
|
+
```bash
|
|
585
|
+
# sysbench memory test
|
|
586
|
+
sysbench memory --memory-total-size=10G --memory-oper=read run
|
|
587
|
+
sysbench memory --memory-total-size=10G --memory-oper=write run
|
|
588
|
+
|
|
589
|
+
# RAM speed test
|
|
590
|
+
sudo apt install mbw
|
|
591
|
+
mbw 1024
|
|
592
|
+
|
|
593
|
+
# Memory bandwidth
|
|
594
|
+
sysbench memory --threads=4 --memory-total-size=10G run
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
### Disk I/O Benchmarks
|
|
598
|
+
|
|
599
|
+
```bash
|
|
600
|
+
# fio - Flexible I/O tester
|
|
601
|
+
sudo apt install fio
|
|
602
|
+
|
|
603
|
+
# Random read test
|
|
604
|
+
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread \
|
|
605
|
+
--bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
|
|
606
|
+
|
|
607
|
+
# Sequential write test
|
|
608
|
+
fio --name=seqwrite --ioengine=libaio --iodepth=16 --rw=write \
|
|
609
|
+
--bs=1M --direct=1 --size=1G --numjobs=1 --runtime=60
|
|
610
|
+
|
|
611
|
+
# Mixed workload (70% read, 30% write)
|
|
612
|
+
fio --name=mixed --ioengine=libaio --iodepth=16 --rw=randrw --rwmixread=70 \
|
|
613
|
+
--bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
|
|
614
|
+
|
|
615
|
+
# dd test (simple sequential)
|
|
616
|
+
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
|
|
617
|
+
dd if=testfile of=/dev/null bs=1G count=1 iflag=direct
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### Network Benchmarks
|
|
621
|
+
|
|
622
|
+
```bash
|
|
623
|
+
# iperf3
|
|
624
|
+
sudo apt install iperf3
|
|
625
|
+
|
|
626
|
+
# Server
|
|
627
|
+
iperf3 -s
|
|
628
|
+
|
|
629
|
+
# Client (TCP)
|
|
630
|
+
iperf3 -c server-ip -t 30
|
|
631
|
+
|
|
632
|
+
# Client (UDP)
|
|
633
|
+
iperf3 -c server-ip -u -b 1G
|
|
634
|
+
|
|
635
|
+
# Parallel streams
|
|
636
|
+
iperf3 -c server-ip -P 4
|
|
637
|
+
|
|
638
|
+
# netperf
|
|
639
|
+
sudo apt install netperf
|
|
640
|
+
|
|
641
|
+
# TCP stream test
|
|
642
|
+
netperf -H server-ip -t TCP_STREAM
|
|
643
|
+
|
|
644
|
+
# TCP request/response
|
|
645
|
+
netperf -H server-ip -t TCP_RR
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
## Kernel Parameters
|
|
649
|
+
|
|
650
|
+
### Complete Performance Tuning Configuration
|
|
651
|
+
|
|
652
|
+
```bash
|
|
653
|
+
# /etc/sysctl.d/99-performance.conf
|
|
654
|
+
|
|
655
|
+
# === CPU ===
|
|
656
|
+
# Scheduler
|
|
657
|
+
kernel.sched_migration_cost_ns = 5000000
|
|
658
|
+
kernel.sched_autogroup_enabled = 0
|
|
659
|
+
|
|
660
|
+
# === Memory ===
|
|
661
|
+
vm.swappiness = 10
|
|
662
|
+
vm.vfs_cache_pressure = 50
|
|
663
|
+
vm.dirty_ratio = 15
|
|
664
|
+
vm.dirty_background_ratio = 5
|
|
665
|
+
vm.min_free_kbytes = 65536
|
|
666
|
+
|
|
667
|
+
# Huge pages
|
|
668
|
+
vm.nr_hugepages = 1024
|
|
669
|
+
|
|
670
|
+
# === Disk I/O ===
|
|
671
|
+
# Writeback
|
|
672
|
+
vm.dirty_writeback_centisecs = 500
|
|
673
|
+
vm.dirty_expire_centisecs = 3000
|
|
674
|
+
|
|
675
|
+
# === Network ===
|
|
676
|
+
# Buffer sizes
|
|
677
|
+
net.core.rmem_max = 134217728
|
|
678
|
+
net.core.wmem_max = 134217728
|
|
679
|
+
net.ipv4.tcp_rmem = 4096 87380 134217728
|
|
680
|
+
net.ipv4.tcp_wmem = 4096 65536 134217728
|
|
681
|
+
|
|
682
|
+
# TCP performance
|
|
683
|
+
net.ipv4.tcp_window_scaling = 1
|
|
684
|
+
net.ipv4.tcp_timestamps = 1
|
|
685
|
+
net.ipv4.tcp_sack = 1
|
|
686
|
+
net.ipv4.tcp_fastopen = 3
|
|
687
|
+
|
|
688
|
+
# Congestion control
|
|
689
|
+
net.core.default_qdisc = fq
|
|
690
|
+
net.ipv4.tcp_congestion_control = bbr
|
|
691
|
+
|
|
692
|
+
# Connection handling
|
|
693
|
+
net.ipv4.tcp_max_syn_backlog = 8192
|
|
694
|
+
net.core.somaxconn = 4096
|
|
695
|
+
net.core.netdev_max_backlog = 5000
|
|
696
|
+
|
|
697
|
+
# TIME_WAIT
|
|
698
|
+
net.ipv4.tcp_tw_reuse = 1
|
|
699
|
+
net.ipv4.tcp_fin_timeout = 15
|
|
700
|
+
|
|
701
|
+
# === File Descriptors ===
|
|
702
|
+
fs.file-max = 2097152
|
|
703
|
+
fs.inotify.max_user_watches = 524288
|
|
704
|
+
|
|
705
|
+
# === Security (with performance consideration) ===
|
|
706
|
+
kernel.randomize_va_space = 2
|
|
707
|
+
kernel.kptr_restrict = 1
|
|
708
|
+
|
|
709
|
+
# Apply
|
|
710
|
+
sudo sysctl -p /etc/sysctl.d/99-performance.conf
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
## Best Practices
|
|
714
|
+
|
|
715
|
+
### 1. Measure Before Optimizing
|
|
716
|
+
|
|
717
|
+
```bash
|
|
718
|
+
# Establish baseline
|
|
719
|
+
#!/bin/bash
|
|
720
|
+
echo "=== Baseline Performance ==="
|
|
721
|
+
echo "Date: $(date)"
|
|
722
|
+
echo ""
|
|
723
|
+
|
|
724
|
+
# CPU
|
|
725
|
+
echo "CPU Load:"
|
|
726
|
+
uptime
|
|
727
|
+
|
|
728
|
+
# Memory
|
|
729
|
+
echo -e "\nMemory:"
|
|
730
|
+
free -h
|
|
731
|
+
|
|
732
|
+
# Disk I/O
|
|
733
|
+
echo -e "\nDisk I/O:"
|
|
734
|
+
iostat -x 1 2 | tail -n +4
|
|
735
|
+
|
|
736
|
+
# Network
|
|
737
|
+
echo -e "\nNetwork:"
|
|
738
|
+
ss -s
|
|
739
|
+
|
|
740
|
+
# Save baseline
|
|
741
|
+
./baseline.sh > baseline-$(date +%Y%m%d).txt
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
### 2. One Change at a Time
|
|
745
|
+
|
|
746
|
+
- Make single parameter changes
|
|
747
|
+
- Document each change
|
|
748
|
+
- Measure impact before next change
|
|
749
|
+
- Keep rollback plan ready
|
|
750
|
+
|
|
751
|
+
### 3. Test in Staging First
|
|
752
|
+
|
|
753
|
+
```bash
|
|
754
|
+
# Never tune production directly
|
|
755
|
+
# Use staging environment
|
|
756
|
+
# Load test after changes
|
|
757
|
+
# Monitor for regressions
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
### 4. Monitor Continuously
|
|
761
|
+
|
|
762
|
+
```bash
|
|
763
|
+
# Set up monitoring before tuning
|
|
764
|
+
# Track:
|
|
765
|
+
# - CPU utilization
|
|
766
|
+
# - Memory usage
|
|
767
|
+
# - Disk I/O wait
|
|
768
|
+
# - Network throughput
|
|
769
|
+
# - Application latency
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
### 5. Document Everything
|
|
773
|
+
|
|
774
|
+
```bash
|
|
775
|
+
# Performance tuning log
|
|
776
|
+
# /var/log/performance-tuning.log
|
|
777
|
+
Date: 2025-01-15
|
|
778
|
+
Change: Increased TCP buffer sizes
|
|
779
|
+
Parameter: net.core.rmem_max = 134217728
|
|
780
|
+
Reason: High-bandwidth network, buffer exhaustion
|
|
781
|
+
Result: Throughput increased from 800Mbps to 9.5Gbps
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
## Common Issues
|
|
785
|
+
|
|
786
|
+
### High CPU Usage
|
|
787
|
+
|
|
788
|
+
```bash
|
|
789
|
+
# Identify CPU hogs
|
|
790
|
+
top -bn1 | head -20
|
|
791
|
+
ps aux --sort=-%cpu | head -10
|
|
792
|
+
|
|
793
|
+
# Check CPU wait time
|
|
794
|
+
iostat -c 1 5
|
|
795
|
+
|
|
796
|
+
# Profile application
|
|
797
|
+
sudo perf top -p <PID>
|
|
798
|
+
|
|
799
|
+
# Solutions:
|
|
800
|
+
# - Optimize code
|
|
801
|
+
# - Increase CPU quota
|
|
802
|
+
# - Horizontal scaling
|
|
803
|
+
# - Better algorithm
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
### Memory Exhaustion
|
|
807
|
+
|
|
808
|
+
```bash
|
|
809
|
+
# Check memory usage
|
|
810
|
+
free -h
|
|
811
|
+
ps aux --sort=-%mem | head -10
|
|
812
|
+
|
|
813
|
+
# Check for memory leaks
|
|
814
|
+
valgrind --leak-check=full ./application
|
|
815
|
+
|
|
816
|
+
# OOM killer logs
|
|
817
|
+
dmesg | grep -i oom
|
|
818
|
+
|
|
819
|
+
# Solutions:
|
|
820
|
+
# - Increase RAM
|
|
821
|
+
# - Fix memory leaks
|
|
822
|
+
# - Adjust swappiness
|
|
823
|
+
# - Add swap space
|
|
824
|
+
# - Optimize application
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
### Disk I/O Bottleneck
|
|
828
|
+
|
|
829
|
+
```bash
|
|
830
|
+
# Check I/O wait
|
|
831
|
+
iostat -x 1 5
|
|
832
|
+
vmstat 1 5
|
|
833
|
+
|
|
834
|
+
# Find I/O intensive processes
|
|
835
|
+
iotop -oPa
|
|
836
|
+
|
|
837
|
+
# Solutions:
|
|
838
|
+
# - Use SSD instead of HDD
|
|
839
|
+
# - Optimize I/O scheduler
|
|
840
|
+
# - Increase readahead
|
|
841
|
+
# - Use RAID for performance
|
|
842
|
+
# - Add more disks
|
|
843
|
+
# - Optimize application queries
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
### Network Congestion
|
|
847
|
+
|
|
848
|
+
```bash
|
|
849
|
+
# Check network stats
|
|
850
|
+
ss -s
|
|
851
|
+
netstat -i
|
|
852
|
+
sar -n DEV 1 5
|
|
853
|
+
|
|
854
|
+
# Check for dropped packets
|
|
855
|
+
ethtool -S eth0 | grep drop
|
|
856
|
+
|
|
857
|
+
# Solutions:
|
|
858
|
+
# - Increase TCP buffers
|
|
859
|
+
# - Use BBR congestion control
|
|
860
|
+
# - Increase ring buffers
|
|
861
|
+
# - Check for bandwidth limits
|
|
862
|
+
# - Optimize application
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
---
|
|
866
|
+
|
|
867
|
+
**Related Topics:**
|
|
868
|
+
- See [linux-administration.md](linux-administration.md) for system management
|
|
869
|
+
- See [troubleshooting-guide.md](troubleshooting-guide.md) for debugging
|
|
870
|
+
- See [system-monitoring.md](system-monitoring.md) for monitoring setup
|
|
871
|
+
- See [networking-fundamentals.md](networking-fundamentals.md) for network tuning
|