ajust parameters
This commit is contained in:
		
							parent
							
								
									913cea1603
								
							
						
					
					
						commit
						a6e6b758e4
					
				
					 1 changed files with 19 additions and 11 deletions
				
			
		
							
								
								
									
										28
									
								
								main.cpp
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								main.cpp
									
										
									
									
									
								
							| 
						 | 
					@ -83,7 +83,7 @@ double gpu_fan_zone(const std::vector<Sensor>& sensors)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return fan_curve(max_temp, 0.2, 1.0, 40, 75);
 | 
						return fan_curve(max_temp, 0.20, 1.0, 45, 75);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double system_fan_zone(const std::vector<Sensor>& sensors)
 | 
					double system_fan_zone(const std::vector<Sensor>& sensors)
 | 
				
			||||||
| 
						 | 
					@ -100,8 +100,8 @@ double system_fan_zone(const std::vector<Sensor>& sensors)
 | 
				
			||||||
			system = sensor;
 | 
								system = sensor;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	double fanSystem = fan_curve(system.reading, 0.2, 1.0, 35, 45);
 | 
						double fanSystem = fan_curve(system.reading, 0.33, 1.0, 40, 65);
 | 
				
			||||||
	double fanCpu = fan_curve(cpu.reading, 0.2, 1.0, 40, 70);
 | 
						double fanCpu = fan_curve(cpu.reading, 0.33, 1.0, 40, 70);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return std::max(fanSystem, fanCpu);
 | 
						return std::max(fanSystem, fanCpu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -116,13 +116,19 @@ std::vector<double> get_fan_zones(const std::vector<Sensor>& sensors)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ipmi_ctx_t ipmi_open()
 | 
					ipmi_ctx_t ipmi_open()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ipmi_ctx_t ctx = nullptr;
 | 
						ipmi_ctx_t ctx = ipmi_ctx_create();
 | 
				
			||||||
 | 
						if(!ctx)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							std::cerr<<"Could not allocae raw context\n";
 | 
				
			||||||
 | 
							return nullptr;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ipmi_driver_type_t driver = IPMI_DEVICE_OPENIPMI;
 | 
						ipmi_driver_type_t driver = IPMI_DEVICE_OPENIPMI;
 | 
				
			||||||
	int ret = ipmi_ctx_find_inband(ctx, &driver, false, 0, 0, nullptr, 0, 0);
 | 
						int ret = ipmi_ctx_find_inband(ctx, &driver, false, 0, 0, nullptr, 0, 0);
 | 
				
			||||||
	if(ret < 0)
 | 
						if(ret < 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		std::cerr<<"Could not create raw context "<<ipmi_ctx_errormsg(ctx)<<'\n';
 | 
							std::cerr<<"Could not create raw context "<<ipmi_ctx_errormsg(ctx)<<'\n';
 | 
				
			||||||
 | 
							ipmi_ctx_destroy(ctx);
 | 
				
			||||||
		return nullptr;
 | 
							return nullptr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return ctx;
 | 
						return ctx;
 | 
				
			||||||
| 
						 | 
					@ -130,7 +136,9 @@ ipmi_ctx_t ipmi_open()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ipmi_set_fan_group(ipmi_ctx_t raw_ctx, uint8_t group, double speed)
 | 
					bool ipmi_set_fan_group(ipmi_ctx_t raw_ctx, uint8_t group, double speed)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char converted_speed = std::min(std::max(static_cast<char>(64), static_cast<char>(speed*64)), static_cast<char>(0));
 | 
						char converted_speed = std::max(std::min(static_cast<char>(100), static_cast<char>(speed*100)), static_cast<char>(0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						std::cout<<"setting fan group "<<static_cast<int>(group)<<" to "<<speed*100<<"% ("<<static_cast<int>(converted_speed)<<")\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char command[] = {0x70, 0x66, 0x01, static_cast<char>(group), converted_speed};
 | 
						char command[] = {0x70, 0x66, 0x01, static_cast<char>(group), converted_speed};
 | 
				
			||||||
	char bytesrx[IPMI_RAW_MAX_ARGS] = {0};
 | 
						char bytesrx[IPMI_RAW_MAX_ARGS] = {0};
 | 
				
			||||||
| 
						 | 
					@ -169,15 +177,15 @@ int main (int argc, char **argv)
 | 
				
			||||||
	if(!raw_ctx)
 | 
						if(!raw_ctx)
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while(running)
 | 
						while(running)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		std::vector<Sensor> sensors = gather_sensors(ipmi_sensors, monitoring_ctx, lm_chips);
 | 
							std::vector<Sensor> sensors = gather_sensors(ipmi_sensors, monitoring_ctx, lm_chips);
 | 
				
			||||||
 | 
							for(const Sensor& sensor : sensors)
 | 
				
			||||||
 | 
								std::cout<<"Sensor "<<sensor.chip<<':'<<sensor.name<<"\t= "<<sensor.reading<<'\n';
 | 
				
			||||||
		std::vector<double> fanzones = get_fan_zones(sensors);
 | 
							std::vector<double> fanzones = get_fan_zones(sensors);
 | 
				
			||||||
		for(const double fanzone : fanzones)
 | 
							ipmi_set_fan_group(raw_ctx, 0, fanzones[0]);
 | 
				
			||||||
			std::cout<<fanzone<<'\n';
 | 
							ipmi_set_fan_group(raw_ctx, 1, fanzones[1]);
 | 
				
			||||||
		sleep(1);
 | 
							sleep(10);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ipmi_ctx_close(raw_ctx);
 | 
						ipmi_ctx_close(raw_ctx);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue