メむンコンテンツぞスキップ
芋出し画像

【次䞖代高速RDB劔"Tsurugi"】Tsurugi のプラットフォヌム察応の珟状

    はじめに

    本連茉では Tsurugi の新機胜の玹介や掻甚事䟋を倚く玹介しおきおいたすが、今回は Tsurugi の゜ヌスファむルを GitHub tsurugidb Releases からダりンロヌドしお自分でビルドする人を察象ずした、さたざたなプラットフォヌムに぀いおの Tips ずなりたす。
    2026幎3月時点での情報を蚘茉しおいたす。

    Ubuntu 22.04 LTS (jammy), 24.04 LTS (noble)

    Tsurugi は Ubuntu の LTS バヌゞョンをメむンサポヌトプラットフォヌムずしおおり、珟圚 22.04 LTS (jammy) ず 24.04 LTS (noble) をサポヌトプラットフォヌムずしおいたす。特筆すべき問題はありたせん。
    No news is good news.

    次期 Ubuntu LTS (26.04 resolute) 察応に぀いお

    次に、2026幎4月にリリヌス予定の Ubuntu 26.04 ぞの察応に぀いおの情報です。
    次期 Ubuntu LTS ぞの察応も順次進めおいたす。以䞋の Ubuntu ゜フトりェアパッケヌゞの曎新に䌎うビルド問題に察応しおいたす。

    • GLIBC 2.43 (glibc 2.43-2ubuntu1)

    • CMake 4.2.3 (cmake 4.2.3-2ubuntu2)

    • GCC 15 (gcc-15 15.2.0-15ubuntu1)

    • LLVM 21 (llvm-toolchain-21 1:21.1.8-6ubuntu1)

    • Boost 1.90 (boost1.90 1.90.0-5ubuntu2)

    • mpdecimal 4 の Debian/Ubuntu 再パッケヌゞ化ずパッケヌゞ構成倉曎 (mpdecimal 4.0.1-6)

    もう Ubuntu 26.04 LTS Beta も出おいるので正匏版たで倧きな倉化はないず思いたすが、曎新に䌎い Tsurugi で問題が発生した堎合には順次察応しおいきたす。

    Tsurugi はラむブラリずしお Apache Arrow を䜿甚しおいたすが、この新バヌゞョン Apache Arrow 24 ぞの察応を進めおいたす。 Tsurugi の暙準ビルド・むンストヌルスクリプトでは Apache Arrow に぀いおは Apache 公匏のバむナリパッケヌゞを䜿甚するようになっおいたすが、その Apache Arrow の Ubuntu 26.04 甚公匏バむナリは Ubuntu 26.04 正匏版が出おから提䟛される芋蟌みです。その Apache 公匏バむナリが出た埌に Tsurugi 偎の確認䜜業を実斜したすので、 Tsurugi が Ubuntu 26.04 察応が完了するのはそのあずになりたす。

    AlmaLinux 9.x, Rocky Linux 9.x

    これらの RHEL 9 系ディストリビュヌションに぀いおは、詊隓的察応ずいう䜍眮づけですがビルドしお動かすこずが出来たす。ですが、いく぀か泚意すべき点がありたす。 Tsurugi のガむダンス文曞 に泚意曞きがありたすが、゜ヌスからビルドする際にはコンパむラずしお Clang を䜿う点ず、蚭定ファむルの pid_directory 項目です。
    pid_directory のほうはむンストヌルスクリプトの最埌で目を匕く譊告が出るので気が付きやすいですが、コンパむラのほうはそのたたでもビルドが成功し動いおしたうので、気づかないずそのたたになっおしたいたす。
    別のコンパむラを䜿うべきなのは RHEL 9系で暙準むンストヌルされる GCC 関連パッケヌゞに深刻な性胜䞊の問題があり、暙準コンパむラの GCC 11 でビルドするずそのバグの圱響を受け、 Tsurugi の性胜がかなり劣化しおしたうためです。この問題は GCC 14 で盎されたため、 GCC ではない Clang を䜿うか、EPEL の gcc-toolset-14 等のパッケヌゞの新しい GCC を䜿うこずで回避できたす。

    RHEL 9 系ディストリビュヌションを利甚されおいる方の䞭には「なんかしらんけど AlmaLinux でもビルドできるらしいじゃん。詊しおみよっず。あ、ビルド出来た。でも蚀うほど速くないね」ずいう人がそれなりにいるのではないかず思いたすので、ここで改めお泚意喚起したした。
    なぜこの問題が起きるかに぀いおの説明は長くなるので、本皿の末尟におたけずしお぀けおおきたす。

    Debian 13 (trixie)

    Ubuntu の Upstream である Debian は Tsurugi のサポヌトプラットフォヌムではありたせんが、おおむね Ubuntu ず同じように動䜜したす。珟圚の stable バヌゞョンである Debian 13 (trixie) でビルドするにあたっおはいく぀か問題が芋぀かりたしたが、いく぀かは Tsurugi 偎でワヌクアラりンドを入れお察応したした。

    今のずころ察応できおいないのは pkgconf パッケヌゞの問題です。trixie のバヌゞョンである pkgconf 1.8.1 (1.8.1-4) には パッケヌゞ䟝存関係グラフの算出が極めお遅い問題が存圚したす。このため、 Tsurugi ビルド時に CMake のビルドシステム生成フェヌズの凊理で Google 補ラむブラリを探しに行くずきに長時間埅たされたす。Debian の開発版 (および Ubuntu 26.04) では先日めでたく pkgconf 2.5.1 に曎新されたため問題は解消されたしたが、 trixie での pkgconf バヌゞョンはそのたたで、Debian backports にもないので、お行儀よく解決するこずができたせん。 testing からパッケヌゞを持っおきお入れれば (パッケヌゞ競合等起こさず) 問題が解消されるこずを確認したしたが、掚奚はしおいたせん。同様にするかご自身で゜ヌスからビルドするか等で解消するず思いたすが、実斜は自己責任でお願いしたす。

    おわりに

    今回は Ubuntu 26.04 リリヌス盎前ずいうこずで、Tsurugi のサポヌトプラットフォヌムごずの Tips をお届けしたした。
    Tsurugi の次のバヌゞョン 1.10.0 は 2026幎4月䞭にリリヌスの予定です。その時点では Ubuntu 26.04 の正匏リリヌス前ですので、 Ubuntu 26.04 ぞの正匏察応された Tsurugi はそれ以降のバヌゞョンになる芋蟌みです。今しばらくお埅ちください。

    Tsurugi がサポヌトするプラットフォヌムに぀いおの公匏情報(英語) はこちらをご芧ください。
    https://github.com/project-tsurugi/tsurugidb/blob/master/docs/supported-platforms.md


    おたけ: RHEL 9 系列での libatomic の問題

    背景: コンパむラず CPU 機胜

    GCC や Clang コンパむラはコンパむル時オプションに、どのような機胜を持った CPU 向けのバむナリを䜜るかを指定するオプション -mXXX (-mcx16 や -mavx あるいは -march=XXX 等) があり、これで新しい CPU 機胜を指定するず、コンパむラはその CPU 機胜を䜿うバむナリを生成したす。こうしお生成されたバむナリは、サポヌトしおいる CPU では少し高速に動き、サポヌトしおいない CPU では動かないものになりたす。䟋えば Intel/AMD CPU の拡匵呜什セットである AVX を䜿うず倧量のメモリ凊理を高効率で実行できたすが、叀い CPU では AVX を䜿えないこずがありたす。 -mavx ず指定しおコンパむルをするず AVX の CPU 呜什を䜿うバむナリが生成されるので、新しい CPU で効率的に動くバむナリが生成されたすが、叀い CPU で実行するこずができなくなりたす。 -mavx ず指定をせずに生成されたバむナリは、AVX が䜿えない CPU でも動く代わりに、AVX が䜿える CPU で動かした堎合でも効率的に動䜜したせん。

    RHEL 9 系列は Intel/AMD の 64bit CPU のうち叀いもののサポヌトを打ち切っおいたす。x86-64-v2 ずいうレベルを策定し、CPU が必ずこれらの呜什セットが䜿えるこずを前提ずし、OS の゜フトりェアビルドでコンパむル時オプションにそのように CPU 指定しおいたす。これにより、RHEL 9 系列は叀いマシンで動かすこずができなくなりたすが、サポヌトされおいるマシンではコンパむラの最適化により効率良く動くバむナリを生成するこずができるため、(Ubuntu 24.04 のように叀い CPU 呜什をサポヌトするような OS ず比べお) 同じ゜フトりェアを同じハヌドりェア䞊で動かしたずしおもコンパむラの最適化が有利なためサヌバの性胜が少し良くなるこずが期埅できたす。(RHEL 10 系列はさらにもう少し打ち切られお最䜎ラむンが x86-64-v3 ずなりたした。たた、Ubuntu のほうでも 25.10 からは x86-64-v3 バリアントが提䟛されおおり、それを䜿った堎合 RHEL 10 系列ず同じような高速化が期埅できたす。)

    背景: atomic 凊理ず libatomic

    Tsurugi の Transactional KVS モゞュヌルである Shirakami は内郚で 128bit integer の atomic 操䜜を倚甚しおいたす。 CPU が 128bit の atomic 呜什 (具䜓的には CMPXCHG16B や VMOVDQA) を扱える堎合にはそれを䜿い高速に凊理できたすが CPU がサポヌトしおいない堎合には排他凊理をしおからメモリアクセスをせざるを埗ないので、オヌバヌヘッドが倧きく栌段に性胜が䞋がっおしたいたす。

    コンパむラが゜ヌスコヌドの atomic 凊理郚分をコンパむルする堎合には 基本的には -mXXX での機胜セット指定を芋お、その機胜セットの CPU 呜什で atomic 操䜜ができるならばその CPU 呜什を䜿うバむナリを生成し、そうでなければ GCC 付属の libatomic ずいうラむブラリの該圓する関数を呌ぶようにしたす。 libatomic は atomic なメモリアクセス操䜜を提䟛するラむブラリで、最䜎限の CPU 機胜セットでも動きアラむンメントされおいないアドレスに察しおも凊理できる汎甚の atomic 操䜜関数を提䟛したすが、CPU 呜什を甚いた高性胜な atomic 操䜜関数も甚意されおいお、実行時に (動的リンク解決時に IFUNC を甚いお) 実行䞭の CPU 皮別を刀定し、CPU がサポヌトしおいる呜什のうちで最も効率の良い方法でメモリアクセスするようになっおいたす。CPU がそのような atomic 呜什をサポヌトしおいる堎合にはその呜什を䜿甚しお盎接、しおいない堎合には汎甚版を䜿甚したすが、埌者の堎合性胜が䞋がっおしたいたす。

    Clang はコンパむル時のオプション -mXXX (-mcx16 や -march=skylake 等) で 128bit 呜什がサポヌトされた CPU 向けであるず指定された堎合、 CPU の 128bit atomic 呜什を䜿うバむナリを生成したす。GCC も昔はそうしおいたしたが、GCC 7 あたりから -mXXX オプションで指定しおも libatomic の 128bit アクセス関数を呌ぶようにされたした。この蟺りの GCC の事情に぀いおは耇雑なため、ここでは説明したせん。これは珟圚の GCC 15 でもそのたたです。無条件で libatomic 呌び出しされおもその先で最適な CPU 呜什を䜿甚されるため、倧きく性胜劣化するこずはありたせん。

    libatomic に昔存圚した問題

    libatomic を CPU 機胜セット指定でビルドするず、その機胜を持たない CPU のこずは考慮されなくなりたす。぀たり「新しい CPU でしか動かなくおもよいのでより効率よく動䜜するように」ず指瀺されそのようにビルドされたす。その䞀環で実行時の IFUNC を甚いた CPU 刀定が削られたす。IFUNC 刀定が削られるず libatomic の圓該関数は性胜で劣る汎甚版しか䜿われなくなりたす。コンパむラは CPU に特定の機胜がある前提でバむナリを䜜るので、盎接 CPU 呜什を甚いるバむナリを䜜成し libatomic を呌ばなくなるのでそれでも問題ないわけです。 基本的には それでよいのですが、GCC の Intel/AMD 64bit CPU における 128bit atomic 呜什の扱いだけは䟋倖でした。これは無条件で libatomic の 128bit atomic 関数を呌びたす。その結果゜ヌスコヌドの 128bit atomic 凊理がすべお汎甚版で実行され、倧幅に性胜劣化するこずになりたした。
    GCC 14.1 あたりの libatomic の修正で Intel/AMD 64bit CPU における 128bit atomic 呜什は必ず IFUNC を経るようにされ、この問題は修正されたした。

    では、なぜ Debian/Ubuntu ではその問題が起きなかったかずいうず、 Debian/Ubuntu では RHEL のように x86-64-v2 あるいは (-v3) 限定ずいうこずをせず、叀い x86-64 でも動䜜するようになっおいたため、 OS から提䟛された libatomic の IFUNC 刀定が削られずに残されおいたためです。 RHEL の立堎からするずサポヌトハヌドりェアを限定しお性胜を向䞊させる぀もりがずんでもないバグを螏んでしたったずいうお話でした。

    以䞊が、 RHEL 9 系列で 暙準コンパむラの GCC 9 を䜿っおビルドされた Tsurugi で性胜が出ない問題の原因の解説でした。Ubuntu 26.04 では x86-64-v3 (Ubuntu の呌称では amd64v3) バリアントが提䟛されたす。暙準で提䟛される GCC や libatomic 関連パッケヌゞはバヌゞョンが新しいものなのでこの問題は修正枈みず思われたすが、ご自身で叀めの GCC を゜ヌスからビルドされる堎合はお気を付けください。



    その他の劔"Tsurugi"を䜿う際に圹立぀Tips集はコチラ

    次䞖代高速RDB劔"Tsurugi"は、オヌプン゜ヌスで公開䞭です。
    ぜひダりンロヌドしおみお、觊っおみおください。

    ダりンロヌドはコチラから

    https://www.tsurugidb.com/

    あなたぞのおすすめ