/////////////////////////////////////////////////////////////////////////////// // /* Date: Thu, 20 Apr 2006 10:57:52 -0500 From: Joseph Syu To: Rick Snider Cc: scs-farm@fnal.gov Subject: Re: CPU capacity in CDF farms Hi Rick CDF Farm Phase I farm: - 18 dual-PIII 1.2GHz, or 1266 fermi cycles per processor - 27 dual-Athlon MP2000 (1.67GHz), or 1674 fermi cycles per processor thus, totally 135972 fermi cycles CDF Farm Phase II: - 63 dual-Xeon 2.66GHz in FCC, or 1915 fermi cycles per processor - 40 dual-Xeon 3.00 GHz in GCC, or 2210 fermi cycles per processor - 40 dual-Xeon 3.06 GHz in GCC, or 2233 fermi cycles per processor thus, totally 596730 fermi cycles Translation to P4 equivalent clock speed is a bit tricky then, in average Xeon/P4 1GHz was about 730 fermi cycles, so in summary: - CDF farm phase I currently has 186 GHz Xeon/P4 equivalents - CDF farm phase II currently has 817 GHz Xeon/P4 equivalents */ /////////////////////////////////////////////////////////////////////////////// #include "TFile.h" #include "TTree.h" #include "TBranch.h" #include "CompModel/TProdFarmModel.hh" #include "CompModel/Tevatron.hh" ClassImp(TProdFarmModel) // namespace { int kYear [] = { 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, -1}; float kReprFrac [] = { 1.0, 1.0, 0.5, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3}; // CPU units (duals) aquired int kYearAquired[] = { 2002, 2003, 2004, 2005, 2006, 2006, 2007, 2008, 2009, -1} ; int kNAquired [] = { 30, 4, 64, 40, 40, -1}; float kCpuAquired [] = {1.66, 2.00, 2.66, 3.00, 3.06, -1}; int kYearRetired[] = { 2002, 2003, 2004, 2005, 2006, 2006, 2007, 2007, 2008, 2009, -1} ; int kNRetired [] = { 0, 0, 0, 0, 30, 4, 64, -1, } ; float kCpuRetired [] = { 0, 0, 0, 0, 1.66, 2.00, 2.66, -1, } ; }; //_____________________________________________________________________________ TProdFarmModel::TProdFarmModel() { } //_____________________________________________________________________________ float TProdFarmModel::CpuTotal(int Year) { // total Farm CPU (duals) float cpu_total(0); for (int i=0; (kNAquired[i] >= 0) && (kYearAquired[i] <= Year); i++) { cpu_total += kNAquired[i]*kCpuAquired[i]*2 ; } for (int i=0; (kNRetired[i] >= 0) && (kYearRetired[i] <= Year); i++) { cpu_total -= kNRetired[i]*kCpuRetired[i]*2 ; } return cpu_total/1000.; } //_____________________________________________________________________________ float TProdFarmModel::RetiredCpu(int Year) { // amount of CPU (THz) retired in a given year float cpu(0); for (int i=0; (kNRetired[i] >= 0); i++) { if (Year == kYearRetired[i]) { cpu += kNRetired[i]*kCpuRetired[i]*2 ; } } return cpu/1000.; } //_____________________________________________________________________________ float TProdFarmModel::OpsEff(int Year) { return 0.9; } //_____________________________________________________________________________ float TProdFarmModel::OIRatioNev(int Year) { return 1.4; } //_____________________________________________________________________________ float TProdFarmModel::OIRatioSize(int Year) { return 1.4; } //_____________________________________________________________________________ float TProdFarmModel::ReprocessingFactor(int Year) { int i = Year-kYear[0]; return 1.+kReprFrac[i]; } //_____________________________________________________________________________ float TProdFarmModel::CpuTimePerEvent(float Lumi) { // time per event in GHz*sec, include nonlinearities float cpu_time; cpu_time = 1.779 + 3.291*Lumi + 2.744*Lumi*Lumi; return cpu_time; }