Skip to content

Commit

Permalink
platform validation framework feature commit, includes:
Browse files Browse the repository at this point in the history
- platform validation automation workflow definition.
- platform validation test cases design and implementation.
- new independent RAPL energy collector and power calculator for Intel X86 platforms.
- enhancement directory document update.

Signed-off-by: Jie Ren <jie.ren@intel.com>
  • Loading branch information
jiere committed Sep 6, 2023
1 parent 7086295 commit ab9d4e5
Show file tree
Hide file tree
Showing 31 changed files with 3,328 additions and 192 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/integration_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ jobs:
env:
IMAGE_REPO: "localhost:5001"
IMAGE_TAG: "devel"
IMAGE_NAME: "kepler"
CTR_CMD: docker
IMAGE_OUTPUT_PATH: ${{env.OUTPUT_DIR}}${{env.FILE_NAME}}

Expand Down Expand Up @@ -66,11 +67,12 @@ jobs:
IMAGE_REPO: "localhost:5001"
IMAGE_TAG: "devel"
CTR_CMD: docker

- name: import Kepler image
run: make load-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "devel"
CTR_CMD: docker
INPUT_PATH: ${{env.FILE_NAME}}
Expand All @@ -88,6 +90,7 @@ jobs:
make image-prune
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "devel"
CTR_CMD: docker

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/integration_test_libbpf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ jobs:
env:
ATTACHER_TAG: libbpf
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "devel"
CTR_CMD: docker
IMAGE_OUTPUT_PATH: ${{env.OUTPUT_DIR}}${{env.FILE_NAME}}
Expand Down Expand Up @@ -72,6 +73,7 @@ jobs:
run: make load-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "devel"
CTR_CMD: docker
INPUT_PATH: ${{env.FILE_NAME}}
Expand All @@ -89,6 +91,7 @@ jobs:
make image-prune
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "devel"
CTR_CMD: docker

Expand Down
205 changes: 205 additions & 0 deletions .github/workflows/platform-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
name: Platform Validation

on:
workflow_dispatch:

env:
GO_VERSION: "1.18"
OUTPUT_DIR: "_output/"
KEPLER_FILE_NAME: "kepler.tar.gz"
VALIDATOR_FILE_NAME: "validator.tar.gz"
ARTIFACT_DIR: "/tmp/artifacts"

jobs:
build-artifacts:
runs-on: [self-hosted, linux, x64]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Quay
uses: docker/login-action@v1
with:
registry: quay.io/sustainable_computing_io
username: ${{ secrets.BOT_NAME }}
password: ${{ secrets.BOT_TOKEN }}

- name: Install Go
uses: actions/setup-go@v3
with:
go-version: ${{env.GO_VERSION}}

- name: Build and export Kepler image with test specific tag
run: |
make build_containerized
make save-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "platform-validation"
CTR_CMD: docker
IMAGE_OUTPUT_PATH: ${{env.OUTPUT_DIR}}${{env.KEPLER_FILE_NAME}}

- name: Save Kepler image as artifact
uses: actions/upload-artifact@v3
with:
name: kepler
path: ${{env.OUTPUT_DIR}}${{env.KEPLER_FILE_NAME}}
retention-days: 1

- name: Build and push kepler-validator to official group repo with latest tag
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64
push: true
tags: quay.io/sustainable_computing_io/kepler-validator:latest
labels: latest
file: build/Dockerfile.kepler-validator

- name: Build and export kepler-validator image with test specific tag
run: |
make build-validation-container
make save-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker
IMAGE_OUTPUT_PATH: ${{env.OUTPUT_DIR}}${{env.VALIDATOR_FILE_NAME}}

- name: Save kepler-validator test image as artifact
uses: actions/upload-artifact@v3
with:
name: validator
path: ${{env.OUTPUT_DIR}}${{env.VALIDATOR_FILE_NAME}}
retention-days: 1

platform_validation_test:
needs: [build-artifacts]
runs-on: [self-hosted, linux, x64]
strategy:
matrix:
cluster_provider: [kind]
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Download Kepler test image artifact
uses: actions/download-artifact@v3
with:
name: kepler

- name: Download kepler-validator test image artifact
uses: actions/download-artifact@v3
with:
name: validator

- name: Build manifest
run: make build-manifest OPTS="CI_DEPLOY PROMETHEUS_DEPLOY"
env:
CLUSTER_PROVIDER: ${{matrix.cluster_provider}}
IMAGE_REPO: "localhost:5001"
IMAGE_TAG: "platform-validation"
CTR_CMD: docker

- name: Import Kepler test image
run: make load-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "platform-validation"
CTR_CMD: docker
INPUT_PATH: ${{env.KEPLER_FILE_NAME}}

- name: Import kepler-validator test image
run: make load-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker
INPUT_PATH: ${{env.VALIDATOR_FILE_NAME}}

- name: Get Node component power before deploy kind cluster
run: |
make get-power
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker

- name: Use Kepler action to deploy cluster
uses: sustainable-computing-io/kepler-action@v0.0.1
with:
runningBranch: ${{matrix.cluster_provider}}
cluster_provider: ${{matrix.cluster_provider}}
local_dev_cluster_version: v0.0.3
prometheus_enable: true
grafana_enable: true

- name: Push Kepler test image to local registry
run: |
make push-image
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler"
IMAGE_TAG: "platform-validation"
CTR_CMD: docker

- name: Push kepler-validator test image to local registry
run: |
make push-image
make image-prune
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker

- name: Get Node component power before deploy kepler
run: |
make get-power
env:
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker

