summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorMadhavan Srinivasan <maddy@linux.vnet.ibm.com>2017-06-22 17:45:15 +0530
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-06-27 15:31:52 +1000
commitc1cf0bc90c4185db4962a05980a3a0e3d639b58a (patch)
tree0b0079c105b53a5e9cca864b711d4bb1950e49b2 /doc
parent6678e057ab5cfc3b4b6c63546e39d82dfb087df7 (diff)
downloadblackbird-skiboot-c1cf0bc90c4185db4962a05980a3a0e3d639b58a.tar.gz
blackbird-skiboot-c1cf0bc90c4185db4962a05980a3a0e3d639b58a.zip
skiboot/doc: Add doc/imc.rst documentation
Add imc.rst documentation to detail the In-Memory Collection Counters infrastructure and interface Acked-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'doc')
-rw-r--r--doc/imc.rst54
-rw-r--r--doc/index.rst1
2 files changed, 55 insertions, 0 deletions
diff --git a/doc/imc.rst b/doc/imc.rst
new file mode 100644
index 00000000..3324aa36
--- /dev/null
+++ b/doc/imc.rst
@@ -0,0 +1,54 @@
+.. _imc:
+
+OPAL/Skiboot In-Memory Collection (IMC) interface Documentation
+===============================================================
+
+Overview:
+---------
+
+In-Memory-Collection (IMC) is performance monitoring infrastrcuture
+for counters that (once started) can be read from memory at any time by
+an operating system. Such counters include those for the Nest and Core
+units, enabling continuous monitoring of resource utilisation on the chip.
+
+The API is agnostic as to how these counters are implemented. For the
+Nest units, they're implemented by having microcode in an on-chip
+microcontroller and for core units, they are implemented as part of core logic
+to gather data and periodically write it to the memory locations.
+
+Nest (On-Chip, Off-Core) unit:
+------------------------------
+
+Nest units have dedicated hardware counters which can be programmed
+to monitor various chip resources such as memory bandwidth,
+xlink bandwidth, alink bandwidth, PCI, NVlink and so on. These Nest
+unit PMU counters can be programmed in-band via scom. But alternatively,
+programming of these counters and periodically moving the counter data
+to memory are offloaded to a hardware engine part of OCC (On-Chip Controller).
+
+Microcode, starts to run at system boot in OCC complex, initialize these
+Nest unit PMUs and periodically accumulate the nest pmu counter values
+to memory. List of supported events by the microcode is packages as a DTS
+and stored in IMA_CATALOG partition.
+
+Core unit:
+----------
+
+Core IMC PMU counters are handled in the core-imc unit. Each core has
+4 Core Performance Monitoring Counters (CPMCs) which are used by Core-IMC logic.
+Two of these are dedicated to count core cycles and instructions.
+The 2 remaining CPMCs have to multiplex 128 events each.
+
+Core IMC hardware does not support interrupts and it peridocially (based on
+sampling duration) fetches the counter data and accumulate to main memory.
+Memory to accumulate counter data are refered from "PDBAR" (per-core scom)
+and "LDBAR" per-thread spr.
+
+OPAL APIs:
+----------
+
+The OPAL API is simple: a call to init a counter type, and calls to
+start and stop collection. The memory locations are described in the
+device tree.
+
+See :ref:`opal-imc-counters` and :ref:`device-tree/imc`
diff --git a/doc/index.rst b/doc/index.rst
index 5464ae25..d350acc3 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -34,6 +34,7 @@ Developer Guide and Internals
pci-slot
xscom-node-bindings
xive
+ imc
OPAL ABI
OpenPOWER on IntegriCloud