Drupal 9.5.0 Profiling
This compares profiling of the same code base running Drupal 9.4.9 and 9.5.0. Profiling was done locally using xhprof
. All Drupal caches were cleared when switching drupal core versions.
The totals are averages from 3 runs of each test case. The call stack is ordered by descending wall time and taken from just one run that I thought described the average order.
The biggest thing that stands out to me is the time spent running Container::getServiceIdMappings
and Container::generateServiceIdHash
. Also, the number of calls to DefaultPluginManager::cacheSet
went up on the cold start.
Cold Start - Home Page
Drupal 9.4.9
Total Time |
12s |
Total Calls |
2.8 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Core\Entity\EntityFieldManager::cacheSet |
221 |
1.8s |
15.7% |
Drupal\Core\Config\ConfigFactory::loadMultiple |
1,101 |
620ms |
5.2% |
Drupal\views\Plugin\views\display\DisplayPluginBase::initDisplay |
369 |
590ms |
5.0% |
Drupal\Core\Plugin\DefaultPluginManager::cacheSet |
34 |
570ms |
4.8% |
Drupal 9.5.0
Total Time |
40s |
Total Calls |
28.1 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Component\DependencyInjection\Container::getServiceIdMappings |
17,774 |
14.5s |
36.3% |
Drupal\Component\DependencyInjection\Container::generateServiceIdHash |
7,109,986 |
9.8s |
24.5% |
Drupal\Component\DependencyInjection\Container::initialized |
18,164,456 |
2.5s |
6.2% |
Drupal\Core\Plugin\DefaultPluginManager::cacheSet |
221 |
1.9s |
4.7% |
Total Time |
26s |
Total Calls |
15.8 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Component\DependencyInjection\Container::getServiceIdMappings |
9,265 |
7.8s |
29.0% |
Drupal\Component\DependencyInjection\Container::generateServiceIdHash |
3,700,939 |
5.3s |
19.8% |
Drupal\Core\Plugin\DefaultPluginManager::cacheSet |
34 |
1.8s |
7.0% |
Drupal\Component\DependencyInjection\Container::initialized |
18,164,456 |
1.3s |
5.0% |
Total Time |
11.3s |
Total Calls |
2.6 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Core\Entity\EntityFieldManager::cacheSet |
221 |
1.8s |
16.2% |
Drupal\Core\Plugin\DefaultPluginManager::cacheSet |
34 |
665ms |
5.9% |
Drupal\Core\Config\ConfigFactory::loadMultiple |
1,101 |
576ms |
5.1% |
Drupal\views\Plugin\views\display\DisplayPluginBase::initDisplay |
369 |
561ms |
4.9% |
Uncached General Page
Drupal 9.4.9
Total Time |
7.2s |
Total Calls |
2.3 million |
Function Name |
Calls |
Excl. Time |
% Time |
GuzzleHttp\Handler\CurlHandler::__invoke |
4 |
980ms |
13.8% |
Drupal\Core\Entity\ContentEntityStorageBase::setPersistentCache |
138 |
613ms |
8.6% |
Drupal\Core\Url::toString |
3,129 |
362ms |
5.1% |
Drupal\Core\Entity\Sql\SqlContentEntityStorage::loadFromDedicatedTables |
151 |
325ms |
4.6% |
Drupal 9.5.0
Total Time |
14.5s |
Total Calls |
2.3 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Core\Plugin\Context\ContextDefinition::__sleep |
9,421 |
6.9s |
34.1% |
GuzzleHttp\Handler\CurlHandler::__invoke |
4 |
971ms |
8.1% |
Drupal\Core\Entity\ContentEntityStorageBase::setPersistentCache |
138 |
670ms |
5.8% |
Drupal\Core\Entity\EntityBase::traitSleep |
657 |
637ms |
3.6% |
Total Time |
11s |
Total Calls |
2.4 million |
Function Name |
Calls |
Excl. Time |
% Time |
Drupal\Core\Plugin\Context\ContextDefinition::__sleep |
9,421 |
3.8s |
34.3% |
GuzzleHttp\Handler\CurlHandler::__invoke |
4 |
880ms |
7.9% |
Drupal\Core\Entity\ContentEntityStorageBase::setPersistentCache |
138 |
640ms |
5.8% |
Drupal\Core\Url::toString |
3,129 |
390ms |
3.3% |
Total Time |
7.5s |
Total Calls |
2.4 million |
Function Name |
Calls |
Excl. Time |
% Time |
GuzzleHttp\Handler\CurlHandler::__invoke |
4 |
867ms |
11.4% |
Drupal\Core\Entity\ContentEntityStorageBase::setPersistentCache |
138 |
665ms |
8.8% |
Drupal\Core\Url::toString |
3,129 |
370ms |
4.9% |
Drupal\Core\Entity\Sql\SqlContentEntityStorage::loadFromDedicatedTables |
151 |
366ms |
4.8% |