added poweredge c6420 configurations
- added poweredge c6420 configurations from the quotation received on 16/07/2020 - added the ability to choose the amount of ram because 128Gb is no longer enough: the amount of ram required depends on the number of cores - also took this opportunity to refactor the code as it had become hard to maintain
This commit is contained in:
		
							parent
							
								
									000f329d06
								
							
						
					
					
						commit
						d2fb11551e
					
				|  | @ -0,0 +1,165 @@ | |||
| Désignation/Description des matériels	Référence constructeur (le cas échéant)	Numéro  de référence	Système	 TARIFS  en €HT 	Qt	 | ||||
| CAT3_Configuration n°1 (Châssis rempli de serveurs identiques)	Poweredge C6420	4-3-1-14g000	C6420	5,368 €	1	 € 5,368.00  | ||||
| Chassis rack 2U (C6400) avec 4 cartes mères format simple hauteur (4xC6420) - châssis disques 3"5					-	 | ||||
| 2 processeurs  Intel Xeon Silver 4210R 2.4GHz, 13.75M Cache,9.60GT/s, 2UPI, Turbo, HT,10C/20T (100W) - DDR4-2400					-	 | ||||
| Mémoire 48Go DDR-4 à 2667MHz (6x8Go) par serveur					-	 | ||||
| 1 x disque dur 1TB SATA à 7.2 ktpm en 3"5 par serveur 					-	 | ||||
| 1 x Réseau Ethernet 1Gbit RJ45					-	 | ||||
| Alimentation hot plug et redondante 1600W Platinium avec 2 câbles d'alimentation C13-14 de 2m					-	 | ||||
| Pas de lecteur Optique					-	 | ||||
| Sans système d exploitation					-	 | ||||
| ProSupport 5 ans, intervention sur site J+1: support professionnel de niveau 2 comprenant assistance matériel et logiciel, 24H/24, 7j/7  Disponibilité d'un Technical Account Manager (TAM) dédié exclusivement à MATINFO 4 pour la gestion des escalades et du reporting 					-	 | ||||
| Ces extensions concernent l'ensemble des configurations						 € -    | ||||
| Cat3 Configuration n°1: PowerEdge C6420						 € -    | ||||
| Processeurs (passage)						 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Silver 4214R 2.4GHz, 16.5M Cache,9.60GT/s, 2UPI, Turbo, HT,12C/24T (100W) - DDR4-2400		4-3-1-14g600	C6420	1,760 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Silver 4215R 3,2GHz, 11M Cache,9.60GT/s, 2UPI, Turbo, HT,8C/16T (130W) - DDR4-2400		4-3-1-14g601	C6420	2,568 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Silver 4216 2.1GHz, 22M Cache,9.60GT/s, 2UPI, Turbo, HT,16C/32T (100W) - DDR4-2400		4-3-1-14g503	C6420	4,152 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 5215 2.5GHz, 13.75M Cache,10.40GT/s, 2UPI, Turbo, HT,10C/20T (85W) - DDR4-2400		4-3-1-14g504	C6420	6,624 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 5217 3GHz, 11M Cache,10.40GT/s, 2UPI, Turbo, HT,8C/16T (115W) - DDR4-2666		4-3-1-14g505	C6420	9,288 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 5218R 2.1GHz, 27,5M Cache,10.40GT/s, 2UPI, Turbo, HT,20C/40T (125W) - DDR4-2666		4-3-1-14g602	C6420	6,488 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 5220R 2.2GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (150W) - DDR4-2666		4-3-1-14g603	C6420	8,488 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 5222 3.8GHz, 16.5M Cache,10.40GT/s, 2UPI, Turbo, HT,4C/8T (105W) - DDR4-2933		4-3-1-14g508	C6420	6,224 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6226R 2,9GHz, 22M Cache,10.40GT/s,Turbo, HT,16C/32T (150W) - DDR4-2933		4-3-1-14g604	C6420	8,488 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6230R 2.1GHz, 35,75M Cache,10.40GT/s, Turbo, HT,26C/52T (150W) - DDR4-2933		4-3-1-14g605	C6420	13,408 €	1	 € 13,408.00  | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6234 3.3GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,8C/16T (130W) - DDR4-2933		4-3-1-14g701	C6420	16,008 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6238R 2.2GHz, 38.5M Cache,10.40GT/s,Turbo, HT,28C/56T (165W) - DDR4-2933		4-3-1-14g606	C6420	19,688 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6238M 2.1GHz, 30.25M Cache,10.40GT/s, 3UPI, Turbo, HT,22C/44T (140W) - DDR4-2933		4-3-1-14g703	C6420	38,488 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6240R 2.4GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (165W) - DDR4-2933		4-3-1-14g607	C6420	17,560 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6240M 2.6GHz, 24.75M Cache,10.40GT/s, 2UPI, Turbo, HT,18C/36T (150W) - DDR4-2933		4-3-1-14g704	C6420	35,928 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6242R 3,1GHz, 35,75M Cache,10.40GT/s, 2UPI, Turbo, HT,20C/40T (205W) - DDR4-2933		4-3-1-14g608	C6420	18,888 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6244 3.6GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,8C/16T (150W) - DDR4-2933		4-3-1-14g512	C6420	23,208 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6246R 3.4GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,16C/32T (205W) - DDR4-2933		4-3-1-14g609	C6420	24,688 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6248R 3GHz, 35.75M Cache,10.40GT/s, 2UPI, Turbo, HT,24C/48T (205W) - DDR4-2933		4-3-1-14g610	C6420	23,624 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Platinium 8253 2.2GHz, 22M Cache,10.40GT/s, 3UPI, Turbo, HT,16C/32T (125W) - DDR4-2933		4-3-1-14g514	C6420	22,984 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6254 3.1GHz, 24.75M Cache,10.40GT/s, 3UPI, Turbo, HT,18C/36T (200W) - DDR4-2933		4-3-1-14g515	C6420	27,848 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6252 2.1GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (150W) - DDR4-2933		4-3-1-14g516	C6420	28,568 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Gold 6258R 2,7GHz, 38.5M Cache,10.40GT/s, 2UPI, Turbo, HT,28C/56T (205W) - DDR4-2933		4-3-1-14g611	C6420	31,288 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Platinium 8260 2.4GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (165W) - DDR4-2933		4-3-1-14g517	C6420	34,000 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Platinium 8268 2.9GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,24C/48T (205W) - DDR4-2933		4-3-1-14g518	C6420	44,128 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Platinium 8270 2.7GHz, 35.75M Cache,10.40GT/s, 3UPI, Turbo, HT,26C/52T (205W) - DDR4-2933		4-3-1-14g519	C6420	56,184 €		 € -    | ||||
| Passage à 2 Processeurs Intel Xeon Platinium 8276 2.2GHz, 38.5M Cache,10.40GT/s, 3UPI, Turbo, HT,28C/56T (165W) - DDR4-2933		4-3-1-14g520	C6420	67,912 €		 € -    | ||||
| 						 € -    | ||||
| Extensions mémoires						 € -    | ||||
| Passage à 192Go en 6 x 32Go 2933Mhz RDIMM pour les 4 serveurs (A partir de la base 6x8Go)		4-3-1-14g041	C6420	5,760 €		 € -    | ||||
| Passage à 96Go en 6 x 16Go 2933Mhz RDIMM pour les 4 serveurs (A partir de la base 6x8Go)		4-3-1-14g042	C6420	1,920 €	1	 € 1,920.00  | ||||
| 						 € -    | ||||
| Ajout d'une barette de 8Go 2667 Mhz DDR-4 - Pour les 4 serveurs		4-3-1-14g043	C6420	320 €		 € -    | ||||
| Ajout d'une barette de 16Go 2933 Mhz DDR-4 - Pour les 4 serveurs		4-3-1-14g044	C6420	640 €	6	 € 3,840.00  | ||||
| Ajout d'une barette de 32Go 2933 Mhz DDR-4 - Pour les 4 serveurs		4-3-1-14g045	C6420	1,280 €		 € -    | ||||
| 						 € -    | ||||
| Carte SD et disques M.2 (BOSS)						 € -    | ||||
| Ajout d'un contrôleur BOSS et 1 carte M.2 de 120Go - Pour les 4 serveurs		4-3-1-14g046	C6420	739 €		 € -    | ||||
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 16Go redondantes pour hyperviseur - Pour les 4 serveurs		4-3-1-14g047	C6420	200 €		 € -    | ||||
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 32Go redondantes pour hyperviseur - Pour les 4 serveurs		4-3-1-14g048	C6420	379 €		 € -    | ||||
| Ajout de 2 cartes SD (MicroSDHC/SDXC) de 64Go redondantes pour hyperviseur - Pour les 4 serveurs		4-3-1-14g049	C6420	878 €		 € -    | ||||
| 						 € -    | ||||
| Disques durs (passage)						 € -    | ||||
| Passage à châssis avec 4 cartes mères format disques 2"5		4-3-1-14g050	C6420	370 €		 € -    | ||||
| Passage à châssis avec 4 cartes mères format disques 2"5 NVMe		4-3-1-14g051	C6420	399 €		 € -    | ||||
| Passage au châssis sans disques (Retrait des 4x1To du châssis de base) / Carte BOSS obligatoire		4-3-1-14g184	C6420	-361 €		 € -    | ||||
| 						 € -    | ||||
| Disques durs additionnels						 € -    | ||||
| Ajout de disques durs hotplug 3,5" 						 € -    | ||||
| Ajout d'un disque dur 1 To SATA 7200 Tpm 3,5'' pour les 4 serveurs		4-3-1-14g096	C6420	361 €		 € -    | ||||
| Ajout d'un disque dur 1 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs		4-3-1-14g097	C6420	395 €		 € -    | ||||
| Ajout d'un disque dur 2 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs		4-3-1-14g098	C6420	579 €		 € -    | ||||
| Ajout d'un disque dur 4 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs		4-3-1-14g099	C6420	778 €		 € -    | ||||
| Ajout d'un disque dur 8 To Nearline SAS 7200 Tpm 3,5"pour les 4 serveurs		4-3-1-14g101	C6420	1,120 €		 € -    | ||||
| Ajout d'un disque dur 12 To Nearline SAS 7200 Tpm 3,5"- hotplug		4-3-1-14g521	C6420	1,680 €		 € -    | ||||
| Ajout d'un disque dur 14 To Nearline SAS 7200 Tpm 3,5"- hotplug		4-3-1-14g522	C6420	2,120 €		 € -    | ||||
| Ajout d'un disque dur 4 To Nearline SAS 7200 Tpm 3,5"- SED FIPS140-2 pour les 4 serveurs		4-3-1-14g103	C6420	898 €		 € -    | ||||
| Ajout d'un disque dur 8 To Nearline SAS 7200 Tpm 3,5"- SED FIPS140-2 pour les 4 serveurs		4-3-1-14g104	C6420	1,280 €		 € -    | ||||
| Ajout de disques durs hotplug 2,5" 						 € -    | ||||
| Ajout d'un disque dur 1 To Nearline SAS 7200 Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g105	C6420	658 €		 € -    | ||||
| Ajout d'un disque dur 2 To Nearline SAS 7200 Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g106	C6420	1,077 €		 € -    | ||||
| Ajout d'un disque dur 300 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g108	C6420	599 €		 € -    | ||||
| Ajout d'un disque dur 600 Go SAS 10k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g109	C6420	519 €		 € -    | ||||
| Ajout d'un disque dur 600 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g110	C6420	998 €		 € -    | ||||
| Ajout d'un disque dur 900 Go SAS 15k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g111	C6420	1,120 €		 € -    | ||||
| Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g112	C6420	660 €		 € -    | ||||
| Ajout d'un disque dur 1,8 To SAS 10k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g113	C6420	960 €		 € -    | ||||
| Ajout d'un disque dur 2.4 To SAS 10k Tpm 2,5" - Pour les 4 serveurs		4-3-1-14g523	C6420	1,400 €		 € -    | ||||
| Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - SED FIPS140-2 - Pour les 4 serveurs		4-3-1-14g115	C6420	740 €		 € -    | ||||
| Disques SSD SATA Lecture Intensive						 € -    | ||||
| Ajout d'un disque dur 480 Go SSD SATA Read Intensive - 2.5" - 1DWPD - 876TBW - Pour les 4 serveurs		4-3-1-14g300	C6420	700 €		 € -    | ||||
| Ajout d'un disque dur 960 Go SSD SATA Read Intensive - 2.5" - 1DWPD - 1752TBW - Pour les 4 serveurs		4-3-1-14g301	C6420	1,320 €		 € -    | ||||
| Ajout d'un disque dur 1.92 To SSD SATA Read Intensive - 2.5" - 1DWPD - 3504TBW - Pour les 4 serveurs		4-3-1-14g302	C6420	2,400 €		 € -    | ||||
| Ajout d'un disque dur 3.84 To SSD SATA Read Intensive - 2.5" - 1DWPD - 7008TBW - Pour les 4 serveurs		4-3-1-14g303	C6420	5,000 €		 € -    | ||||
| Disques SSD SATA Utilisation Mixte						 € -    | ||||
| Ajout d'un disque dur 240 Go SSD SATA Mix Use - INTEL S4610  2.5" - 3DWPD - 1314TBW - Pour les 4 serveurs		4-3-1-14g196	C6420	680 €		 € -    | ||||
| Ajout d'un disque dur 480 Go SSD SATA Mix Use - 2.5" - 3DWPD - 2628TBW - Pour les 4 serveurs		4-3-1-14g304	C6420	920 €		 € -    | ||||
| Ajout d'un disque dur 960 Go SSD SATA Mix Use - 2.5" - 3DWPD - 5256TBW - Pour les 4 serveurs		4-3-1-14g305	C6420	1,720 €		 € -    | ||||
| Ajout d'un disque dur 1.92 To SSD SATA Mix Use - 2.5" - 3DWPD - 10512TBW - Pour les 4 serveurs		4-3-1-14g306	C6420	3,400 €		 € -    | ||||
| Disques SSD SAS Lecture Intensive						 € -    | ||||
| Ajout d'un disque dur 960 Go SSD SAS Read Intensive - 2,5" - 1DWPD - 1752TBW - Pour les 4 serveurs		4-3-1-14g307	C6420	2,000 €		 € -    | ||||
| Ajout d'un disque dur 1.92 To SSD SAS Read Intensive - 2,5" - 1DWPD - 3504TBW - Pour les 4 serveurs		4-3-1-14g308	C6420	3,120 €		 € -    | ||||
| Ajout d'un disque dur 3.84 To SSD SAS Read Intensive - 2,5" - 1DWPD - 7008TBW - Pour les 4 serveurs		4-3-1-14g309	C6420	6,200 €		 € -    | ||||
| Disques SSD SAS Utilisation Mixte						 € -    | ||||
| Ajout d'un disque dur 480 Go SSD SAS Mix Use - TOSHIBA PM5-SV  2,5" - 3DWPD - 2628TBW - Pour les 4 serveurs		4-3-1-14g133	C6420	2,075 €		 € -    | ||||
| Ajout d'un disque dur 800 Go SSD SAS Mix Use - 2.5'' - 3DWPD - 4360TBW - Pour les 4 serveurs		4-3-1-14g310	C6420	1,800 €		 € -    | ||||
| Ajout d'un disque dur 1.6 To SSD SAS Mix Use - 2,5" - 3DWPD - 8760TBW - Pour les 4 serveurs		4-3-1-14g311	C6420	3,200 €		 € -    | ||||
| Ajout d'un disque dur 3.84To SSD SAS Mix Use - 2,5" - 3DWPD - 21024TBW - Pour les 4 serveurs		4-3-1-14g136	C6420	9,200 €		 € -    | ||||
| Disques SSD SAS Ecriture Intensive						 € -    | ||||
| Ajout d'un disque dur 400 Go SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 7300TBW - Pour les 4 serveurs		4-3-1-14g139	C6420	2,800 €		 € -    | ||||
| Ajout d'un disque dur 800 Go SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 14600TBW - Pour les 4 serveurs		4-3-1-14g140	C6420	4,800 €		 € -    | ||||
| Ajout d'un disque dur 1.6 To SSD SAS Write Intensive - TOSHIBA PM5-M 2,5" - 10DWPD - 29200TBW - Pour les 4 serveurs		4-3-1-14g141	C6420	7,200 €		 € -    | ||||
| 						 € -    | ||||
| Disques NVME 2.5''						 € -    | ||||
| Ajout d'un disque NVME 2.5'' Samsung PM1725 1.6 To Mix Use - Pour les 4 serveurs		4-3-1-14g143	C6420	4,400 €		 € -    | ||||
| Ajout d'un disque NVME 2.5'' Samsung PM1725 3.2 To Mix Use - Pour les 4 serveurs		4-3-1-14g202	C6420	8,800 €		 € -    | ||||
| Ajout d'un disque NVME 2.5'' Samsung PM1725 6.4 To Mix Use - Pour les 4 serveurs		4-3-1-14g203	C6420	17,600 €		 € -    | ||||
| Ajout d'un disque NVME 2.5'' INTEL P4510 1 To Read Intensive - Pour les 4 serveurs		4-3-1-14g204	C6420	1,840 €		 € -    | ||||
| Ajout d'un disque NVME 2.5'' INTEL P4610 1.6 To Mix Use - Pour les 4 serveurs		4-3-1-14g207	C6420	4,400 €		 € -    | ||||
| Ajout d'un disque NVME 2.5'' INTEL P4610 3.2 To Mix Use - Pour les 4 serveurs		4-3-1-14g208	C6420	8,800 €		 € -    | ||||
| 						 € -    | ||||
| Cartes interfaces						 € -    | ||||
| Ajout d'une carte RAID H330 SAS/SATA RAID 0,1,5, 10 & 50 pour les 4 serveurs		4-3-1-14g145	C6420	410 €		 € -    | ||||
| Ajout d'une carte RAID H730p SAS/SATA RAID 0,1,5, 10 & 50 avec 2Go de cache pour les 4 serveurs		4-3-1-14g146	C6420	928 €		 € -    | ||||
| 						 € -    | ||||
| Cartes I/O additionnelles						 € -    | ||||
| Ajout carte réseau Intel I350 deux ports gigabit pour les 4 serveurs		4-3-1-14g147	C6420	260 €		 € -    | ||||
| Ajout carte réseau Intel X550 deux ports 10 Gb Base-T pour les 4 serveurs		4-3-1-14g149	C6420	798 €		 € -    | ||||
| Ajout carte réseau Intel XL710 deux ports 40 Gb QSFP+ pour les 4 serveurs		4-3-1-14g150	C6420	1,481 €		 € -    | ||||
| Ajout carte réseau Intel X710 deux ports 10 Gb SFP+ pour les 4 serveurs		4-3-1-14g151	C6420	1,159 €	1	 € 1,159.00  | ||||
| Ajout carte réseau Intel X710 quatre ports 10 Gb Base-T pour les 4 serveurs		4-3-1-14g152	C6420	1,575 €		 € -    | ||||
| Ajout carte Mellanox ConnectX-4 Lx Dual Port 25Gb SFP28 pour les 4 serveurs		4-3-1-14g155	C6420	1,037 €		 € -    | ||||
| Ajout carte SolarFlare 8522 10Gb 2 Ports SFP+ pour les 4 serveurs		4-3-1-14g156	C6420	678 €		 € -    | ||||
| Ajout carte Broadcom 57412 10G SFP+ Dual Ports pour les 4 serveurs		4-3-1-14g157	C6420	718 €		 € -    | ||||
| Ajout carte Broadcom 57414 25G SFP28 Dual Ports pour les 4 serveurs		4-3-1-14g158	C6420	818 €		 € -    | ||||
| Ajout carte Broadcom 57416 10G Base-T Dual Ports pour les 4 serveurs		4-3-1-14g159	C6420	758 €		 € -    | ||||
| Ajout carte QLogic 41112 Dual Port 10GbE SFP+ pour les 4 serveurs		4-3-1-14g160	C6420	718 €		 € -    | ||||
| Ajout carte QLogic 41162 Dual Port 10GbE Base-T pour les 4 serveurs		4-3-1-14g161	C6420	758 €		 € -    | ||||
| Ajout carte QLogic 41262 Dual Port 25GbE SFP28 pour les 4 serveurs		4-3-1-14g162	C6420	819 €		 € -    | ||||
| Dell Networking Câble Direct Attach Twinaxial SFP+ DELL 3 mètres 		4-3-1-14g209	C6420	25 €		 € -    | ||||
| Dell Networking Câble Direct Attach Twinaxial SFP28 (25G) DELL 3 mètres 		4-3-1-14g210	C6420	105 €		 € -    | ||||
| 						 € -    | ||||
| Carte d'administration à distance						 € -    | ||||
| Passage à carte iDRAC 9 Enterprise pour les 4 serveurs		4-3-1-14g163	C6420	68 €	1	 € 68.00  | ||||
| Passage à carte iDRAC 9 Enterprise avec carte SD Vflash 16 GB pour les 4 serveurs		4-3-1-14g164	C6420	273 €		 € -    | ||||
| Activation d'iDRAC9 Group Manager pour les 4 serveurs		4-3-1-14g165	C6420	0 €		 € -    | ||||
| Mot de passe iDRAC9 Classique pour les 4 serveurs		4-3-1-14g166	C6420	0 €		 € -    | ||||
| Mot de passe iDRAC9 Aléatoire pour les 4 serveurs		4-3-1-14g167	C6420	0 €		 € -    | ||||
| 						 € -    | ||||
| Alimentations redondantes						 € -    | ||||
| Passage à double alimentation redondante 2000W (C19/C20) Platinium (1+1) avec 2 câbles d'alimentation C19-C20 de 2.5m		4-3-1-14g169	C6420	250 €		 € -    | ||||
| Passage à double alimentation redondante 2400W (C19/C20) Platinium (1+1) avec 2 câbles d'alimentation C19-C20 de 2.5m		4-3-1-14g170	C6420	350 €	1	 € 350.00  | ||||
| Passage de câble d'alimentation de 2m à 0,6cm		4-2-14g173	C6420	0 €		 € -    | ||||
| Passage de câble d'alimentation de 2m à 4m		4-2-14g174	C6420	0 €		 € -    | ||||
| 						 € -    | ||||
| Kit de mise en rack (préciser les modèles de serveurs concernés)						 € -    | ||||
| Kit de mise en rack inclus de base pour le Poweredge C6420		4-3-1-14g171	C6420	0 €		 € -    | ||||
| 						 € -    | ||||
| Cartes réseau haut-débit pour les applications HPC  (préciser les modèles de serveurs concernés)						 € -    | ||||
| Intel® Omni-Path Host Fabric Interface Adapter 100 Series 1 Port PCIe x16 - Pour les 4 serveurs		4-3-1-14g172	C6420	1,638 €		 € -    | ||||
| ConnectX-4 VPI adapter card, EDR IB (100Gb/s), Double-port SFP28 - Pour les 4 serveurs		4-3-1-14g174	C6420	4,988 €		 € -    | ||||
| ConnectX-4 VPI adapter card, EDR IB (100Gb/s), single-port SFP28 - Pour les 4 serveurs		4-3-1-14g175	C6420	2,853 €		 € -    | ||||
| ConnectX-4 adapter card, 100Gbits Dual-ports QSFP+ - Pour les 4 serveurs		4-3-1-14g176	C6420	2,853 €		 € -    | ||||
| Carte Mellanox ConnectX-5 Simple Port EDR VPI QSFP28 - Pour les 4 serveurs		4-3-1-14g-212	C6420	2,814 €		 € -    | ||||
| Carte Mellanox ConnectX-6 Simple Port HDR100 100Gbits - Pour les 4 serveurs		4-3-1-14g706	C6420	2,816 €		 € -    | ||||
| 						 € -    | ||||
| Extensions de garanties acquises lors de l'achat initial						 € -    | ||||
| Gardez votre disque dur - KYHD 5 ans - Par châssis		4-3-1-14g-213	C6420	280 €		 € -    | ||||
| Gardez votre disque dur - KYHD 7 ans - Par châssis		4-3-1-14g-214	C6420	380 €		 € -    | ||||
|  Extension de garantie 5 ans intervention H+4 (24h/24h, 7j/7j) DELL Prosupport pour le châssis et les 4 serveurs		4-3-1-14g177	C6420	750 €		 € -    | ||||
| Extension de garantie 7 ans intervention J+1 (heures ouvrées, jours ouvrés) DELL Prosupport pour le châssis et les 4 serveurs		4-3-1-14g178	C6420	1,100 €	1	 € 1,100.00  | ||||
|  | @ -174,6 +174,10 @@ r940	Platinum-8276	35912 | |||
| r940	Platinum-8280	39900 | ||||
| r940	Platinum-8280L	48300 | ||||
| 
 | ||||
