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-8280 39900
|
||||||
r940 Platinum-8280L 48300
|
r940 Platinum-8280L 48300
|
||||||
|
|
||||||
|
c6420 Silver-4210R 3912
|
||||||
|
c6420 Gold-6230R 17320
|
||||||
|
|
||||||
|
|
||||||
precision3630 core-i7-8700k 190
|
precision3630 core-i7-8700k 190
|
||||||
|
|
||||||
|
|
||||||
|
|
790
procs_chooser.py
790
procs_chooser.py
|
@ -7,6 +7,7 @@ import itertools
|
||||||
import re
|
import re
|
||||||
import hashlib
|
import hashlib
|
||||||
from string import ascii_lowercase
|
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', '|', '_']
|
markerTypes=[',', '+', '.', '^', 'v', '<', '>', 'o', '*', '1', '2', '3', '4', '8', 's', 'p', 'h', 'H', 'x', 'X', 'D', 'd', '|', '_']
|
||||||
#for c in ascii_lowercase:
|
#for c in ascii_lowercase:
|
||||||
|
@ -50,39 +51,89 @@ def plotCpuPassmark():
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
def get_proc_architecture(proc_id):
|
class Cpu():
|
||||||
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
|
|
||||||
|
|
||||||
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 {
|
return {
|
||||||
'woodcrest':65,
|
'woodcrest':65,
|
||||||
'harpertown':45,
|
'harpertown':45,
|
||||||
|
@ -95,7 +146,7 @@ def get_proc_arch_transistor_size(proc_arch):
|
||||||
'skylake':14,
|
'skylake':14,
|
||||||
'coffeelake':14,
|
'coffeelake':14,
|
||||||
'cascadelake':14
|
'cascadelake':14
|
||||||
}[get_proc_architecture(proc_arch)]
|
}[get_proc_architecture(proc_id)]
|
||||||
|
|
||||||
def simd_id_to_dp_flops_per_cycle(simd_id):
|
def simd_id_to_dp_flops_per_cycle(simd_id):
|
||||||
"""
|
"""
|
||||||
|
@ -145,127 +196,482 @@ def get_simd_id(proc_arch):
|
||||||
'coffeelake':'avx2'
|
'coffeelake':'avx2'
|
||||||
}[proc_arch]
|
}[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 ):
|
class HostType():
|
||||||
# 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 !
|
|
||||||
|
|
||||||
# price of r940 (with 2x xeon gold 5215 and 32 Go DDR4 @ 2933GHz) on 09/06/2020 : 3784€
|
def __init__(self, host_type_id, num_cpu_per_server, num_servers=1):
|
||||||
# (x: price without procs, p5215: price of gold-5215, p6248: price of Gold6248)
|
self.host_type_id = host_type_id
|
||||||
# p6240 = 2684
|
self.num_cpu_per_server = num_cpu_per_server
|
||||||
# p6248 = 3442
|
self.num_servers = num_servers
|
||||||
# p8280l = 12075
|
|
||||||
# x + 2 * p5215 = 3784
|
@abstractmethod
|
||||||
# x + 4 * p6240 = 11886 => x = 1150
|
def get_empty_price(self):
|
||||||
# x + 4 * p6248 = 14918 => x = 1150
|
pass
|
||||||
# x + 4 * p8280l = 49450 => x = 1150
|
|
||||||
# => p5215 = 1317 (agrees with proc price on r640)
|
@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():
|
def plotSystemEfficiency():
|
||||||
|
|
||||||
|
@ -284,42 +690,11 @@ def plotSystemEfficiency():
|
||||||
def GHzToMHz( frequency ):
|
def GHzToMHz( frequency ):
|
||||||
return frequency * 1000.0
|
return frequency * 1000.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
kWHPrice = 0.07 * 1.5
|
kWHPrice = 0.07 * 1.5
|
||||||
containerLifetime = 7.0 # in years
|
containerLifetime = 7.0 # in years
|
||||||
powerUsageEfficiency = 0.5
|
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):
|
def getColorCodeFromItemLabel(label):
|
||||||
generation=label[-1]
|
generation=label[-1]
|
||||||
|
@ -353,6 +728,7 @@ def plotSystemEfficiency():
|
||||||
'r940': 0.8,
|
'r940': 0.8,
|
||||||
'c6220': 1.0,
|
'c6220': 1.0,
|
||||||
'c6320': 1.0,
|
'c6320': 1.0,
|
||||||
|
'c6420': 1.0,
|
||||||
'precision3630': 0.2
|
'precision3630': 0.2
|
||||||
}[model]
|
}[model]
|
||||||
value = 0.9
|
value = 0.9
|
||||||
|
@ -369,39 +745,35 @@ def plotSystemEfficiency():
|
||||||
itemLabel = numpy.array([])
|
itemLabel = numpy.array([])
|
||||||
itemGeneration = numpy.array([])
|
itemGeneration = numpy.array([])
|
||||||
for hostTypeId, procId, procOptionPrice in zip(dellPriceTable['host_type_id'], dellPriceTable['proc_id'], dellPriceTable['proc_option_price']):
|
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':
|
#if hostTypeId == 'r630':
|
||||||
# continue
|
# continue
|
||||||
proc_arch = get_proc_architecture(procId)
|
cpu = Cpu(procId)
|
||||||
if not proc_arch in ['coffeelake', 'skylake','cascadelake']:
|
if not cpu.architecture in ['coffeelake', 'skylake','cascadelake']:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
config = Config(hostTypeId)
|
||||||
|
|
||||||
itemGeneration = procId[-1]
|
itemGeneration = procId[-1]
|
||||||
|
|
||||||
itemLabel = numpy.append( itemLabel, hostTypeId + '_' + procId )
|
itemLabel = numpy.append( itemLabel, hostTypeId + '_' + procId )
|
||||||
itemPrice = numpy.append( itemPrice, procOptionPrice + get_system_base_price(hostTypeId) + ramUpgradePrice128Gb[hostTypeId] + guarantee5YearsPrice[hostTypeId] + hddUpgradePrice2To[hostTypeId] )
|
print('procOptionPrice', procOptionPrice)
|
||||||
if hostTypeId == 'c6220' or hostTypeId == 'c6320' :
|
config_price = procOptionPrice
|
||||||
numServersPerContainer = 4
|
config_price += config.get_empty_price()
|
||||||
else:
|
print('config.get_empty_price()', config.get_empty_price())
|
||||||
numServersPerContainer = 1
|
ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_core=6.0e9)
|
||||||
for id, clock, numCores, tdp, cpumark in zip(cpuTable['id'], cpuTable['clock'], cpuTable['num_cores'], cpuTable['tdp'], cpuTable['cpumark_1_cpu']):
|
# ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_server=192.0e9)
|
||||||
if id == procId:
|
# ram_update_price = config.get_ram_update_price(cpu=cpu, ram_per_cpu=96.0e9)
|
||||||
# print('found '+procId)
|
print('ram_update_price', ram_update_price)
|
||||||
break
|
config_price += ram_update_price
|
||||||
assert id == procId, 'Failed to find %s in cputable' % procId
|
config_price += config.get_guarantee_price(5)
|
||||||
#print(tdp)
|
print('config.config.get_guarantee_price(5)', config.get_guarantee_price(5))
|
||||||
if hostTypeId == 'precision3630':
|
config_price += config.get_disk_upgrade_price(2.0e12)
|
||||||
numProcsPerServer = 1
|
print('config.get_disk_upgrade_price(2.0e12)', config.get_disk_upgrade_price(2.0e12))
|
||||||
elif hostTypeId in ['r940']: # re.match('r9[0-9]0', hostTypeId):
|
itemPrice = numpy.append( itemPrice, config_price )
|
||||||
numProcsPerServer = 4
|
itemPowerConsumption = numpy.append( itemPowerConsumption, (cpu.tdp * config.num_cpu_per_server+serverBasePowerConsumption) * config.num_servers )
|
||||||
else:
|
|
||||||
numProcsPerServer = 2
|
|
||||||
print(hostTypeId, numProcsPerServer)
|
|
||||||
itemPowerConsumption = numpy.append( itemPowerConsumption, (tdp*numProcsPerServer+serverBasePowerConsumption)*numServersPerContainer )
|
|
||||||
# print(hostTypeId, procId, itemPowerConsumption[-1])
|
# 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, cpu.num_dp_flop_per_cycle * cpu.clock * 1.e9 * cpu.num_cores * config.num_cpu_per_server * config.num_servers)
|
||||||
#itemSpeed = numpy.append( itemSpeed, GHzToMHz(clock)*numCores*numProcsPerServer*numServersPerContainer)
|
|
||||||
#itemSpeed = numpy.append( itemSpeed, cpumark * numProcsPerServer*numServersPerContainer )
|
|
||||||
|
|
||||||
#pylab.plot(x, y, '+')
|
#pylab.plot(x, y, '+')
|
||||||
#pylab.xlabel('speed/price ratio [core.MHz/euros]')
|
#pylab.xlabel('speed/price ratio [core.MHz/euros]')
|
||||||
|
@ -466,9 +838,9 @@ def plotSystemEfficiency():
|
||||||
marker = get_marker_from_label( label )
|
marker = get_marker_from_label( label )
|
||||||
#print(x1, y1)
|
#print(x1, y1)
|
||||||
plt.scatter( x1, y1, facecolors = color, s = markerSize, marker = marker[0], label = label)
|
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,
|
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',
|
textcoords = 'data', ha = 'right', va = 'bottom',
|
||||||
bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5),
|
bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5),
|
||||||
arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0'))
|
arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0'))
|
||||||
|
|
Loading…
Reference in New Issue