Truffleruby에 대한 토론

누군가 truffleruby 위에서 Discourse를 사용해 본 적이 있나요?
이 방향으로 살펴볼 가치가 있을까요?

흥미롭네요. 왜 기여하는 대신 포크를 했을까요?

@merefield Truffleruby는 Oracle 팀이 개발한 GraalVM용 Ruby 구현체입니다. GraalVM에서 다른 언어와의 뛰어난 성능 및 상호 운용성을 제공합니다.
포크(fork)가 아닙니다.

Truffleruby에서 Rails를 사용해 본 경험이 있으며, 다음 주에 Discourse도 테스트해 볼 예정입니다.

추가 정보 - Running Rack and Rails Faster with TruffleRuby - Speaker Deck

매우 흥미롭네요. 기존 Discourse 코드베이스를 큰 변경 없이 실행할 수 있을 것으로 기대하나요? 어떤 종류의 변경이 필요할까요?

짧은 답변: 아니요, 현재 TruffleRuby에서는 작동하지 않습니다.

@gerhard 링크를 공유해 주셔서 감사합니다. 기존 문제들을 이해하는 데 도움이 될 것 같습니다.

현재의 장애 요인은 mini_racer입니다. mini_racer: `rb_context_init_unsafe': External function cannot be found. · Issue #1827 · truffleruby/truffleruby · GitHub 를 참조하세요.

그럼에도 불구하고, 적어도 모든 gem이 TruffleRuby에 설치됩니다. 우리는 CI에서 이를 테스트합니다(약간 오래된 버전의 Discourse에 대해).

이 문제는 5일 전에 수정되었습니다.

불행히도 discourse가 아니라 mastodon이 truffleruby 작업을 먼저 하게 될 것 같습니다 :dotted_line_face:

@volanar 네 - 지금 이 질문에 다시 답할 시간이 충분하지 않아요. 회사 일이 바빠서요.

@eregon 님이 여기 계시고, truffle에 대한 어떤 차단 요소도 인지하고 있지 않습니다. mini racer에 대한 수정 사항은 지난 해에 이미 병합되었습니다.

Brandon은 1년 전에 Discourse를 실행하기 시작했습니다:
https://twitter.com/brandonfish/status/1486755128577253376
https://twitter.com/brandonfish/status/1519726230936993792

기억이 맞다면, 일부 gem들이 Hash가 스레드 안전(thread-safe)하다는 것에 의존하는 것이 문제였습니다. TruffleRuby에는 이에 대한 일반적인 해결책이 있지만 아직 병합/통합되지 않았습니다. 반면, 단순히 Hash를 동시에 사용하는 것은 매우 드물게만 올바른 경우가 많으며, 이는 더 찾기 어려운 방식으로 병렬성 버그를 숨기는 결과를 초래하는 경우가 많습니다. 따라서 해당 gem들을 수정하는 것이 오히려 더 나은 방법일 수 있지만, 시간 소모가 큽니다.
성능 벤치마킹이 필요하며, 이를 의미 있고 대표적으로 수행하려면 멀티스레드 환경에서 벤치마킹해야 합니다. 이를 위해 A way to mark C extensions as thread-safe, so they can be executed in parallel · Issue #2136 · truffleruby/truffleruby · GitHub 이 필요합니다.

빠르게 해결되길 바랍니다 :face_with_peeking_eye:
truffleruby를 사용하면 discourse의 성능 지표(TTFB, 전반적인 성능 등)가 얼마나 개선될 거라고 생각하시나요?

브랜든이 이 서버에 있나요?

@Matthias_Schuster 빠른 검색을 하면

여기 Meta에서 찾을 수 있습니다.