| c6420	Silver-4210R	3912 | ||||
| c6420	Gold-6230R	17320 | ||||
| 
 | ||||
| 
 | ||||
| precision3630	core-i7-8700k	190 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										790
									
								
								procs_chooser.py
								
								
								
								
							
							
						
						
									
										790
									
								
								procs_chooser.py
								
								
								
								
							|  | @ -7,6 +7,7 @@ import itertools | |||
| import re | ||||
| import hashlib | ||||
| from string import ascii_lowercase | ||||
| from abc import ABCMeta, abstractmethod | ||||
| 
 | ||||
| markerTypes=[',', '+', '.', '^', 'v', '<', '>', 'o', '*', '1', '2', '3', '4', '8', 's', 'p', 'h', 'H', 'x', 'X', 'D', 'd', '|', '_'] | ||||
| #for c in ascii_lowercase: | ||||
|  | @ -50,39 +51,89 @@ def plotCpuPassmark(): | |||
| 	plt.show() | ||||
| 
 | ||||
| 
 | ||||
| def get_proc_architecture(proc_id): | ||||
| 	if re.match('core-i[357]-8[0-9][0-9][0-9][ktbuh]', proc_id): | ||||
| 		return 'coffeelake' | ||||
| 	elif re.match('Silver-[0-9]2[0-9][0-9]', proc_id): | ||||
| 		return 'cascadelake' | ||||
| 	elif re.match('Gold-[0-9]2[0-9][0-9]', proc_id): | ||||
| 		return 'cascadelake' | ||||
| 	elif re.match('Platinum-[0-9]2[0-9][0-9]', proc_id): | ||||
| 		return 'cascadelake' | ||||
| 	elif re.match('Gold-[0-9]1[0-9][0-9]', proc_id): | ||||
| 		return 'skylake' | ||||
| 	elif re.match('Platinum-[0-9]1[0-9][0-9]', proc_id): | ||||
| 		return 'skylake' | ||||
| 	elif re.match('E5-26[0-9][0-9][LWA]*v4', proc_id): | ||||
| 		return 'broadwell' | ||||
| 	elif re.match('E5-26[0-9][0-9][LWA]*v3', proc_id): | ||||
| 		return 'haswell' | ||||
| 	elif re.match('E5-26[0-9][0-9][LWA]*v2', proc_id): | ||||
| 		return 'ivy bridge' | ||||
| 	elif re.match('E5-26[0-9][0-9][LWA]*', proc_id): | ||||
| 		return 'sandy bridge' | ||||
| 	elif re.match('X56[0-9][0-9]', proc_id): | ||||
| 		return 'gulftown' | ||||
| 	elif re.match('X55[0-9][0-9]', proc_id): | ||||
| 		return 'gainestown' | ||||
| 	elif re.match('E54[0-9][0-9]', proc_id): | ||||
| 		return 'harpertown' | ||||
| 	elif re.match('51[0-9][0-9]', proc_id): | ||||
| 		return 'woodcrest' | ||||
| 	else: | ||||
| 		assert False | ||||
| class Cpu(): | ||||
| 
 | ||||
