9 votes

ralentissement étrange des allocations C++

Quelqu'un pourrait-il me dire pourquoi les choses suivantes peuvent se produire ?

J'ai 2 ordinateurs :

  1. mon ordinateur de travail
  2. Serveur

Je maintiens un programme C++ (msvc 2005 c++ compilé) qui fonctionne trop lentement uniquement sur le serveur, mais pas sur mon ordinateur.

J'ai effectué des mesures (GetThreadTimes et ainsi de suite) et pourrait certainement dire que l'endroit étroit - son allocation de mémoire (new/malloc). Et cela ne se produit que sur le serveur !

Je pourrais prétendre que cela se produit en raison de la fragmentation de la mémoire à cause de La première fois que l'instance serveur du programme fonctionne bien, elle commence à perdre du temps. sur les allocations seulement après que les données aient été rechargées en mémoire (1-1.5 millions d'allocations/frees).

Je ne serais pas si surpris de voir le même comportement dû à la mémoire mémoire sur les deux ordinateurs (mon ordinateur et le serveur). mais ce que je vois est : 1). sur mon ordinateur, les allocations prennent ~5% du temps (pas exactement mais quelque chose comme ça) 2). sur le serveur, ces allocations prennent ~75% du temps.

comment cela a pu arriver ? Qu'est-ce qui pourrait ralentir les allocations C++ sur l'ordinateur du serveur, alors qu'elles sont correctes sur ma station de travail. Quelle est la différence ? Probablement quelque chose de lié aux fonctions de gestion de la mémoire au niveau du système d'exploitation ? car le gestionnaire de niveau C++ est le même dans les deux cas.

Voici les deux configurations :

1). Mon ordinateur (où les allocations prennent ~5%) :

OS Name:                   Microsoft Windows 7 Enterprise 
OS Version:                6.1.7600 N/A Build 7600
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Workstation
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Original Install Date:     16/09/2011, 19:37:43
System Boot Time:          05/04/2013, 11:58:11
System Model:              7304A58
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2642 Mhz
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume2
System Locale:             ru;Russian
Input Locale:              en-us;English (United States)
Total Physical Memory:     4,061 MB
Available Physical Memory: 872 MB
Virtual Memory: Max Size:  8,121 MB
Virtual Memory: Available: 4,579 MB
Virtual Memory: In Use:    3,542 MB
Page File Location(s):     C:\pagefile.sys

2). Serveur (où les allocations prennent ~75%) :

OS Name:                   Microsoft(R) Windows(R) Server 2003, Enterprise Edition
OS Version:                5.2.3790 Service Pack 2 Build 3790
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Server
OS Build Type:             Multiprocessor Free
Original Install Date:     11/12/2008, 01:22:57
System Up Time:            1 Days, 8 Hours, 35 Minutes, 52 Seconds
System Manufacturer:       HP
System Model:              ProLiant BL685c G5  
System Type:               X86-based PC
Processor(s):              4 Processor(s) Installed.
                           [01]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
                           [02]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
                           [03]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
                           [04]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz
Windows Directory:         C:\WINNT
System Directory:          C:\WINNT\system32
Boot Device:               \Device\HarddiskVolume1
Total Physical Memory:     65,534 MB
Available Physical Memory: 61,284 MB
Page File: Max Size:       97,696 MB
Page File: Available:      93,445 MB
Page File: In Use:         4,251 MB
Page File Location(s):     C:\pagefile.sys
                           D:\pagefile1\pagefile.sys
                           D:\pagefile2\pagefile.sys
                           D:\pagefile3\pagefile.sys
                           D:\pagefile4\pagefile.sys
                           D:\pagefile5\pagefile.sys
                           D:\pagefile6\pagefile.sys
                           D:\pagefile7\pagefile.sys

Je vous serais reconnaissant de bien vouloir clarifier cette question.

4voto

Quonux Points 2166

Le problème pourrait être que les fonctions de mémoire utilisent un seul mutex pour verrouiller la mémoire pour l'allocation et la libération.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X