Skip to content

Commit

Permalink
Add an amdgpu pmda
Browse files Browse the repository at this point in the history
This pmda retrieves data using the libdrm and libdrm-amdgpu libraries.
It only retrieves general information, no process specific data.

Data retrieved includes memory usage, memory speed, GPU speed,
temperature, etc ...

Old Radeon (Pre GCN 1.1) aren't supported.
  • Loading branch information
fberat committed May 3, 2024
1 parent cf65673 commit ef7ae4d
Show file tree
Hide file tree
Showing 14 changed files with 1,314 additions and 1 deletion.
156 changes: 156 additions & 0 deletions man/man1/pmdaamdgpu.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
'\"macro stdmacro
.\"
.\" Copyright (c) 2024 Red Hat.
.\"
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of the GNU General Public License as published by the
.\" Free Software Foundation; either version 2 of the License, or (at your
.\" option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.\" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
.\" for more details.
.\"
.TH PMDAAMDGPU 1 "PCP" "Performance Co-Pilot"
.SH NAME
\f3pmdaamdgpu\f1 \- amdgpu gpu metrics domain agent (PMDA)
.SH SYNOPSIS
\f3$PCP_PMDAS_DIR/amdgpu/pmdaamdgpu\f1
[\f3\-d\f1 \f2domain\f1]
[\f3\-l\f1 \f2logfile\f1]
[\f3\-t\f1 \f2interval\f1]
.SH DESCRIPTION
.B pmdaamdgpu
is a Performance Metrics Domain Agent (PMDA) which extracts
performance metrics describing the metrics available on AMDGPU
GPU cards via the DRM library.
.PP
The
.B amdgpu
PMDA exports metrics that measure gpu activity, memory utilization,
temperature, etc on GCN 1.2+ AMD GPUs.
.PP
A brief description of the
.B pmdaamdgpu
command line options follows:
.TP 5
.B \-d
It is absolutely crucial that the performance metrics
.I domain
number specified here is unique and consistent.
That is,
.I domain
should be different for every PMDA on the one host, and the same
.I domain
number should be used for the same PMDA on all hosts.
.TP
.B \-l
Location of the log file. By default, a log file named
.I amdgpu.log
is written in the current directory of
.BR pmcd (1)
when
.B pmdaamdgpu
is started, i.e.
.BR $PCP_LOG_DIR/pmcd .
If the log file cannot
be created or is not writable, output is written to the standard error instead.
.TP
.B \-t
Enables and sets a sampling
.I interval
for automatic refreshing of metric values.
The functionality is disabled by default, however this option allows
a time interval to be specified on which all values are sampled \- this
has the effect of constantly updating the accumulating metrics, with the
goal of assisting client tools such as
.BR pcp-atop (1)
and
.BR pmlogger (1)
to observe sub-sample time changes in GPU and process state.
Typically these tools have longer sampling intervals, and can thus 'miss'
activity happening during their sampling interval.
.SH INSTALLATION
The
.B amdgpu
PMDA is not installed and available by default.
If you want to undo the installation, do the following as root:
.PP
.ft CR
.nf
.in +0.5i
# cd $PCP_PMDAS_DIR/amdgpu
# ./Remove
.in
.fi
.ft 1
.PP
If you want to establish access to the names, help text and values for the amdgpu
performance metrics once more, after removal, do the following as root:
.PP
.ft CR
.nf
.in +0.5i
# cd $PCP_PMDAS_DIR/amdgpu
# ./Install
.in
.fi
.ft 1
.PP
.B pmdaamdgpu
is launched by
.BR pmcd (1)
and should never be executed directly.
The Install and Remove scripts notify
.BR pmcd (1)
when the agent is installed or removed.
.SH FILES
.PD 0
.TP 10
.B $PCP_PMCDCONF_PATH
command line options used to launch
.B pmdaamdgpu
.TP 10
.B $PCP_PMDAS_DIR/amdgpu/help
default help text file for the amdgpu metrics
.TP 10
.B $PCP_PMDAS_DIR/amdgpu/Install
installation script for the
.B pmdaamdgpu
agent
.TP 10
.B $PCP_PMDAS_DIR/amdgpu/Remove
undo installation script for the
.B pmdaamdgpu
agent
.TP 10
.B $PCP_LOG_DIR/pmcd/amdgpu.log
default log file for error messages and other information from
.B pmdaamdgpu
.PD
.SH "PCP ENVIRONMENT"
Environment variables with the prefix
.B PCP_
are used to configure the file and directory names
used by PCP.
On each installation, the file
.I /etc/pcp.conf
contains the local values for these variables.
The
.B $PCP_CONF
variable may be used to specify an alternative
configuration file,
as described in
.BR pcp.conf (5).
.SH SEE ALSO
.BR PCPIntro (1),
.BR pcp-atop (1),
.BR pmcd (1),
.BR pmlogger (1),
.BR pcp.conf (5)
and
.BR pcp.env (5).

