nvmlSensorBase.h 3.92 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
//================================================================================
// Name        : nvmlSensorBase.h
// Author      : Weronika Filinger, EPCC @ The University of Edinburgh
// Contact     :
// Copyright   : 
// Description : Sensor base class for nvml plugin.
//================================================================================

//================================================================================
// This file is part of DCDB (DataCenter DataBase)
// Copyright (C) 2019 Leibniz Supercomputing Centre
//
// 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.
//================================================================================

/**
 * @defgroup nvml nvml plugin
 * @ingroup  pusherplugins
 *
32
 * Collect data from the nvml interface.e
33 34 35 36 37 38 39
 */

#ifndef NVML_NVMLSENSORBASE_H_
#define NVML_NVMLSENSORBASE_H_

#include "sensorbase.h"

40 41 42
enum GPU_FEATURE {
	GPU_ENERGY              = 0,
	GPU_POWER               = 1,
Weronika's avatar
Weronika committed
43
	GPU_TEMP		= 2,
44
	GPU_FAN			= 3,
45 46 47
	GPU_MEM_USED		= 4,
	GPU_MEM_TOT		= 5,
	GPU_MEM_FREE		= 6,
48 49 50
	GPU_CLK_GP              = 7,
	GPU_CLK_SM		= 8,
	GPU_CLK_MEM		= 9,
51 52
	GPU_UTL_MEM             = 10,
	GPU_UTL_GPU             = 11,
53
	GPU_ECC_ERR		= 13,
54 55
	GPU_PCIE_THRU           = 14,

56
};
57 58

/**
59 60
 * @brief 
 *
61 62 63 64
 *
 * @ingroup nvml
 */
class nvmlSensorBase : public SensorBase {
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
	public:
		nvmlSensorBase(const std::string& name) :
			SensorBase(name), _featureType(static_cast<GPU_FEATURE>(999)) {
			}

		nvmlSensorBase(const nvmlSensorBase &other)
			: SensorBase(other),
			_featureType(other._featureType) {}


		virtual ~nvmlSensorBase() {}

		int getFeatureType() const {
			return _featureType;
		}

		void setFeatureType(int featureType){
			_featureType = static_cast<GPU_FEATURE>(featureType);

		} 


		nvmlSensorBase& operator=(const nvmlSensorBase& other) {
			SensorBase::operator=(other);
			_featureType = other._featureType;

			return *this;
		}

		/*
		 * TODO
		 * Getters and Setters for plugin specific attributes
		 */




		void printConfig(LOG_LEVEL ll, LOGGER& lg, unsigned leadingSpaces=16) {
			/*
			 * TODO
			 * Log attributes here for debug reasons
			 */

			std::string leading(leadingSpaces, ' ');
			std::string feature("unknown");
			switch (_featureType) {
				case GPU_ENERGY:
					feature = "GPU_ENERGY";
					break;
				case GPU_POWER:
					feature = "GPU_POWER";
					break;
Weronika's avatar
Weronika committed
117 118 119
				case GPU_TEMP:
					feature = "GPU_TEMP";
					break;
120 121 122
				case GPU_FAN:
					feature = "GPU_FAN";
					break;
123 124 125
				case GPU_MEM_USED:
					feature = "GPU_MEM_USED";
					break;
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
				case GPU_MEM_TOT:
					feature = "GPU_MEM_TOT";
					break;
				case GPU_MEM_FREE:
					feature = "GPU_MEM_FREE";
					break;
				case GPU_CLK_GP:
					feature = "GPU_CLK_GP";
					break;
				case GPU_CLK_SM:
					feature = "GPU_CLK_SM";
					break;
				case GPU_CLK_MEM:
					feature = "GPU_CLK_MEM";
					break;
				case GPU_UTL_MEM:
					feature = "GPU_UTL_MEM";
					break;
				case GPU_UTL_GPU:
					feature = "GPU_UTL_GPU";
					break;
147 148 149 150 151 152
				case GPU_ECC_ERR:
					feature = "GPU_ECC_ERR";
					break;
				case GPU_PCIE_THRU:
					feature = "GPU_PCIE_THRU";
					break;
153 154 155 156 157 158 159 160 161 162
			}  
			LOG_VAR(ll) << leading << "    Feature type:  " << feature;    
		}

	protected:
		GPU_FEATURE _featureType;
		/*
		 * TODO
		 * Add plugin specific attributes here
		 */
163 164 165 166

};

#endif /* NVML_NVMLSENSORBASE_H_ */