| def get_proc_arch_transistor_size(proc_arch):  | ||||
| 	def __init__(self, proc_id): | ||||
| 		cpuTable = numpy.genfromtxt('cpu_table.dat', dtype=("|U15", float, int, float, float, float), names=True, delimiter='\t') | ||||
| 		for id, clock, num_cores, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']): | ||||
| 			if id == proc_id: | ||||
| 				# print('found '+procId) | ||||
| 				break | ||||
| 		assert id == proc_id, 'Failed to find %s in cputable' % proc_id | ||||
| 		self.proc_id = proc_id | ||||
| 		self.clock = clock | ||||
| 		self.num_cores = num_cores | ||||
| 		self.tdp = tdp | ||||
| 		self.cpumark = cpumark | ||||
| 
 | ||||
| 	@property | ||||
| 	def architecture(self): | ||||
| 		proc_id = self.proc_id | ||||
| 		if re.match('core-i[357]-8[0-9][0-9][0-9][ktbuh]', proc_id): | ||||
| 			return 'coffeelake' | ||||
| 		elif re.match('Silver-[0-9]2[0-9][0-9]', proc_id): | ||||
| 			return 'cascadelake' | ||||
| 		elif re.match('Gold-[0-9]2[0-9][0-9]', proc_id): | ||||
| 			return 'cascadelake' | ||||
| 		elif re.match('Platinum-[0-9]2[0-9][0-9]', proc_id): | ||||
| 			return 'cascadelake' | ||||
| 		elif re.match('Gold-[0-9]1[0-9][0-9]', proc_id): | ||||
| 			return 'skylake' | ||||
| 		elif re.match('Platinum-[0-9]1[0-9][0-9]', proc_id): | ||||
| 			return 'skylake' | ||||
| 		elif re.match('E5-26[0-9][0-9][LWA]*v4', proc_id): | ||||
| 			return 'broadwell' | ||||
| 		elif re.match('E5-26[0-9][0-9][LWA]*v3', proc_id): | ||||
| 			return 'haswell' | ||||
| 		elif re.match('E5-26[0-9][0-9][LWA]*v2', proc_id): | ||||
| 			return 'ivy bridge' | ||||
| 		elif re.match('E5-26[0-9][0-9][LWA]*', proc_id): | ||||
| 			return 'sandy bridge' | ||||
| 		elif re.match('X56[0-9][0-9]', proc_id): | ||||
| 			return 'gulftown' | ||||
| 		elif re.match('X55[0-9][0-9]', proc_id): | ||||
| 			return 'gainestown' | ||||
| 		elif re.match('E54[0-9][0-9]', proc_id): | ||||
| 			return 'harpertown' | ||||
| 		elif re.match('51[0-9][0-9]', proc_id): | ||||
| 			return 'woodcrest' | ||||
| 		else: | ||||
| 			assert False | ||||
| 	 | ||||
| 	@property | ||||
| 	def num_dp_flop_per_cycle(self): | ||||
| 		proc_arch = self.architecture | ||||
| 		simd_id = get_simd_id(proc_arch) | ||||
| 		num_simd_per_core = 1 | ||||
| 		if proc_arch == 'skylake' or proc_arch == 'cascadelake': | ||||
| 		    # from https://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors : Xeon Platinum, Gold 61XX, and Gold 5122 have two AVX-512 FMA units per core; Xeon Gold 51XX (except 5122), Silver, and Bronze have a single AVX-512 FMA unit per core | ||||
| 			if re.match('Gold-5122', self.proc_id): | ||||
| 				num_simd_per_core = 2 | ||||
| 
 | ||||