- name: Deploy Kepler on cluster
run: make cluster-deploy
env:
CLUSTER_PROVIDER: ${{matrix.cluster_provider}}
IMAGE_REPO: "localhost:5001"
IMAGE_TAG: "platform-validation"
CTR_CMD: docker

- name: Save artifacts
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: artifacts
path: ${{env.ARTIFACT_DIR}}
retention-days: 10

- name: Run platform validation test cases
run: make platform-validation
env:
CLUSTER_PROVIDER: ${{matrix.cluster_provider}}
IMAGE_REPO: "localhost:5001"
IMAGE_NAME: "kepler-validator"
IMAGE_TAG: "x86-rapl"
CTR_CMD: docker
kepler_address: localhost:9102
prometheus_address: localhost:9090

- name: Undeploy Kepler and cleanup the cluster
run: |
make cluster-clean
make cluster-down
env:
CLUSTER_PROVIDER: ${{matrix.cluster_provider}}
40 changes: 34 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ else
endif

# for testsuite
ENVTEST_ASSETS_DIR=./test-bin
export PATH := $(PATH):./test-bin
ENVTEST_ASSETS_DIR=$(SRC_ROOT)/test-bin
export PATH := $(PATH):$(SRC_ROOT)/test-bin

ifndef GOPATH
GOPATH := $(HOME)/go
Expand Down Expand Up @@ -186,7 +186,7 @@ build_containerized: genbpfassets tidy-vendor format

save-image:
@mkdir -p _output
$(CTR_CMD) save $(IMAGE_REPO)/kepler:$(IMAGE_TAG) | gzip > "${IMAGE_OUTPUT_PATH}"
$(CTR_CMD) save $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) | gzip > "${IMAGE_OUTPUT_PATH}"
.PHONY: save-image

load-image:
Expand All @@ -198,7 +198,7 @@ image-prune:
.PHONY: image-prune

push-image:
$(CTR_CMD) push $(CTR_CMD_PUSH_OPTIONS) $(IMAGE_REPO)/kepler:$(IMAGE_TAG)
$(CTR_CMD) push $(CTR_CMD_PUSH_OPTIONS) $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG)
.PHONY: push-image

clean-cross-build:
Expand All @@ -214,7 +214,7 @@ build: clean_build_local _build_local copy_build_local
_build_local: tidy-vendor format
@echo TAGS=$(GO_BUILD_TAGS)
@mkdir -p "$(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)"
+@$(GOENV) go build -v -tags ${GO_BUILD_TAGS} -o $(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)/kepler -ldflags $(LDFLAGS) ./cmd/exporter.go
+@$(GOENV) go build -v -tags ${GO_BUILD_TAGS} -o $(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)/kepler -ldflags $(LDFLAGS) ./cmd/exporter/exporter.go

container_build:
$(CTR_CMD) run --rm \
Expand Down Expand Up @@ -367,8 +367,36 @@ cluster-down:
.PHONY: cluster-down

e2e:
./hack/verify.sh test ${ATTACHER_TAG}
./hack/verify.sh integration ${ATTACHER_TAG}
.PHONY: e2e

### platform-validation ###

VALIDATION_DOCKERFILE := $(SRC_ROOT)/build/Dockerfile.kepler-validator

build-validator: tidy-vendor format
@echo TAGS=$(GO_BUILD_TAGS)
@mkdir -p "$(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)"
+@$(GOENV) go build -v -tags ${GO_BUILD_TAGS} -o $(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)/validator -ldflags $(LDFLAGS) ./cmd/validator/validator.go
cp $(CROSS_BUILD_BINDIR)/$(GOOS)_$(GOARCH)/validator $(CROSS_BUILD_BINDIR)
.PHONY: build-validator

build-validation-container:
$(CTR_CMD) build -t $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) \
-f $(VALIDATION_DOCKERFILE) .
.PHONY: build-validation-container

get-power:
$(CTR_CMD) run -i --rm -v $(SRC_ROOT)/e2e/platform-validation:/output $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) /usr/bin/validator
.PHONY: get-power

get-env:
$(CTR_CMD) run -i --rm -v $(SRC_ROOT)/e2e/platform-validation:/output $(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_TAG) /usr/bin/validator -gen-env=true
.PHONY: get-env

platform-validation: ginkgo-set get-env
./hack/verify.sh platform ${ATTACHER_TAG}
.PHONY: platform-validation

check: tidy-vendor set_govulncheck govulncheck format golint test
.PHONY: check
23 changes: 23 additions & 0 deletions build/Dockerfile.kepler-validator
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM quay.io/sustainable_computing_io/kepler_builder:ubi-9-libbpf-1.2.0-go1.18 as builder

ENV GOPATH=/opt/app-root GO111MODULE=on GOROOT=/usr/local/go

ENV PATH=$GOPATH/bin:$GOROOT/bin:$PATH

WORKDIR $GOPATH/src/github.com/sustainable-computing-io/kepler

COPY . .

# Build validator
RUN make build-validator
RUN ls ./_output/bin

# build image
FROM quay.io/sustainable_computing_io/kepler_base:ubi-9-libbpf-1.2.0

COPY --from=builder /opt/app-root/src/github.com/sustainable-computing-io/kepler/_output/bin/validator /usr/bin/validator

RUN chmod +x /usr/bin/validator

RUN mkdir -p /var/lib/kepler/data
COPY --from=builder /opt/app-root/src/github.com/sustainable-computing-io/kepler/data/normalized_cpu_arch.csv /var/lib/kepler/data/normalized_cpu_arch.csv
File renamed without changes.
Loading

0 comments on commit ab9d4e5

Please sign in to comment.