5.4 KiB
CPU Feature Discovery for Kubernetes
Overview
This software enables Intel Architecture (IA) feature discovery for Kubernetes. It detects CPU features available on each node in a Kubernetes cluster, such as Intel Resource Director Technology and advertises those features using node labels.
Intel Resource Director Technology (RDT) Features
Feature name | Description |
---|---|
RDTMON | Intel Cache Monitoring Technology (CMT) and Intel Memory Bandwidth Monitoring (MBM) |
RDTL3CA | Intel L3 Cache Allocation Technology |
RDTL2CA | Intel L2 Cache Allocation Technology |
Other Features (Partial List)
Feature name | Description |
---|---|
ADX | Multi-Precision Add-Carry Instruction Extensions (ADX) |
AESNI | Advanced Encryption Standard (AES) New Instructions (AES-NI) |
AVX | Advanced Vector Extensions (AVX) |
AVX2 | Advanced Vector Extensions 2 (AVX2) |
BMI1 | Bit Manipulation Instruction Set 1 (BMI) |
BMI2 | Bit Manipulation Instruction Set 2 (BMI2) |
SSE4.1 | Streaming SIMD Extensions 4.1 (SSE4.1) |
SSE4.2 | Streaming SIMD Extensions 4.2 (SSE4.2) |
SGX | Software Guard Extensions (SGX) |
The published node labels encode a few pieces of information:
- A "namespace" to denote vendor-specific information
(
node.alpha.intel.com
). - The version of this discovery code (e.g.
v0.1.0
) that wrote the label. - The relevant hardware component each label describes (e.g.
cpu
). - The name of the discovered feature as it appears in the underlying
source, mostly
cpuid
(e.g.AESNI
).
Note: only features that are available on a given node are labeled, so the
only label value published is the string "true"
. This feature discovery code
will not add a label with the value "false"
for features that are not
present.
"node.alpha.intel.com/v0.1.0/cpu/<feature-name>": "true"
System Requirements
At a minimum, you will need:
- Linux (x86_64)
- [kubectl] kubectl-setup (properly set up and configured to work with your Kubernetes cluster)
- [GCC] gcc-down (only required to build software to detect Intel RDT feature set)
- [Docker] docker-down (only required to build and push docker images)
Usage
Feature discovery is done as a one-shot job. There is an example script in this repo that demonstrates how to deploy the job to unlabeled nodes.
./label-nodes.sh
The discovery script will launch a job on each each unlabeled node in the
cluster. When the job runs, it contacts the Kubernetes API server to add
labels to the node to advertise hardware features (initially, from cpuid
and
RDT).
Building from source
Download the source code.
git clone https://github.com/intelsdi-x/dbi-iafeature-discovery
The build steps described below are optional. The default docker image in
Dockerhub at intelsdi/nodelabels
can be used to decorate the Kubernetes node
with CPU features. Skip to usage instructions if you do not need to build your
own docker image.
Build the Intel RDT Detection Software Using make
(Optional):
cd <project-root>/rdt-discovery
make
Build the Docker image (optional):
cd <project-root>
docker build -t <user-name>/<image-name> .
Push the Docker Image (optional)
docker push
Change the job spec to use your new image (optional):
To use your published image from the step above instead of the
intelsdi/nodelabels
image, edit line 40 in the file
[dbi-iafeature-discovery-job.json.template](dbi-iafeature-discoverz-job.json.template)
to
the new location (<user>/<image-name>
).
Targeting Nodes with Specific Features
Nodes with specific features can be targeted using the nodeSelector
field. The following example shows
how to target the Intel RDT L3 cache allocation (RDTL3CA) feature.
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"labels": {
"env": "test"
},
"name": "golang-test"
},
"spec": {
"containers": [
{
"image": "golang",
"name": "go1",
}
],
"nodeSelector": {
""node.alpha.intel.com/v0.1.0-cpu-RDTL3CA": "true"
}
}
}
For more details on targeting nodes, see node selection.
License
This is open source software released under the Apache 2.0 License.