.\" control lines for scripts/man-spell
.\" +ok+ DRM gpu amdgpu GCN
2 changes: 1 addition & 1 deletion src/pmdas/GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ CPMDAS = root pmcd \
gfs2 jbd2 cifs nvidia resctrl perfevent \
dm pipe openbsd docker smart podman statsd \
hacluster linux_sockets denki bpf overhead \
farm
farm amdgpu

PLPMDAS = bonding netfilter zimbra postgresql \
dbping memcache mysql oracle kvm \
Expand Down
7 changes: 7 additions & 0 deletions src/pmdas/amdgpu/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
help.dir
help.pag
domain.h
pmdaamd
pmda_amd.so
pmda_amd.dll
pmda_amd.dylib
51 changes: 51 additions & 0 deletions src/pmdas/amdgpu/GNUmakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#
# Copyright (c) 2014-2015,2020 Red Hat.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#

TOPDIR = ../../..
include $(TOPDIR)/src/include/builddefs

IAM = amdgpu
DOMAIN = AMDGPU

CMDTARGET = pmdaamd$(EXECSUFFIX)
LIBTARGET = pmda_amd.$(DSOSUFFIX)
CFILES = localdrm.c amdgpu.c
HFILES = localdrm.h
DFILES = README
LLDLIBS = $(PCP_PMDALIB) $(LIB_FOR_DLOPEN) -ldrm -ldrm_amdgpu
LCFLAGS += -DDSOSUFFIX=\"$(DSOSUFFIX)\" -I/usr/include/drm
LDIRT = domain.h *.log *.dir *.pag so_locations

PMDAADMDIR = $(PCP_PMDASADM_DIR)/$(IAM)
PMDATMPDIR = $(PCP_PMDAS_DIR)/$(IAM)

default: $(LIBTARGET) $(CMDTARGET)

include $(BUILDRULES)

install: default
$(INSTALL) -m 755 -d $(PMDAADMDIR)
$(INSTALL) -m 755 -d $(PMDATMPDIR)
$(INSTALL) -m 755 -t $(PMDATMPDIR) Install Remove $(PMDAADMDIR)
$(INSTALL) -m 755 -t $(PMDATMPDIR) $(LIBTARGET) $(CMDTARGET) $(PMDAADMDIR)
$(INSTALL) -m 644 -t $(PMDATMPDIR) $(DFILES) root help pmns domain.h $(PMDAADMDIR)

$(OBJECTS): domain.h

domain.h: ../../pmns/stdpmid
$(DOMAIN_MAKERULE)

default_pcp: default

install_pcp: install
26 changes: 26 additions & 0 deletions src/pmdas/amdgpu/Install
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#! /bin/sh
#
# Copyright (c) 2024 Red Hat.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# Install the trivial PMDA and/or PMNS
#

. $PCP_DIR/etc/pcp.env
. $PCP_SHARE_DIR/lib/pmdaproc.sh

iam=amdgpu
dso_opt=true

pmdaSetup
pmdaInstall
exit
6 changes: 6 additions & 0 deletions src/pmdas/amdgpu/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Readme
AMD GPU PMDA
===========

The AMD GPU PMDA is a PCP module for gathering metrics on the performance of
AMD graphics cards. It uses the libdrm to query the states of attached cards.
38 changes: 38 additions & 0 deletions src/pmdas/amdgpu/Remove
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#! /bin/sh
#
# Copyright (c) 2024 Red Hat.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Remove the amd PMDA
#

# source the PCP configuration environment variables
. $PCP_DIR/etc/pcp.env

# Get the common procedures and variable assignments
#
. $PCP_SHARE_DIR/lib/pmdaproc.sh

# The name of the PMDA
#
iam=amdgpu

# Do it
#
pmdaSetup
pmdaRemove

exit
Loading

0 comments on commit ef7ae4d

Please sign in to comment.