Skip to content

Commit

Permalink
Rearranged README sections, formatting, wording.
Browse files Browse the repository at this point in the history
- Normalized whitespace in rdt-discovery.
  • Loading branch information
ConnorDoyle committed Aug 30, 2016
1 parent d96f50e commit 873c3cf
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 128 deletions.
167 changes: 104 additions & 63 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,87 +1,128 @@
#CPU Feature Discovery for Kubernetes
This software enables Intel Architecture (IA) feature discovery for Kubernetes. It detects the CPU features, such as Intel [Resource Director Technology][intel-rdt] (RDT), available in each node of the Kubernetes cluster and labels them appropriately.
# CPU Feature Discovery for Kubernetes

- [Getting Started](#getting-started)
* [System Requirements](#system-requirements)
* [Installation](#installation)
* [Usage](#usage)
- [Documentation](#documentation)
- [License](#license)
- [Overview](#overview)
- [Getting Started](#getting-started)
* [System Requirements](#system-requirements)
* [Usage](#usage)
- [Building from source](#building-from-source)
- [License](#license)

## 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][intel-rdt] 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 falue `"false"` for features that are not
present._

```
"node.alpha.intel.com/v0.1.0/cpu/<feature-name>": "true"
```

##Getting Started
### System Requirements

At a minimum, you will need:
1. [Docker] [docker-down] (only required to build and push docker images)
2. [GCC] [gcc-down] (only required to build software to detect Intel RDT feature set)
3. Linux (x86_64)
4. [kubectl] [kubectl-setup] (properly setup and configured to work with a Kubernetes cluster)

###Installation
####Downloading the Source Code
```
git clone https://github.com/intelsdi-x/dbi-iafeature-discovery <repo-name>
```
1. Linux (x86_64)
1. [kubectl] [kubectl-setup] (properly set up and configured to work with your Kubernetes cluster)
1. [GCC] [gcc-down] (only required to build software to detect Intel RDT feature set)
1. [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.

####Building from Source
The build steps described below are optional. The default docker image in Docker hub at `intelsdi/nodelabels` can be used to decorate the Kubernetes node with IA 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 <rep-name>/rdt-discovery
make
./label-nodes.sh
```

Build the Docker Image (Optional):
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.

```
cd <repo-name>
docker build -t <user-name>/<image-name> .
git clone https://github.com/intelsdi-x/dbi-iafeature-discovery
```

Push the Docker Image (Optional)
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):**

```
docker push
cd <project-root>/rdt-discovery
make
```

Change the Job Spec to Use the Appropriate Image (Optional):
Change line #40 in `featurelabeling-job.json.template` to the appropriate image name in the `<user-name>/<image-name>` format used for building the image above or use the default `intelsdi/nodelabels` image.
**Build the Docker image (optional):**

###Usage
Deploying Kubernetes Job for Node Feature Labeling:
```
./label-nodes.sh
cd <project-root>
docker build -t <user-name>/<image-name> .
```
The above command will label each node in the cluster with the features from cpuid. The labeling format used is

Push the Docker Image (optional)

```
<key, val> = <"node.alpha.intel.com/<feature-name>", "true">
docker push
```
Note that only features that are available in that node are labelled.

##Documentation
This software determines the Intel Architecture (IA) features associated with a processor using `cpuid`. The following set of features are discovered and labelled by this software.

###Intel Resource Director Technology (RDT) Features
| Label | Feature(s) Represented |
| :------------: | :---------------------------------------------------------------------------------: |
| 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)
| Label | Feature(s) Represented |
| :------------: | :---------------------------------------------------------------------------------: |
| 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) |

##License
This is an Open Source software released under the Apache 2.0 [License](LICENSE).

**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
`[featurelabeling-job.json.template](featurelabeling-job.json.template)` to
the new location (`<user>/<image-name>`).

## License

This is open source software released under the [Apache 2.0 License](LICENSE).

<!-- Links -->
[intel-rdt]: http://www.intel.com/content/www/us/en/architecture-and-technology/resource-director-technology.html
[docker-down]: https://docs.docker.com/engine/installation/
[golang-down]: https://golang.org/dl/
Expand Down
4 changes: 2 additions & 2 deletions rdt-discovery/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ LDLIBS=-lpqos
CFLAGS=-I$(INCDIR)


default:
default:
$(MAKE) all
all:
$(CC) $(CFLAGS) -o mon-discovery monitoring-discovery.c $(LDFLAGS) $(LDLIBS)
$(CC) $(CFLAGS) -o l3-alloc-discovery l3-allocation-discovery.c $(LDFLAGS) $(LDLIBS)
$(CC) $(CFLAGS) -o l2-alloc-discovery l2-allocation-discovery.c $(LDFLAGS) $(LDLIBS)
$(CC) $(CFLAGS) -o l2-alloc-discovery l2-allocation-discovery.c $(LDFLAGS) $(LDLIBS)
40 changes: 20 additions & 20 deletions rdt-discovery/l2-allocation-discovery.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ limitations under the License.
#include "machine.h"

int main(int argc, char *argv[]) {
int ret, det=1;
struct cpuid_out res;

//Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 15))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0x10, 0x0, &res);
if (!(res.ebx & (1 << 2))) {
det = 0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");
int ret, det=1;
struct cpuid_out res;

return 0;
// Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 15))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0x10, 0x0, &res);
if (!(res.ebx & (1 << 2))) {
det = 0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");

return 0;
}
46 changes: 23 additions & 23 deletions rdt-discovery/l3-allocation-discovery.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,28 @@ limitations under the License.
#include "machine.h"

int main(int argc, char *argv[]) {
int ret, det=1;
struct cpuid_out res;

//Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
//TODO(balajismaniam): Implement L3 CAT detection using brand string and MSR probing if
//not detected using cpuid

lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 15))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0x10, 0x0, &res);
if (!(res.ebx & (1 << 1))) {
det = 0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");
int ret, det=1;
struct cpuid_out res;

return 0;
// Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
// TODO(balajismaniam): Implement L3 CAT detection using brand string and MSR probing if
// not detected using cpuid

lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 15))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0x10, 0x0, &res);
if (!(res.ebx & (1 << 1))) {
det = 0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");

return 0;
}
40 changes: 20 additions & 20 deletions rdt-discovery/monitoring-discovery.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ limitations under the License.
#include "machine.h"

int main(int argc, char *argv[]) {
int ret, det=1;
struct cpuid_out res;

//Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 12))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0xf, 0x0, &res);
if (!(res.edx & (1 << 1))) {
det=0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");
int ret, det=1;
struct cpuid_out res;

return 0;
// Logic below from https://github.com/01org/intel-cmt-cat/blob/master/lib/host_cap.c
lcpuid(0x7, 0x0, &res);
if (!(res.ebx & (1 << 12))) {
det = 0;
printf("NOT DETECTED");
}
else {
lcpuid(0xf, 0x0, &res);
if (!(res.edx & (1 << 1))) {
det=0;
printf("NOT DETECTED");
}
}

if (det)
printf("DETECTED");

return 0;
}

0 comments on commit 873c3cf

Please sign in to comment.