Executando o YJIT do Ruby 3.2 em Produção no Discourse

Na Discourse, temos o maior interesse em adotar o YJIT desde que a equipe de Infraestrutura do Ruby on Rails da Shopify o declarou pronto para produção. Após testemunhar benchmarks locais promissores, começamos a executar nossas aplicações Rails de produção com o YJIT do Ruby 3.2 ativado em clusters selecionados no início de maio de 2023. Em seguida, passamos algum tempo medindo seu desempenho no mundo real. Estamos entusiasmados em compartilhar os resultados positivos que observamos. Com base nessas descobertas, agora ativamos o YJIT em toda a nossa hospedagem, e os auto-hospedeiros podem optar por fazer o mesmo.


Este é um tópico de discussão complementar para a entrada original em https://blog.discourse.org/2023/05/running-ruby-3-2s-yjit-in-production-at-discourse/
21 curtidas

Começamos a fazer benchmark do Discourse+YJIT desde novembro de 2022 e começamos a rodar o Meta com YJIT intermitentemente desde janeiro deste ano. O YJIT é um dos motivos pelos quais aceleramos a atualização do Ruby 2.7 para o Ruby 3.2 em poucos meses e estou muito feliz que finalmente chegou. E ainda mais porque as melhorias que chegarão para o Ruby 3.3 parecem ainda melhores!

14 curtidas

O desenvolvimento que Ruby está recebendo é bastante impressionante… Pensei que todas as crianças legais estavam no Python hoje em dia?! :sweat_smile:

Parabéns à Equipe por acompanhar o roteiro do Ruby.

12 curtidas

Provavelmente uma pergunta estúpida, mas o “arquivo de definição do contêiner” é o arquivo app.yml? Nunca ouvi ser chamado assim antes. Obrigado!

3 curtidas

Sim, é isso. Usamos o nome completo, pois algumas pessoas podem renomear ou ter vários arquivos “app.yml”.

5 curtidas

Seria muito interessante uma comparação entre Ruby 2.7 e 3.2 com JIT!

2 curtidas

Das minhas anotações de 4 de janeiro:

Executei novamente agora

Ruby Servidor p categorias início tópico usuário de categorias usuário de início usuário de tópico administrador de categorias administrador de início administrador de tópico
2.7.5 Unicorn 50 34 59 36 82 112 93 67 94 72
3.1.2 Unicorn 50 34 61 36 82 112 91 67 94 70
3.2.0 Unicorn 50 33 59 36 82 111 90 68 92 72
3.2.0 +YJIT Unicorn 50 25 42 29 67 89 77 58 76 56

Aceleração de 2.7 para 3.2 + YJIT

Aceleração categorias início tópico usuário de categorias usuário de início usuário de tópico administrador de categorias administrador de início administrador de tópico
1.36 1.40 1.24 1.22 1.25 1.20 1.15 1.23 1.28

7 curtidas

E sem quaisquer dados medidos e com base no que um ou poucos usuários sentem e veem.

Para mim, este fórum está mais lento há algum tempo. Vejo um círculo giratório por um breve momento quase toda vez que abro um tópico. Claro, isso pode e quase certamente vem dos servidores e das distâncias entre os EUA e a Europa. Mas o Meta está mais lento do que antes.

Comecei a usar o YJIT no meu fórum e quando o servidor está na Alemanha e os usuários são finlandeses, todos dizem que todos os tópicos abrem mais rápido. Isso é realmente engraçado porque não conseguimos ver mudanças nos tempos de carregamento puros abaixo de 200 ms.

1 curtida

Tenho pensado em um tempo de carregamento de página fixo (ou consistente) há algum tempo. Onde os tempos de carregamento para cada página e cada usuário sejam o mais consistentes possível.

As informações sobre usuários finlandeses são interessantes, isso me fez pensar se poderíamos rotear o usuário com base no GEO IP ou latência para um servidor diferente com carga diferente apenas para economizar tempo de resposta.

1 curtida

Estes resultados não incluem o acesso ao banco de dados?

Ativei isso em exiges.com.

Admito que não fiz um benchmark, mas consigo notar uma diferença na forma como os tópicos e as threads estão abrindo.

Deve ser um passo positivo, já que os usuários não me informaram o contrário :slight_smile:

1 curtida

Sim, estamos medindo apenas o tempo gasto na execução de código Ruby, excluindo consultas ao banco de dados e comandos Redis nas medições.

1 curtida