Ruby 3.2 YJIT in Produktion bei Discourse ausführen

Bei Discourse waren wir bestrebt, YJIT zu übernehmen, seit das Ruby on Rails Infrastructure Team von Shopify es als produktionsreif deklarierte. Nachdem wir vielversprechende lokale Benchmarks gesehen hatten, begannen wir Anfang Mai 2023, unsere Produktions-Rails-Anwendungen mit aktiviertem Ruby 3.2 YJIT in ausgewählten Clustern auszuführen. Anschließend verbrachten wir einige Zeit damit, seine reale Leistung zu messen. Wir freuen uns, die positiven Ergebnisse mitteilen zu können, die wir beobachtet haben. Basierend auf diesen Erkenntnissen haben wir YJIT nun für unser gesamtes Hosting aktiviert, und Self-Hosters können sich dafür entscheiden, dasselbe zu tun.


Dies ist ein begleitendes Diskussionsthema für den ursprünglichen Eintrag unter https://blog.discourse.org/2023/05/running-ruby-3-2s-yjit-in-production-at-discourse/
21 „Gefällt mir“

Wir begannen im November 2022 mit dem Benchmarking von Discourse+YJIT und betrieben Meta seit Januar dieses Jahres zeitweise unter YJIT. YJIT ist einer der Gründe, warum wir das Upgrade von Ruby 2.7 auf Ruby 3.2 in wenigen Monaten beschleunigt haben, und ich bin begeistert, dass es endlich da ist. Und noch mehr, da die Verbesserungen, die für Ruby 3.3 kommen werden, noch besser aussehen!

14 „Gefällt mir“

Die Entwicklung von Ruby ist ziemlich beeindruckend … Ich dachte, die coolen Kids wären heutzutage alle auf Python?! :sweat_smile:

Gut gemacht, Team, dass ihr mit der Ruby-Roadmap Schritt haltet.

12 „Gefällt mir“

Wahrscheinlich eine dumme Frage, aber ist die „Container-Definitionsdatei“ die app.yml-Datei? Ich habe sie noch nie so genannt gehört. Danke!

3 „Gefällt mir“

Ja, das ist es. Wir haben den langen Namen verwendet, da einige Leute möglicherweise mehrere „app.yml“-Dateien umbenennen oder haben.

5 „Gefällt mir“

Sehr interessant wäre ein Vergleich zwischen Ruby 2.7 und 3.2 mit JIT!

2 „Gefällt mir“

Aus meinen Notizen vom 4. Januar:

Habe es gerade erneut ausgeführt

Ruby Server p Kategorien Home Thema Kategorien Benutzer Home Benutzer Thema Benutzer Kategorien Admin Home Admin Thema Admin
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

2.7 bis 3.2 + YJIT Geschwindigkeitssteigerung

Geschwindigkeit Kategorien Home Thema Kategorien Benutzer Home Benutzer Thema Benutzer Kategorien Admin Home Admin Thema Admin
1.36 1.40 1.24 1.22 1.25 1.20 1.15 1.23 1.28

7 „Gefällt mir“

Und ohne gemessene Daten und basierend darauf, was einzelne oder wenige Benutzer fühlen und sehen.

Für mich ist dieses Forum schon seit einiger Zeit langsamer. Ich sehe fast jedes Mal einen sich drehenden Kreis, wenn ich ein Thema öffne. Sicher, es kann und kommt mit ziemlicher Sicherheit von Servern und Entfernungen zwischen den USA und Europa. Aber Meta ist langsamer als früher.

Ich habe YJIT auf meinem Forum verwendet und wenn der Server in Deutschland steht und die Benutzer Finnen sind, sagen alle, dass sich alle Themen schneller öffnen. Das ist eigentlich ziemlich lustig, weil wir Änderungen der reinen Ladezeiten unter 200 ms nicht sehen können.

1 „Gefällt mir“

Ich denke schon seit einiger Zeit über feste (oder konsistente) Seitenladezeiten nach. Wo die Ladezeiten für jede Seite und jeden Benutzer so konsistent wie möglich sind.
Die Informationen über finnische Benutzer sind interessant, das hat mich wondered, ob wir Benutzer basierend auf GEO IP oder Latenz zu verschiedenen Servern mit unterschiedlicher Last leiten könnten, nur um ihnen Antwortzeit zu sparen.

1 „Gefällt mir“

Sind diese Ergebnisse ohne Berücksichtigung des DB-Zugriffs?

Ich habe dies auf exiges.com aktiviert.

Ich habe zugegebenermaßen keine Benchmarks durchgeführt, aber ich kann einen Unterschied in der Art und Weise feststellen, wie Themen und Threads geöffnet werden.

Es muss ein positiver Schritt sein, da die Benutzer mich nicht anders informiert haben :slight_smile:

1 „Gefällt mir“

Ja, wir messen nur die Zeit, die für die Ausführung von Ruby-Code aufgewendet wird, ausgenommen Datenbankabfragen und Redis-Befehle in den Zeitmessungen.

1 „Gefällt mir“