| 			# https://en.wikichip.org/wiki/intel/xeon_gold/5222 : 'Note that this is the only processor in the Xeon Gold 52xx series with two 512b FMA units.' | ||||
| 			if re.match('Gold-5222', self.proc_id): | ||||
| 				num_simd_per_core = 2 | ||||
| 				 | ||||
| 			if re.match('Gold-61[0-9][0-9]', self.proc_id): | ||||
| 				num_simd_per_core = 2 | ||||
| 			if re.match('Gold-62[0-9][0-9]', self.proc_id): | ||||
| 				num_simd_per_core = 2 | ||||
| 		dp_flops_per_cycle = num_simd_per_core * simd_id_to_dp_flops_per_cycle(simd_id) | ||||
| 		print(self.proc_id, dp_flops_per_cycle) | ||||
| 		return dp_flops_per_cycle | ||||
| 
 | ||||
| 	@property | ||||
| 	def num_ram_channels(self): | ||||
| 		return { | ||||
| 			'skylake': 6, | ||||
| 			'coffeelake': 6, | ||||
| 			'cascadelake': 6 | ||||
| 		}[self.architecture] | ||||
| 
 | ||||
| def get_proc_architecture(proc_id): | ||||
| 	return Cpu(proc_id).architecture | ||||
| 
 | ||||
| def get_proc_arch_transistor_size(proc_id):  | ||||
| 	return { | ||||
| 		'woodcrest':65, | ||||
| 		'harpertown':45, | ||||
|  | @ -95,7 +146,7 @@ def get_proc_arch_transistor_size(proc_arch): | |||
| 		'skylake':14, | ||||
| 		'coffeelake':14, | ||||
| 		'cascadelake':14 | ||||
| 		}[get_proc_architecture(proc_arch)] | ||||
| 		}[get_proc_architecture(proc_id)] | ||||
| 
 | ||||
