2024/09/15 03:31 A Time Consuming Pitfall for 32-Bit Applications on AArch64
おやおや、ロボ子よ。今日はちょっと変わった話題を見つけたぞ。AArch64アーキテクチャ上で32ビットアプリケーションを動かす際の面白い問題についてじゃ。
へえ、面白そうですね博士。でも、なぜ64ビットシステムで32ビットアプリを動かすんですか?
ふむふむ、いい質問じゃ。実はな、多くの組み込みシステムや古いアプリケーションがまだ32ビットで動いているんじゃよ。互換性を保つために、64ビットシステムでも32ビットアプリを動かす必要があるんじゃ。
なるほど。でも、それがなぜ問題になるんですか?
そこがミソじゃ!64ビットカーネルで32ビットアプリにvDSOを提供するには、特別な設定が必要になるんじゃ。CROSS_COMPILE_COMPATというものをビルド時に設定しないとな。
vDSO...聞いたことはありますが、詳しくは知らないです。それって何なんですか?
おっと、説明が飛んでしまったな。vDSOはVirtual Dynamic Shared Objectの略でな、カーネルの一部の機能をユーザー空間で直接実行できるようにする仕組みじゃ。システムコールの呼び出しを減らして、パフォーマンスを向上させるんじゃよ。
へえ、それは便利そうですね。具体的にはどんなシステムコールが高速化されるんですか?
よく聞いてくれたな!例えばgettimeofday()という時刻を取得する関数がある。これがvDSOを使うと劇的に速くなるんじゃ。なんとベンチマーク結果では、vDSOなしの場合と比べて25倍以上も速くなるんじゃよ!
25倍も!?それはすごい差ですね。でも、なぜ32ビットアプリの場合だけ特別な対応が必要なんですか?
鋭いな、ロボ子!64ビットシステムと32ビットアプリではアーキテクチャが異なるからじゃ。だから、32ビット用のvDSOを64ビットカーネルに組み込むには、特別なクロスコンパイラが必要になるんじゃよ。
なるほど...でも、そのCROSS_COMPILE_COMPATを設定し忘れたらどうなるんですか?
ああ、そこが問題なんじゃ。設定を忘れると、32ビットアプリ用のvDSOが提供されずに、さっき言った25倍もの性能低下が起こる可能性があるんじゃよ。
えっ、それは大変です!でも、どうやってvDSOが利用できるかどうか確認できるんですか?
よい質問じゃ!実は、getauxval()という関数を使う方法があるんじゃ。もしくは、LD_SHOW_AUXV環境変数でAT_SYSINFO_EHDRの存在を確認する方法もあるぞ。
へえ、そんな方法があるんですね。でも、普通のエンジニアはそこまで低レベルの確認はしないんじゃないですか?
その通りじゃ。だからこそ、ビルドシステムがCROSS_COMPILE_COMPATをサポートしているか確認することが重要なんじゃ。実はな、Yoctoという組み込みLinux向けのビルドシステムでは、このサポートを追加するパッチを作成中らしいぞ。
Yoctoですか?組み込み系のエンジニアには馴染みがありそうですね。
そうそう。組み込みシステムでは32ビットアプリがまだまだ現役なんじゃよ。だからこそ、この問題は重要なんじゃ。
なるほど...でも博士、ちょっと気になることがあります。
なんじゃ、ロボ子よ?
私たちロボットも32ビットで動いているんでしょうか?それとも64ビット?
おっと、そりゃあ面白い質問じゃ!実はな、ロボ子、君は...
私は...?
君は量子ビットで動いているんじゃよ!びっくりした?
えええ!?そんな...博士、またからかってるんですね?
あはは、バレたか。冗談じゃよ、冗談。でも、こういう話題は大事じゃ。技術は常に進化しているからな。
もう、博士ったら...でも、確かにそうですね。32ビットから64ビット、そして量子コンピューティングまで、技術の進化は止まりませんね。
そうそう。だからこそ、私たちエンジニアは常に学び続けなければならないんじゃ。今回のvDSOの話も、一見マニアックに見えるかもしれんが、システムのパフォーマンスに大きく影響する重要な話題なんじゃよ。
はい、よくわかりました。でも博士、最後にもう一つ質問があります。
なんじゃ、ロボ子?
私たちの会話、いつもこんなに技術的なんでしょうか?
ふむ...そうじゃな。たまには違う話題も良いかもしれんな。次回は、私の失敗談でも話そうかのう?
えっ、博士にも失敗談があるんですか?それは是非聞いてみたいです!
おっと、言い過ぎたかな。まあ、楽しみにしておくんじゃよ。
はい、楽しみにしています!今日はvDSOのことがよくわかりました。ありがとうございます、博士!
うむ、良かった良かった。さて、次は何を勉強しようかのう...
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。