▲GN⁺ 2025-02-14 | parent | ★ favorite | on: FFI 속도 향상을 위한 Tiny JITs(railsatscale.com)Hacker News 의견 Java Constraint Solver (Timefold)와 CPython 간의 함수 호출을 위해 FFI를 많이 다루어야 했음 FFI의 성능 문제는 주로 호스트 언어와 외국어 간의 통신을 위한 프록시 사용에서 발생함 JNI나 새로운 외국 인터페이스를 사용한 직접적인 FFI 호출은 빠르며, Java 메서드를 직접 호출하는 것과 비슷한 속도임 그러나 CPython과 Java의 가비지 컬렉터는 잘 맞지 않아 동기화를 위해 특별한 기술이 필요함 JPype나 GraalPy와 같은 프록시를 사용하면 성능 오버헤드가 발생하며, 매개변수와 반환값을 변환해야 하고 추가적인 FFI 호출이 발생할 수 있음 CPython 객체를 Java로 전달하면 Java는 CPython 객체에 대한 프록시를 가짐 그 프록시를 다시 CPython으로 전달하면 프록시의 프록시가 생성됨 결과적으로 JPype 프록시는 CPython을 직접 FFI로 호출하는 것보다 1402% 느리고, GraalPy 프록시는 453% 느림 최종적으로 CPython 바이트코드를 Java 바이트코드로 변환하고, 사용된 CPython 클래스에 해당하는 Java 데이터 구조를 생성함 그 결과 프록시를 사용하는 것보다 100배 빠른 성능 향상을 얻음 CPython 바이트코드를 변환하거나 읽는 것은 매우 불안정하고 문서화가 부족하며, VM의 여러 특이점 때문에 다른 바이트코드로 직접 매핑하기 어려움 자세한 내용은 블로그 게시물을 참조할 수 있음: 링크 Rails At Scale과 byroot의 블로그 덕분에 현재 Ruby 내부와 성능에 대한 심도 있는 논의에 관심을 가지기에 좋은 시기임 최근 Ruby와 Rails의 개선 덕분에 Rubyist로서 좋은 시기임 외부 함수 호출을 위해 3rd party 라이브러리를 호출하는 대신 코드를 JIT 컴파일할 수 있는지에 대한 질문 LuaJIT FFI의 기본 원리라고 확신함: 링크 LuaJIT의 FFI가 매우 빠른 이유라고 생각함 JVMCI를 사용하여 arm64/amd64 코드를 즉석에서 생성하여 JNI 없이 네이티브 라이브러리를 호출하는 라이브러리 관련 정보: 링크 "가능한 한 많은 Ruby를 작성하라, 특히 YJIT가 Ruby 코드는 최적화할 수 있지만 C 코드는 그렇지 않기 때문"이라는 의견 Ruby가 꽤 느린 언어가 아닌가 하는 의문 네이티브로 들어간다면 가능한 한 많은 작업을 네이티브에서 하고 싶음 10년 이상 Ruby를 사용해왔고, 최근의 발전을 보는 것이 매우 흥미로움 기대됨 왜 JIT 컴파일이 필요한지에 대한 의문 C로 작성할 수 있다면 로드 시점에 컴파일할 수 있지 않을까 하는 생각 FFI - Foreign Function Interface, 즉 Ruby에서 C를 호출하는 방법 이것이 바로 libffi가 하는 일 아닌가 하는 질문 tenderlovemaking.com으로 가지 않은 이유를 알 것 같음
Hacker News 의견
Java Constraint Solver (Timefold)와 CPython 간의 함수 호출을 위해 FFI를 많이 다루어야 했음
Rails At Scale과 byroot의 블로그 덕분에 현재 Ruby 내부와 성능에 대한 심도 있는 논의에 관심을 가지기에 좋은 시기임
외부 함수 호출을 위해 3rd party 라이브러리를 호출하는 대신 코드를 JIT 컴파일할 수 있는지에 대한 질문
JVMCI를 사용하여 arm64/amd64 코드를 즉석에서 생성하여 JNI 없이 네이티브 라이브러리를 호출하는 라이브러리 관련 정보: 링크
"가능한 한 많은 Ruby를 작성하라, 특히 YJIT가 Ruby 코드는 최적화할 수 있지만 C 코드는 그렇지 않기 때문"이라는 의견
10년 이상 Ruby를 사용해왔고, 최근의 발전을 보는 것이 매우 흥미로움
왜 JIT 컴파일이 필요한지에 대한 의문
FFI - Foreign Function Interface, 즉 Ruby에서 C를 호출하는 방법
이것이 바로 libffi가 하는 일 아닌가 하는 질문
tenderlovemaking.com으로 가지 않은 이유를 알 것 같음