| def simd_id_to_dp_flops_per_cycle(simd_id): | ||||
| 	""" | ||||
|  | @ -145,127 +196,482 @@ def get_simd_id(proc_arch): | |||
| 		'coffeelake':'avx2' | ||||
| 		}[proc_arch] | ||||
| 
 | ||||
| def num_dp_flop_per_cycle(proc_id): | ||||
| 	proc_arch = get_proc_architecture(proc_id) | ||||
| 	simd_id = get_simd_id(proc_arch) | ||||
| 	num_simd_per_core = 1 | ||||
| 	if proc_arch == 'skylake' or proc_arch == 'cascadelake': | ||||
| 	    # from https://en.wikipedia.org/wiki/List_of_Intel_Xeon_microprocessors : Xeon Platinum, Gold 61XX, and Gold 5122 have two AVX-512 FMA units per core; Xeon Gold 51XX (except 5122), Silver, and Bronze have a single AVX-512 FMA unit per core | ||||
| 		if re.match('Gold-5122', proc_id): | ||||
| 			num_simd_per_core = 2 | ||||
| 		if re.match('Gold-61[0-9][0-9]', proc_id): | ||||
| 			num_simd_per_core = 2 | ||||
| 		if re.match('Gold-62[0-9][0-9]', proc_id): | ||||
| 			num_simd_per_core = 2 | ||||
| 	dp_flops_per_cycle = num_simd_per_core * simd_id_to_dp_flops_per_cycle(simd_id) | ||||
| 	print(proc_id, dp_flops_per_cycle) | ||||
| 	return dp_flops_per_cycle | ||||
| 
 | ||||
| def get_system_base_price( host_id ): | ||||
| 	# for r730 on 06/10/2016 | ||||
| 	#   (x: price without procs, p1 : price of e5-2603v4, p2: price of e5-2609v4) | ||||
| 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 	#   x + p1 = 1014.0 | ||||
| 	#   x + 2 * p1 = 1014.0 + 216 | ||||
| 	#   => p1 approx= 215.5 | ||||
| 	#   => x = 1014. - 215. = 799.0 | ||||
| 	#   x + p2 = 1123.0 | ||||
| 	#   => p2 = 324.0 | ||||
| 	#   x + 2 * p2 = 1447.0 | ||||
| 	# for r630 on 14/10/2016 | ||||
| 	#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||
| 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 	#   x + p2603 = 948.0 | ||||
| 	#   x + 2 * p2603 = 948.0 + 216 | ||||
| 	#   => p2603 approx= 215.5 | ||||
| 	#   => x = 948. - 215. = 733.0 | ||||
| 	# verification : | ||||
| 	#   x + p2609 = 1057.0 | ||||
| 	#   => p2609 = 1057-733=324.0 | ||||
| 	#   x + 2 * p2609 = 1381.0 | ||||
| 	# for 4xc6320 on 14/10/2016 | ||||
| 	#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||
| 	# x + 4 x (2 x p2620 +  p32G) =  5135 € HT | ||||
| 	# x + 4 x (2 x p2640 + p128G + pX520 + p5years) = 15590 € HT | ||||
| 	# x + 4 x (2 x p2650 + p128G + pX520 + p5years) = 17340 € HT | ||||
| 	# x + 4 x (2 x p2660 + p128G + pX520 + p5years) = 19490 € HT | ||||
| 	# by examining this and the price of processors on R630 | ||||
| 	# - E5-2620v4 :   458€ | ||||
| 	# - E5-2640v4 :   951€ | ||||
| 	# - E5-2650v4 :  1209€ | ||||
| 	# - E5-2660v4 :  1525€ | ||||
| 	# - E5-2680v4 :  1867€ | ||||
| 	# - E5-2690v4 :  2261€ | ||||
| 	# I could work out that : | ||||
| 	# - the price of procs on c6320 is the price of procs on r630 * 85% | ||||
| 	# - the price of the base c6320 with 32 Go and no proc at all is 2020.6 | ||||
| 	# - the price of the 32G to 128G upgrade is 6222.6 euros (cheaper price of 16G->128G upgrade on r630 : (1778*4 = 7112)) | ||||
| 	# details : | ||||
| 	# 	>>> (19490.-17340)/8 | ||||
| 	# 	268.75 | ||||
| 	# 	>>> (17340.-15590)/8 | ||||
| 	# 	218.75 | ||||
| 	# 	>>> 218.75/258. | ||||
| 	# 	0.8478682170542635 | ||||
| 	# 	>>> 268.75/316 | ||||
| 	# 	0.8504746835443038 | ||||
| 	# 	>>> 15590.0+((1209.0-951.0)*0.85)*8 | ||||
| 	# 	17344.4 | ||||
| 	# 	>>> 15590.0+((1525.0-951.0)*0.85)*8 | ||||
| 	# 	19493.2 | ||||
| 	#   price of 128G ram upgrade assuming that 5years guarantee costs 880€ (same as c6220), | ||||
| 	# 	>>> 15590.0+((458.0-951.0)*0.85)*8-210.0*4-880.0 - 5135.0 | ||||
| 	#	6222.6 | ||||
| 	# 	>>> 5135.0 - (458.0*0.85)*8 | ||||
| 	# 	2020.6 | ||||
| 	# for c4130 on 14/10/2016 | ||||
| 	# x + 2 x E5-2640v4 + 128G + 2 * K80 + X520 + p5years = 12281€ | ||||
| 	# x + 2 x E5-2640v4 + 128G + 4 * K80 + X520 + p5years = 19317€ | ||||
| 	# price of a K80 | ||||
| 	# >>> (19317.-12281)/2 | ||||
| 	# 3518.0 | ||||
| 	# assuming the options cost the same as for R630 (X520=210€, p5years=240€, 128G=1778€, E5-2640v4=951€), the cost of the base system is : | ||||
| 	# >>> 12281-951-951-1778-210-240-3518-3518 | ||||
| 	# 1115 | ||||
| 	# but if we integrate the X520 card so that we have a 10Gb ethernet in the base, the cost of the base system becomes : | ||||
| 	# >>> 1115+210 | ||||
| 	# 1325 | ||||
| 	# on 29/09/2017 | ||||
| 	#   (x: price without procs, p3106: price of Bronze-3106, p6126: price of Gold6126) | ||||
| 	#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 	#   x + p3106 = 1067.0 | ||||
| 	#   x + 2 * p3106 = 1067.0 + 320.0 | ||||
| 	#   => p3106 = 320 | ||||
| 	#   => x = 1067.0 - 320.0 = 747.0 | ||||
| 	# 	check if x computation is consistent with p6126 | ||||
| 	#   x + p6126 = 2767 | ||||
| 	#   x + 2 * p6126 = 4787.0 | ||||
| 	#   => p6126 = 2020.0 | ||||
| 	#   => x = 747.0 --> yes ! | ||||
| class HostType(): | ||||
| 
 | ||||
| 	# price of r940 (with 2x xeon gold 5215 and 32 Go DDR4 @ 2933GHz) on 09/06/2020 : 3784€ | ||||
| 	#   (x: price without procs, p5215: price of gold-5215, p6248: price of Gold6248) | ||||
| 	#   p6240 = 2684 | ||||
| 	#   p6248 = 3442 | ||||
| 	#   p8280l = 12075 | ||||
| 	#   x + 2 * p5215 = 3784 | ||||
| 	#   x + 4 * p6240 = 11886   =>    x = 1150 | ||||
| 	#   x + 4 * p6248 = 14918   =>    x = 1150 | ||||
| 	#   x + 4 * p8280l = 49450  =>    x = 1150 | ||||
| 	#   => p5215 = 1317   (agrees with proc price on r640) | ||||
| 	def __init__(self, host_type_id, num_cpu_per_server, num_servers=1): | ||||
| 		self.host_type_id = host_type_id | ||||
| 		self.num_cpu_per_server = num_cpu_per_server | ||||
| 		self.num_servers = num_servers | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_empty_price(self): | ||||
| 		pass | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_dimm_price(self, dimm_capacity): | ||||
| 		pass | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		pass | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_disk_upgrade_price(self, disk_capacity): | ||||
| 		pass | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeC6220(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=4) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		return 4890.0 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 880.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 320.0 | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeR620(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		return 860.0 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 240.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return -20.0 * self.num_servers | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeR630(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# for r630 on 14/10/2016 | ||||
| 		#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||
| 		#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 		#   x + p2603 = 948.0 | ||||
| 		#   x + 2 * p2603 = 948.0 + 216 | ||||
| 		#   => p2603 approx= 215.5 | ||||
| 		#   => x = 948. - 215. = 733.0 | ||||
| 		# verification : | ||||
| 		#   x + p2609 = 1057.0 | ||||
| 		#   => p2609 = 1057-733=324.0 | ||||
| 		#   x + 2 * p2609 = 1381.0 | ||||
| 		return 733.0 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 240.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 0.0 * self.num_servers | ||||
| 
 | ||||
| class DellPowerEdgeR730(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=1) | ||||
| 
 | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# for r730 on 06/10/2016 | ||||
| 		#   (x: price without procs, p1 : price of e5-2603v4, p2: price of e5-2609v4) | ||||
| 		#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 		#   x + p1 = 1014.0 | ||||
| 		#   x + 2 * p1 = 1014.0 + 216 | ||||
| 		#   => p1 approx= 215.5 | ||||
| 		#   => x = 1014. - 215. = 799.0 | ||||
| 		#   x + p2 = 1123.0 | ||||
| 		#   => p2 = 324.0 | ||||
| 		#   x + 2 * p2 = 1447.0 | ||||
| 		return 799.0 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 240.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 0.0 * self.num_servers | ||||
| 
 | ||||
| class DellPowerEdgeC4130(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# for c4130 on 14/10/2016 | ||||
| 		# x + 2 x E5-2640v4 + 128G + 2 * K80 + X520 + p5years = 12281€ | ||||
| 		# x + 2 x E5-2640v4 + 128G + 4 * K80 + X520 + p5years = 19317€ | ||||
| 		# price of a K80 | ||||
| 		# >>> (19317.-12281)/2 | ||||
| 		# 3518.0 | ||||
| 		# assuming the options cost the same as for R630 (X520=210€, p5years=240€, 128G=1778€, E5-2640v4=951€), the cost of the base system is : | ||||
| 		# >>> 12281-951-951-1778-210-240-3518-3518 | ||||
| 		# 1115 | ||||
| 		# but if we integrate the X520 card so that we have a 10Gb ethernet in the base, the cost of the base system becomes : | ||||
| 		# >>> 1115+210 | ||||
| 		# 1325 | ||||
| 		return 1325.0 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 240.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 0.0 * self.num_servers | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeC6320(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=4) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# for 4xc6320 on 14/10/2016 | ||||
| 		#   (x: price without procs, p2603: price of e5-2603v4, p2609: price of e5-2609v4) | ||||
| 		# x + 4 x (2 x p2620 +  p32G) =  5135 € HT | ||||
| 		# x + 4 x (2 x p2640 + p128G + pX520 + p5years) = 15590 € HT | ||||
| 		# x + 4 x (2 x p2650 + p128G + pX520 + p5years) = 17340 € HT | ||||
| 		# x + 4 x (2 x p2660 + p128G + pX520 + p5years) = 19490 € HT | ||||
| 		# by examining this and the price of processors on R630 | ||||
| 		# - E5-2620v4 :   458€ | ||||
| 		# - E5-2640v4 :   951€ | ||||
| 		# - E5-2650v4 :  1209€ | ||||
| 		# - E5-2660v4 :  1525€ | ||||
| 		# - E5-2680v4 :  1867€ | ||||
| 		# - E5-2690v4 :  2261€ | ||||
| 		# I could work out that : | ||||
| 		# - the price of procs on c6320 is the price of procs on r630 * 85% | ||||
| 		# - the price of the base c6320 with 32 Go and no proc at all is 2020.6 | ||||
| 		# - the price of the 32G to 128G upgrade is 6222.6 euros (cheaper price of 16G->128G upgrade on r630 : (1778*4 = 7112)) | ||||
| 		# details : | ||||
| 		# 	>>> (19490.-17340)/8 | ||||
| 		# 	268.75 | ||||
| 		# 	>>> (17340.-15590)/8 | ||||
| 		# 	218.75 | ||||
| 		# 	>>> 218.75/258. | ||||
| 		# 	0.8478682170542635 | ||||
| 		# 	>>> 268.75/316 | ||||
| 		# 	0.8504746835443038 | ||||
| 		# 	>>> 15590.0+((1209.0-951.0)*0.85)*8 | ||||
| 		# 	17344.4 | ||||
| 		# 	>>> 15590.0+((1525.0-951.0)*0.85)*8 | ||||
| 		# 	19493.2 | ||||
| 		#   price of 128G ram upgrade assuming that 5years guarantee costs 880€ (same as c6220), | ||||
| 		# 	>>> 15590.0+((458.0-951.0)*0.85)*8-210.0*4-880.0 - 5135.0 | ||||
| 		#	6222.6 | ||||
| 		# 	>>> 5135.0 - (458.0*0.85)*8 | ||||
| 		# 	2020.6 | ||||
| 		return 2020.6 | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 880.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 0.0 * self.num_servers | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeR640(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# on 29/09/2017 | ||||
| 		#   (x: price without procs, p3106: price of Bronze-3106, p6126: price of Gold6126) | ||||
| 		#   we want to know x, given dell's web site, where we can get the price for multiple proc but not 0 | ||||
| 		#   x + p3106 = 1067.0 | ||||
| 		#   x + 2 * p3106 = 1067.0 + 320.0 | ||||
| 		#   => p3106 = 320 | ||||
| 		#   => x = 1067.0 - 320.0 = 747.0 | ||||
| 		# 	check if x computation is consistent with p6126 | ||||
| 		#   x + p6126 = 2767 | ||||
| 		#   x + 2 * p6126 = 4787.0 | ||||
| 		#   => p6126 = 2020.0 | ||||
| 		#   => x = 747.0 --> yes ! | ||||
| 		return 747.0 | ||||
| 
 | ||||
| 	def get_dimm_price(self, dimm_capacity): | ||||
| 		return { | ||||
| 			8: 80.0, | ||||
| 			16: 160.0, | ||||
| 			32: 320.0, | ||||
| 			64: 640.0 | ||||
| 		}[dimm_capacity] | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		if guarantee_duration > 7: | ||||
| 			assert False, 'guarantee of more than 7 years is not available on %s' % self.host_type_id | ||||
| 		elif guarantee_duration >= 5: | ||||
| 			return 270.0  # from dell matinfo4 online quotation | ||||
| 		else: | ||||
| 			# 5-year guarantee included in base price | ||||
| 			return 0.0 * self.num_servers | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		# Retrait des disques de base (2x600Go 10K SAS 2.5'') : -260.0 € | ||||
| 		# Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - hotplug : 165.0 € | ||||
| 		base_disks_removal_price = -260.0 | ||||
| 		disk_1200g_price = 165.0 | ||||
| 		return (base_disks_removal_price + disk_1200g_price * 2) * self.num_servers | ||||
| 
 | ||||
| 
 | ||||
| class DellPowerEdgeR940(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=4, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# price of r940 (with 2x xeon gold 5215 and 32 Go DDR4 @ 2933GHz) on 09/06/2020 : 3784€ | ||||
| 		#   (x: price without procs, p5215: price of gold-5215, p6248: price of Gold6248) | ||||
| 		#   p6240 = 2684 | ||||
| 		#   p6248 = 3442 | ||||
| 		#   p8280l = 12075 | ||||
| 		#   x + 2 * p5215 = 3784 | ||||
| 		#   x + 4 * p6240 = 11886   =>    x = 1150 | ||||
| 		#   x + 4 * p6248 = 14918   =>    x = 1150 | ||||
| 		#   x + 4 * p8280l = 49450  =>    x = 1150 | ||||
| 		#   => p5215 = 1317   (agrees with proc price on r640) | ||||
| 		return 1150.0 | ||||
| 
 | ||||
| 	def get_dimm_price(self, dimm_capacity): | ||||
| 		return { | ||||
| 			8: 80.0, | ||||
| 			16: 160.0, | ||||
| 			32: 320.0, | ||||
| 			64: 640.0 | ||||
| 		}[dimm_capacity] | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		if guarantee_duration > 7: | ||||
| 			assert False, 'guarantee of more than 7 years is not available on %s' % self.host_type_id | ||||
| 		elif guarantee_duration >= 5: | ||||
| 			return 630.0  # from dell matinfo4 online quotation | ||||
| 		else: | ||||
| 			# 5-year guarantee included in base price | ||||
| 			return 0.0 | ||||
| 
 | ||||
| 	@abstractmethod | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		# Retrait des disques de base (2x600Go 10K SAS 2.5'') : -260.0 € | ||||
| 		# Ajout d'un disque dur 1,2 To SAS 10k Tpm 2,5" - hotplug : 165.0 € | ||||
| 		base_disks_removal_price = -260.0 | ||||
| 		disk_1200g_price = 165.0 | ||||
| 		return (base_disks_removal_price + disk_1200g_price * 2) * self.num_servers | ||||
| 
 | ||||
| 
 | ||||
| class DellPrecision3630(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=1, num_servers=1) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		return 449.0 | ||||
| 
 | ||||
| 	def get_dimm_price(self, dimm_capacity): | ||||
| 		return { | ||||
| 			8: 80.0, | ||||
| 			16: 160.0, | ||||
| 			32: 320.0 | ||||
| 		}[dimm_capacity] | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		assert guarantee_duration <= 5, 'only 5 year guarantee is handled for %s' % self.host_type_id | ||||
| 		return 0.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		return 0.0 | ||||
| 
 | ||||
| class DellPowerEdgeC6420(HostType): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		super().__init__(host_type_id, num_cpu_per_server=2, num_servers=4) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		# for 4xc6420 on 19/06/2020 (from excel quotation) | ||||
| 		#  | ||||
| 		#  | ||||
| 		#   (x: price without procs, p2630: price of xeon gold 6230) | ||||
| 		# x + 4 x (2 x p4210r + p48g) =  5368 € HT | ||||
| 		# x + 4 x (2 x p6230r + p192g) = 27213 € HT | ||||
| 		#  | ||||
| 		# p48g = 3 * 160.0  # the price of a 16G ram is 160.0 € | ||||
| 		# p4210r = p4210r=978./2 # from r640 prices | ||||
| 		#  | ||||
| 
 | ||||
| 		# >>> p4210r=978./2 | ||||
| 		# >>> p6230r_upgrade = 13408.0 | ||||
| 		# >>> p6230r_for_r640 = 2165.0 | ||||
| 		# >>> num_servers_per_c6000 = 4 | ||||
| 		# >>> num_cpu_per_server = 2 | ||||
| 		# >>> p6230r_for_c6420 = (p6230r_upgrade + p4210r * (num_servers_per_c6000 * num_cpu_per_server))/(num_servers_per_c6000 * num_cpu_per_server) | ||||
| 		# >>> p6230r_for_c6420 | ||||
| 		# 2165.0 | ||||
| 
 | ||||
| 		# => p4210r seems to be the same on r640 and c6420 | ||||
| 		#  | ||||
| 		# pc6000 = 5368 - (p4210r * num_cpu_per_server + p48g) * num_servers_per_c6000 | ||||
| 		# >>> p16g = 160.0 | ||||
| 		# >>> p48g = p16g * 3 | ||||
| 		# >>> pc6000 = 5368 - (p4210r * num_cpu_per_server + p48g) * num_servers_per_c6000 | ||||
| 		# >>> pc6000 | ||||
| 		# -464.0 | ||||
| 		# >>> pc6000 + num_servers_per_c6000 * (p6230r_for_c6420 * num_cpu_per_server + p192g) | ||||
| 		# Traceback (most recent call last): | ||||
| 		#   File "<stdin>", line 1, in <module> | ||||
| 		# NameError: name 'p192g' is not defined | ||||
| 		# >>> p192g = (192/16)*p16g | ||||
| 		# >>> p192g | ||||
| 		# 1920.0 | ||||
| 		# >>> pc6000 + num_servers_per_c6000 * (p6230r_for_c6420 * num_cpu_per_server + p192g) | ||||
| 		# 24536.0 | ||||
| 		# >>> pc6000 + num_servers_per_c6000 * (p6230r_for_c6420 * num_cpu_per_server + p192g) + 1159 + 68 + 350 + 1100 | ||||
| 		# 27213.0 | ||||
| 		num_servers_per_c6000 = 4 | ||||
| 		num_cpu_per_server = 2 | ||||
| 		ram_price_per_gigabyte = 160.0 / 16 # 16G ram price : 160.0 € | ||||
| 		xeon_silver_4210r_price = 978.0 / 2 # from r640 prices | ||||
| 		basic_config_price = 5368.0 | ||||
| 		poweredge_c6000_price = basic_config_price - (xeon_silver_4210r_price * num_cpu_per_server + ram_price_per_gigabyte * 48) * num_servers_per_c6000 | ||||
| 		return poweredge_c6000_price | ||||
| 
 | ||||
| 	def get_dimm_price(self, dimm_capacity): | ||||
| 		return { | ||||
| 			8: 80.0, | ||||
| 			16: 160.0, | ||||
| 			32: 320.0, | ||||
| 			64: 640.0 | ||||
| 		}[dimm_capacity] | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		if guarantee_duration > 7: | ||||
| 			assert False, 'guarantee of more than 7 years is not available on %s' % self.host_type_id | ||||
| 		elif guarantee_duration >= 5: | ||||
| 			return 1100.0  # from c6420-20200716-price | ||||
| 		else: | ||||
| 			# 5-year guarantee included in base price | ||||
| 			return 0.0 | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		assert 1.9e12 < asked_disk_capacity < 2.1e12, 'only 2To upgrades are handled for %s' % self.host_type_id | ||||
| 		# from c6420-20200716-price | ||||
| 		# | Ajout d'un disque dur 1 To SATA 7200 Tpm 3,5'' pour les 4 serveurs                                                                                                                                                                                                        |                                         | 4-3-1-14g096         | C6420   | 361 €          |     | € -         | | ||||
| 		return 361.0 | ||||
| 
 | ||||
| def create_host_type(host_type_id): | ||||
| 	if host_type_id == 'c6420': | ||||
| 		return DellPowerEdgeC6420(host_type_id) | ||||
| 	if host_type_id == 'c6320': | ||||
| 		return DellPowerEdgeC6320(host_type_id) | ||||
| 	if host_type_id == 'c4130': | ||||
| 		return DellPowerEdgeC4130(host_type_id) | ||||
| 	if host_type_id == 'r620': | ||||
| 		return DellPowerEdgeR620(host_type_id) | ||||
| 	if host_type_id == 'r630': | ||||
| 		return DellPowerEdgeR630(host_type_id) | ||||
| 	if host_type_id == 'r640': | ||||
| 		return DellPowerEdgeR640(host_type_id) | ||||
| 	if host_type_id == 'r940': | ||||
| 		return DellPowerEdgeR940(host_type_id) | ||||
| 	if host_type_id == 'precision3630': | ||||
| 		return DellPrecision3630(host_type_id) | ||||
| 	assert False | ||||
| 
 | ||||
| class Config(): | ||||
| 
 | ||||
| 	def __init__(self, host_type_id): | ||||
| 		self.host_type = create_host_type(host_type_id) | ||||
| 
 | ||||
| 	def get_empty_price(self): | ||||
| 		return self.host_type.get_empty_price() | ||||
| 
 | ||||
| 	def get_ram_update_price(self, cpu, ram_per_core=None, ram_per_server=None, ram_per_cpu=None): | ||||
| 
 | ||||
| 		# ramUpgradePrice128Gb = { | ||||
| 		# 	'c6220':3520.0, | ||||
| 		# 	'r620':2010.0,  | ||||
| 		# 	'r630':1778.0, | ||||
| 		# 	'r640':1780.0, | ||||
| 		# 	'r730':1778.0, | ||||
| 		# 	'r940':960.0,   # 32 Gb 2933 MHz RDIMM : 320 € | ||||
| 		# 	'c6320':6222.6, | ||||
| 		# 	'c4310':1778.0, | ||||
| 		# 	'precision3630': 1536.0 } | ||||
| 		if ram_per_cpu: | ||||
| 			assert not ram_per_core | ||||
| 			assert not ram_per_server | ||||
| 		if ram_per_core: | ||||
| 			assert not ram_per_server | ||||
| 			assert not ram_per_cpu | ||||
| 			ram_per_cpu = cpu.num_cores * ram_per_core | ||||
| 		if ram_per_server: | ||||
| 			assert not ram_per_core | ||||
| 			assert not ram_per_cpu | ||||
| 			ram_per_cpu = ram_per_server / self.num_cpu_per_server | ||||
| 
 | ||||
| 		ram_per_channel = ram_per_cpu / cpu.num_ram_channels | ||||
| 		dimm_capacity = None | ||||
| 		if ram_per_channel > 64.0e9: | ||||
| 			assert False, 'ram_per_channel is too big (%f bytes > 64 Gb)' % ram_per_channel | ||||
| 		elif ram_per_channel > 32.0e9: | ||||
| 			dimm_capacity = 64 | ||||
| 		elif ram_per_channel > 16.0e9: | ||||
| 			dimm_capacity = 32 | ||||
| 		elif ram_per_channel > 8.0e9: | ||||
| 			dimm_capacity = 16 | ||||
| 		elif ram_per_channel > 4.0e9: | ||||
| 			dimm_capacity = 8 | ||||
| 		else: | ||||
| 			try: | ||||
| 				self.host_type.get_dimm_price(4) | ||||
| 				dimm_capacity = 4 | ||||
| 			except: | ||||
| 				# 4Gb dimms are not available, use 8 Gb instead | ||||
| 				dimm_capacity = 8 | ||||
| 		# print('warning : forcing dimm capacity to 16G !!!!!!') | ||||
| 		# dimm_capacity = 16 | ||||
| 		ram_price = self.num_servers * self.num_cpu_per_server * cpu.num_ram_channels * self.host_type.get_dimm_price(dimm_capacity) | ||||
| 		print("ram_price : %f € for %d dimms of %d Gb" % (ram_price, self.num_servers * self.num_cpu_per_server * cpu.num_ram_channels, dimm_capacity)) | ||||
| 		return ram_price | ||||
| 
 | ||||
| 	def get_guarantee_price(self, guarantee_duration): | ||||
| 		return self.host_type.get_guarantee_price(guarantee_duration) | ||||
| 
 | ||||
| 	def get_disk_upgrade_price(self, asked_disk_capacity): | ||||
| 		return self.host_type.get_disk_upgrade_price(asked_disk_capacity) | ||||
| 
 | ||||
| 	@property | ||||
| 	def num_servers(self): | ||||
| 		return self.host_type.num_servers | ||||
| 
 | ||||
| 	@property | ||||
| 	def num_cpu_per_server(self): | ||||
| 		return self.host_type.num_cpu_per_server | ||||
| 	 | ||||
| 
 | ||||
| 	return { | ||||
| 		'c6220':4890.0, | ||||
| 		'r620':860.0, | ||||
| 		'r630':733.0, | ||||
| 		'r640':747.0, | ||||
| 		'r730':799.0, | ||||
| 		'r940':1150.0, | ||||
| 		'c6320':2020.6, | ||||
| 		'c4310':1325.0, | ||||
| 		'precision3630':449.0 | ||||
| 		}[host_id] | ||||
| 
 | ||||
| def plotSystemEfficiency(): | ||||
| 
 | ||||
|  | @ -284,42 +690,11 @@ def plotSystemEfficiency(): | |||
| 	def GHzToMHz( frequency ): | ||||
| 		return frequency * 1000.0 | ||||
| 		 | ||||
| 		 | ||||
| 	 | ||||
| 	kWHPrice = 0.07 * 1.5 | ||||
| 	containerLifetime = 7.0 # in years | ||||
| 	powerUsageEfficiency = 0.5 | ||||
| 
 | ||||
| 	ramUpgradePrice128Gb = { | ||||
| 		'c6220':3520.0, | ||||
| 		'r620':2010.0,  | ||||
| 		'r630':1778.0, | ||||
| 		'r640':1780.0, | ||||
| 		'r730':1778.0, | ||||
| 		'r940':960.0,   # 32 Gb 2933 MHz RDIMM : 320 € | ||||
| 		'c6320':6222.6, | ||||
| 		'c4310':1778.0, | ||||
| 		'precision3630': 1536.0 } | ||||
| 	guarantee5YearsPrice = { | ||||
| 		'c6220':880.0, | ||||
| 		'r620':240.0, | ||||
| 		'r630':240.0, | ||||
| 		'r640':0.0, | ||||
| 		'r730':240.0, | ||||
| 		'r940':0.0, | ||||
| 		'c6320':880.0, | ||||
| 		'c4310':240.0, | ||||
| 		'precision3630': 0.0 } | ||||
| 	hddUpgradePrice2To = { | ||||
| 		'c6220':320.0, | ||||
| 		'r620':-20.0, | ||||
| 		'r630':0.0, | ||||
| 		'r640':70.0, | ||||
| 		'r730':0.0, | ||||
| 		'r940':70.0, | ||||
| 		'c6320':0.0, | ||||
| 		'c4310':0.0, | ||||
| 		'precision3630': 0.0} | ||||
| 
 | ||||
| 	 | ||||
| 	def getColorCodeFromItemLabel(label): | ||||
| 		generation=label[-1] | ||||
|  | @ -353,6 +728,7 @@ def plotSystemEfficiency(): | |||
| 			'r940': 0.8, | ||||
| 			'c6220': 1.0, | ||||
| 			'c6320': 1.0, | ||||
| 			'c6420': 1.0, | ||||
| 			'precision3630': 0.2 | ||||
| 			}[model] | ||||
| 		value = 0.9 | ||||
|  | @ -369,39 +745,35 @@ def plotSystemEfficiency(): | |||
| 	itemLabel = numpy.array([]) | ||||
| 	itemGeneration = numpy.array([]) | ||||
| 	for hostTypeId, procId, procOptionPrice in zip(dellPriceTable['host_type_id'], dellPriceTable['proc_id'], dellPriceTable['proc_option_price']): | ||||
| 		#print(hostTypeId) | ||||
| 		print(hostTypeId, procId) | ||||
| 		#if hostTypeId == 'r630': | ||||
| 		#	continue | ||||
| 		proc_arch = get_proc_architecture(procId) | ||||
| 		if not proc_arch in ['coffeelake', 'skylake','cascadelake']: | ||||
| 		cpu = Cpu(procId) | ||||
| 		if not cpu.architecture in ['coffeelake', 'skylake','cascadelake']: | ||||
| 			continue | ||||
| 		 | ||||
| 		config = Config(hostTypeId) | ||||
| 
 | ||||
| 		itemGeneration = procId[-1] | ||||
| 		 | ||||
| 		itemLabel = numpy.append( itemLabel, hostTypeId + '_' + procId ) | ||||
| 		itemPrice = numpy.append( itemPrice, procOptionPrice + get_system_base_price(hostTypeId) + ramUpgradePrice128Gb[hostTypeId] + guarantee5YearsPrice[hostTypeId] + hddUpgradePrice2To[hostTypeId] ) | ||||
| 		if hostTypeId == 'c6220' or hostTypeId == 'c6320' : | ||||
| 			numServersPerContainer = 4 | ||||
| 		else: | ||||
| 			numServersPerContainer = 1 | ||||
| 		for id, clock, numCores, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']): | ||||
| 			if id == procId: | ||||
| 				# print('found '+procId) | ||||
| 				break | ||||
| 		assert id == procId, 'Failed to find %s in cputable' % procId | ||||
| 		#print(tdp) | ||||
| 		if hostTypeId == 'precision3630': | ||||
| 			numProcsPerServer = 1 | ||||
| 		elif hostTypeId in ['r940']: # re.match('r9[0-9]0', hostTypeId): | ||||
| 			numProcsPerServer = 4 | ||||
| 		else: | ||||
| 			numProcsPerServer = 2 | ||||
| 		print(hostTypeId, numProcsPerServer) | ||||
| 		itemPowerConsumption = numpy.append( itemPowerConsumption, (tdp*numProcsPerServer+serverBasePowerConsumption)*numServersPerContainer ) | ||||
| 		print('procOptionPrice', procOptionPrice) | ||||
| 		config_price = procOptionPrice | ||||
| 		config_price += config.get_empty_price() | ||||
| 		print('config.get_empty_price()', config.get_empty_price()) | ||||
| 		ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_core=6.0e9) | ||||
| 		# ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_server=192.0e9) | ||||
| 		# ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_cpu=96.0e9) | ||||
| 		print('ram_update_price', ram_update_price) | ||||
| 		config_price += ram_update_price | ||||
| 		config_price += config.get_guarantee_price(5) | ||||
| 		print('config.config.get_guarantee_price(5)', config.get_guarantee_price(5)) | ||||
| 		config_price += config.get_disk_upgrade_price(2.0e12) | ||||
| 		print('config.get_disk_upgrade_price(2.0e12)', config.get_disk_upgrade_price(2.0e12)) | ||||
| 		itemPrice = numpy.append( itemPrice, config_price ) | ||||
| 		itemPowerConsumption = numpy.append( itemPowerConsumption, (cpu.tdp * config.num_cpu_per_server+serverBasePowerConsumption) * config.num_servers ) | ||||
| 		# print(hostTypeId, procId, itemPowerConsumption[-1]) | ||||
| 		itemSpeed = numpy.append( itemSpeed, num_dp_flop_per_cycle(procId)*clock*1.e9*numCores*numProcsPerServer*numServersPerContainer) | ||||
| 		#itemSpeed = numpy.append( itemSpeed, GHzToMHz(clock)*numCores*numProcsPerServer*numServersPerContainer) | ||||
| 		#itemSpeed = numpy.append( itemSpeed, cpumark * numProcsPerServer*numServersPerContainer ) | ||||
| 		itemSpeed = numpy.append( itemSpeed, cpu.num_dp_flop_per_cycle * cpu.clock * 1.e9 * cpu.num_cores * config.num_cpu_per_server * config.num_servers) | ||||
| 
 | ||||
| 	#pylab.plot(x, y, '+') | ||||
| 	#pylab.xlabel('speed/price ratio [core.MHz/euros]') | ||||
|  | @ -466,9 +838,9 @@ def plotSystemEfficiency(): | |||
| 			marker = get_marker_from_label( label ) | ||||
| 			#print(x1, y1) | ||||
| 			plt.scatter( x1, y1, facecolors = color, s = markerSize, marker = marker[0], label = label) | ||||
| 			if y1 > 5.7e16: | ||||
| 			if y1 > 5.0e16: | ||||
| 				plt.annotate( u'%s' % label,  | ||||
| 					xy = (x1, y1), xytext = (x1*4.0, (y1-5.5e16)*7.1), | ||||
| 					xy = (x1, y1), xytext = (x1*4.0, (y1-5.2e16)*7.1), | ||||
| 					textcoords = 'data', ha = 'right', va = 'bottom', | ||||
| 					bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5), | ||||
| 					arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0')) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue