•  
      request #22563 [Performances] preload Tuleap files
    Infos
    #22563
    Manuel Vacelet (vaceletm)
    2023-02-24 11:15
    2021-07-22 17:20
    24131
    Details
    [Performances] preload Tuleap files

    A sheer amount of time is spent at each request to load files to run them.

    Since PHP 7.4, there is a PHP mechanism called preloading that will load files at php-fpm (php application server) start and never load them again.

    This has an impact on the memory (because the loaded files are permanently there) as well as with attempt to do hacky stuff on target server (once a file is preloaded, you must restart php-fpm to reload it).

    The performance impact is neverthless interesting. On a dev server (composer prod mode, no xdebug, sessions in redis), mesured with blackfire:

    • HomePage:
      • Reference: 114ms
      • Preload of Core: 92.9ms (-19%)
    • One Artifact:
      • Reference: 345ms
      • Preload of Core: 278ms (-19%)
    • On tracker report with ~15 artifacts:
      • Reference: 288ms
      • Preload of Core: 253ms (-12%)
    • REST milestones Route:
      • Reference: 305ms
      • Preload of Core: 233ms (-23%)

    Preload of core means:

    • most of src/common
    • cherry-picked parts of src/vendor

    The figures with Core are already quite interesting, esp. when dealing with pages and resources in plugins (more benefit can be expected with preloading of plugins)

    Empty
    Empty
    Empty
    • [x] enhancement
    • [ ] internal improvement
    Empty
    Stage
    Manuel Vacelet (vaceletm)
    Declined
    2023-02-24
    Attachments
    Empty
    References

    Follow-ups

    User avatar

    Was never put in production and crash with PHP 8.1. Declined


    • Status changed from Under implementation to Declined
    • Close date set to 2023-02-24
    User avatar

    Another one at project creation:

    2021/07/29 13:11:57 [error] 89464#89464: *17 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function forum_create_forum() in /usr/share/tuleap/src/common/Project/ProjectCreator.class.php:562
    Stack trace:
    #0 /usr/share/tuleap/src/common/Project/ProjectCreator.class.php(395): ProjectCreator->initForumModuleFromTemplate()
    #1 /usr/share/tuleap/src/common/Project/ProjectCreator.class.php(785): ProjectCreator->createProject()
    #2 /usr/share/tuleap/src/common/Project/ProjectXMLImporter.class.php(304): ProjectCreator->processProjectCreation()
    #3 /usr/share/tuleap/src/common/Project/ProjectXMLImporter.class.php(234): ProjectXMLImporter->createProject()
    #4 /usr/share/tuleap/src/common/Project/REST/v1/RestProjectCreator.php(127): ProjectXMLImporter->importWithProjectData()
    #5 /usr/share/tuleap/src/common/Project/REST/v1/RestProjectCreator.php(85): Tuleap\Project\REST\v1\RestProjectCreator->createProjectWithSelectedTemplate()
    #6 /usr/share/tuleap/src/common/Project/REST/v1/ProjectResource.class.php(326): Tuleap\Project\REST\v1\RestProje" while reading response header from upstream, client: 172.19.0.6, server: tuleap.example.com, request: "POST /api/projects HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "tuleap.example.com", referrer: "https://tuleap.example.com/project/new-information"
    
    User avatar

    For the record errors pops up in the logs

    FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function news_read_permissions() in /usr/share/tuleap/src/common/News/Admin/NewsRetriever.php:63#012Stack trace:#012#0 /usr/share/tuleap/src/common/News/Admin/NewsRetriever.php(43): Tuleap\News\Admin\NewsRetriever->getWaitingPublicationNews()#012#1 /usr/share/tuleap/src/common/admin/AdminSidebarPresenterBuilder.php(119): Tuleap\News\Admin\NewsRetriever->countPendingNews()#012#2 /usr/share/tuleap/src/common/admin/AdminSidebarPresenterBuilder.php(66): Tuleap\Admin\AdminSidebarPresenterBuilder->pendingNewsCount()#012#3 /usr/share/tuleap/src/common/admin/AdminPageRenderer.php(93): Tuleap\Admin\AdminSidebarPresenterBuilder->build()#012#4 /usr/share/tuleap/src/common/admin/AdminPageRenderer.php(78): Tuleap\Admin\AdminPageRenderer->getAdminSidebarPresenter()#012#5 /usr/share/tuleap/src/common/admin/AdminPageRenderer.php(44): Tuleap\Admin\AdminPageRenderer->renderSideBar()#012#6 /usr/share/tuleap/src/www/admin/index.php(280): Tuleap\Admin\AdminPageRenderer->header(" while reading response header from upstream