Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JIT: E eu com isso?

JIT: E eu com isso?

Das novidades do PHP 8, certamente a que inspira mais expectativas é o JIT. Depois do ganho massivo de performance do PHP 7, conseguiremos repetir a dose? Vem ver conosco o que é, pra que serve e como funciona o Just In Time e descobrir se ele vai fazer alguma diferença na sua vida.

Ricardo Coelho

December 03, 2020
Tweet

More Decks by Ricardo Coelho

Other Decks in Technology

Transcript

  1. Ricardo Coelho – @ramcoelho
    JIT no PHP
    E eu com isso?

    View full-size slide

  2. JIT no PHP
    E eu com isso?

    View full-size slide

  3. opcache
    ARM
    MIPS
    X86

    View full-size slide

  4. Otimizações
    Análise de Escape

    View full-size slide

  5. $newVariable = ‘undefined’;
    if ($isTrue) {
    $newVarible = ‘true’;
    } else {
    $newVariable = ‘false’;
    }
    Otimizações (DCE)
    $newVariable = ‘false’;
    if ($isTrue) {
    $newVarible = ‘true’;
    }

    View full-size slide

  6. function f($x) {
    $a = 15;
    $b = 5 * $a;
    return $x;
    }
    echo f(“teste”);
    Otimizações
    echo “teste”;

    View full-size slide

  7. 200% Drupal
    300% Magento
    400% Wordpress
    5 ➞ 7
    fonte: www.zend.com/blog/php-7

    View full-size slide

  8. Então você atualizou
    para o PHP 7 e seu
    sistema ficou muito
    mais rápido?
    Parabéns, seu
    código é uma
    porcaria.

    View full-size slide

  9. ust n ime
    J I T

    View full-size slide

  10. https://youtu.be/dWH65pmnsrI

    View full-size slide

  11. 01 02
    03 echo “Olá Mundo!”;
    0000000 cf fa ed fe 07 00 00 01 03 00 00 00 02 00 00 00
    0000010 10 00 00 00 58 05 00 00 85 00 20 00 00 00 00 00
    0000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45
    0000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    (…)
    000c0f0 5f 73 74 75 62 5f 62 69 6e 64 65 72 00 5f 5f 64
    000c100 79 6c 64 5f 70 72 69 76 61 74 65 00 00 00 00 00

    View full-size slide

  12. Interpretado
    vs.
    Compilado

    View full-size slide

  13. Monitor / Profiler

    View full-size slide

  14. Código Morno

    View full-size slide

  15. Otimização de
    Código Quente

    View full-size slide

  16. opcache
    ARM
    MIPS
    X86

    View full-size slide

  17. opcache
    ARM
    MIPS
    X86
    jit

    View full-size slide

  18. docker run --rm php:8.0.0-cli php -v
    Vamos testar…

    View full-size slide

  19. docker run --rm -it php:8.0.0-cli bash
    Vamos testar…

    View full-size slide

  20. @host$ docker run --rm -it php:8.0.0-cli bash
    @php8$ echo “@php8$ docker-php-ext-enable opcache
    @php8$ echo “Vamos testar…

    View full-size slide

  21. @host$ wget https://bit.ly/jit-eu-com-isso
    @host$ unzip jit-eu-com-isso
    @host$ cd jit-eu-com-isso-1.0
    @host$ docker run --rm -it -p 80:80
    -v $(pwd)/php.ini:/usr/local/etc/php/php.ini
    -v $(pwd):/app
    php:8.0.0-cli bash
    Vamos testar…

    View full-size slide

  22. @php8$ php /app/run.php
    @php8$ php -S 0.0.0.0:80 -t /app
    @host$ ab -n 40 -c 20 -l http://localhost/run.php
    @php8$ docker-php-ext-enable opcache
    @host$ ab -n 40 -c 20 -l http://localhost/run.php
    Vamos testar…

    View full-size slide

  23. Resultado
    Concurrency Level: 20
    Time taken for tests: 77.639 seconds
    Complete requests: 40
    Failed requests: 0
    Total transferred: 252800 bytes
    HTML transferred: 246520 bytes
    Requests per second: 0.52 [#/sec] (mean)
    Time per request: 38819.662 [ms]
    (mean)
    Time per request: 1940.983 [ms]
    (mean, across all concurrent requests)
    Transfer rate: 3.18 [Kbytes/sec]
    received
    Concurrency Level: 20
    Time taken for tests: 7.673 seconds
    Complete requests: 40
    Failed requests: 0
    Total transferred: 252800 bytes
    HTML transferred: 246520 bytes
    Requests per second: 5.21 [#/sec] (mean)
    Time per request: 3836.614 [ms]
    (mean)
    Time per request: 191.831 [ms]
    (mean, across all concurrent requests)
    Transfer rate: 32.17 [Kbytes/sec]
    received
    JIT

    View full-size slide

  24. fonte: www.php.net/releases/8.0/en.php

    View full-size slide

  25. Tipos, DOM e a
    expectativa frustrada
    (failed guard)

    View full-size slide

  26. Desotimização
    (bailout)

    View full-size slide

  27. I/O bound?
    Pouca repetição?
    Ciclo de vida curto?
    ➞ Aplicações Web

    View full-size slide

  28. Vale a pena?

    View full-size slide

  29. • Você desenvolve extensões para o PHP e prefere
    desenvolvê-las em PHP, ao invés de usar C;

    • Seu código usa muita CPU;

    • Seu código é tipado e possui estruturas estáveis e bem
    definidas;

    • Você quer espremer até a última gota de performance.
    Vale a pena se…

    View full-size slide

  30. Perguntas?
    Obrigado!

    View full-size slide

  31. • https://wiki.php.net/rfc/jit

    • https://stitcher.io/blog/new-in-php-8

    • https://stitcher.io/blog/php-jit

    • https://stitcher.io/blog/jit-in-real-life-web-applications

    • https://kinsta.com/pt/blog/php-8/

    • https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/

    • https://github.com/mente/php-docker-jit

    • https://mobile.twitter.com/dr4goonis/status/806817526097346560

    Referências

    View full-size slide