パスワードを忘れた? アカウント作成
13793024 story
Linux

Linuxカーネル開発者の間でx32 ABIの廃止が議論される 48

ストーリー by hylom
微妙なポジションではある 部門より
あるAnonymous Coward曰く、

Linuxでは数年前に「x32」ABIが導入されたが、利用者が少ないことから最終的に廃止される可能性が出て来ているようだ(PHORONIXSlashdot)。

「x32」は、「x86_64」(64ビット版x86アーキテクチャ)をベースに、アドレス長だけを32ビットにしたアーキテクチャで64ビット対応のx86系CPUで利用できる(2002年の「本の虫」記事)。

x32ではパフォーマンスの向上が期待できると言われているが、実際にはあまり使われておらず、メンテナンスコストがかかることからカーネル開発者グループの間で廃止が検討されているという。Linux開発のリーダーであるLinus Torvalds氏は廃止に賛成している模様。

  • by Anonymous Coward on 2018年12月14日 18時12分 (#3533681)

    ここのコメントでの範囲ですら x32 がいったいなんなのか/ほんらいどういうメリットデメリットがあるものなのかを理解してない人がいっぱい出てきてるような状況だし、結局そもそも使ってないんだろうなということなわけでなくなってもほとんど誰も困らなさそうw

    ここに返信
    • by Anonymous Coward on 2018年12月15日 1時27分 (#3533854)

      メガドライブの上のほうに挿してあるからよく知ってる

    • by Anonymous Coward

      i386のことをしばしばx32と言ったりするくらいの知名度のなさだもんな

      • by Anonymous Coward

        i386のことをしばしばx32と言ったり

        この「i386」ってのもコメント主が指してるのは特定のCPUじゃなく「i386以降」のことだと思われるのでめんどくさいぞw

        • i386とか言いながら、それ以降に入った命令が必須だったりするので、最近だとi386以降ですらなく、Pentium(ひょっとしたらMMX Pentiumかも)以降ぐらいの意味ですよ。たいていのバイナリパッケージもアーキテクチャ表示がi686になってますしね。
          ほんとにi386に対応してたのは、Windowsだと3.1まででNTだと3.51まで、以降のバージョンは動作しません。
          Linuxだと3.8で、NetBSDだと5.0で、FreeBSDだと6.0で、OpenBSDだと4.2でサポートが切られました。

          • by Anonymous Coward

            Pentium Proから追加されたCMOV命令が多用されています
            i686ではCMOV命令は定義されておらずVIA C3の初期のものなどは実装していませんが、実際のところ何も動きません

          • by Anonymous Coward

            Intel AVX2を使えない環境が足切りされるのも時間の問題かもなあ。CPUは3年ひと昔でどんどんサポートが切られていく。6年たつと存在しないものとして扱われることも多い。

            • by Anonymous Coward

              現時点で販売されているAtomプロセッサがAVX2使えないからそれはしばらく無いと思う。

          • by Anonymous Coward

            ずっと昔、PC-98用(486SXだったかな・・・)にLinuxを入れたとき、コマンドの実行時にエラーが出まくった記憶があります。
            そういうことでしたか。

    • by Anonymous Coward

      結局中途半端な過渡期のものですよ。PAEなんかもまとめてオワコンにしてしまえ。

      • うろ覚えなのですが、IntelのAtomでCedar Trailってあったじゃないですか。
        あれって、64bit対応してるのに様々な事情で64bitOSが使えなかったような…(調べてみたけど自信がない)
        もしかするとそういうのにピッタリだったのかなぁ。
        Cedar Trailも過渡期の産物感アリアリですが…だとしても、実績十分のいにしえi386版がありますしね。

        /*
        昔DN2800MTというAtom N2800が載せてあるMini-ITXマザーが一時期気になっててCedar Trailを思い出したのですが、
        このマザーは12Vのみで動くようなので、ディスプレイも小型でUSB電源で動作するものにすれば、だいたい50cm四方の太陽電池+バッテリーな電源で動作するPCが作れるかなぁ、とか考えてました。(ノートPCだと一旦AC100Vにしないといけないので効率が落ちるのだ。)

        大体同じ頃?にRaspberry PiみたいなGUI環境が使えるCPUボードが出はじめて、そちらも気になってましたね。
        */

        • by Anonymous Coward

          LAHF命令やXDビット(AMD用語ではNXビット)に対応してないんじゃなかったっけ

          • by Anonymous Coward

            それはもうちょっと古いCPUかも知れない。
            wiki [wikipedia.org]によると内蔵GPUが32bitしか対応してないらしいです。

            LAHF,SAHF命令ってフラグとレジスタ間でデータをやりとりするやつですよね。もともと仮想化周りで使われていたとか。Windows8.1で必須になって初期の64bitCPUがアウトになったようですね。

    • by Anonymous Coward

      #3534035 とか現状を知らない奴も多いし

  • by Anonymous Coward on 2018年12月14日 16時41分 (#3533599)

    Linuxを常用している人であっても、自前でビルドして使ってるような猛者は僅かで
    残りの連中はディストリが配布してるアーカイブをそのまま使ってる
    この辺でx86_64-x32をサポートしていないディストリ使いは利用することができない

    例えGentoo使いのようなx32をサポートしたディストリ使いであったとしても
    プロプラ系のアプリやドライバを利用する人は、そのドライバやアプリが
    奇跡的にx86_64-x32をサポートしているわけでもない限り利用することができない
    この辺でnvidiaやamdのドライバ使いも除外される

    そんな人は開発者の中にも希少なので、OSSアプリであってもx32は殆どサポートされず
    それゆえに、例えばgcc5系でApache 2.4をx32ビルドすると-march=nativeでビルドした場合のみ
    壊れたバイナリを吐くというような環境依存のバグを嫌というほど踏み抜く

    そうして色々と面倒すぎるので誰も使わなくなる

    ここに返信
    • やっぱりいろいろ面倒なんですね。

      同じようなことはMIPSのABIでもあって、o32, n64, n32があるのだけど、マイナーなn32向けに命令拡張したCPUとライブラリがあって困った思い出がある。
      10年以上前なので今n32がどうなのかは知らない。

      x86系では、そういう特殊なCPUはないだろうし、お金さえ出せば性能をあげられるので、労力に見合わないよなあ。

      しかし、カーネルサポートをなくしてしまうのはちょっと寂しいかな。
      x86_64カーネルをベースにi386ユーザランドのシステムを乗っけられるのと同様にx32の環境も作れると思うので、ドライバや基本的なアプリに関してはx86_64用があれば大丈夫なんじゃないかと。

      • by Anonymous Coward

        ぜひLinusにあなたの意見「寂しいから消さないで」を伝えてみてください!
        封印されたはずの「Fxxx」を聞けるかもしれませんよ?

  • by miyuri (33181) on 2018年12月14日 22時03分 (#3533784) 日記

    boostのライブラリ、何故かx32とか入っていたのだけど、アレは何だったのか...。

    ここに返信
  • WoWはプログラムメモリが4GB使えて、古いjvmで移行の金なんか出ないときに、助かったな。
    X32 ABIも似た効果があったはずだけど、流石に64bit jvm使ったので良くわからない。

    ここに返信
  • 4GB必要かどうかなんて、ソフトを作る前に判断できるでしょう。その判断さえ間違わなければ、速度的にも容量的身も良いことだらけです。使わない理由がわかりません。ひとつひとつの節約効果は小さくても、地球全体で考えれば大きいです。

    ここに返信
    • by Anonymous Coward

      どっちか、と言わず両方動くようにカーネル書き換えればいいんじゃないかな。それができるカーネルだってあるんだから。

      • by Anonymous Coward

        64ビットカーネル自体はix86,x86_64およびx32のABI全部サポートしてるんです。
        問題はそのサポートに(無駄に見える)コストがかかる、ということなので。

  • by Anonymous Coward on 2018年12月14日 16時16分 (#3533576)

    x86の32bit(としてつかう)モードに最適化したものでしょうか。
    キリキリチューニングが必要なら各自自分でやってください、なのかな。

    ここに返信
    • ざっくり言えば、
      i386:従来からの32bitモード。プロセスあたりのメモリ空間上限4GB
      x86_64: 64bit CPUモード。ポインタは64bitでプロセスあたりのメモリ空間上限128TB
      に対して、
      x32: 64bit CPU を「レジスタ数がたくさんある32bitCPU」扱いするモード。メモリ空間4GB
      ってことです。
      4GBの壁はあるかわりにポインタが32bitなので若干省メモリ。
      64bitモードで増えたレジスタを使うので、64bitモードのない古いCPUでは動きません。

      • by Anonymous Coward

        > 64bitモードのない古いCPUでは動きません。

        誰得…?

        • by Anonymous Coward on 2018年12月14日 18時02分 (#3533674)

          x86_64向けのbinary にしちゃうと ポインタやらなんやらあらゆる i386 binary の倍になるわけで、
          そうすると実際のメモリフットプリントが雑にいうと倍になっちゃうわけですよ。

          DBとかは別として 日常使うようなアプリで実際に64bitポインタつかった巨大なメモリ空間なんかは要らないようなアプリが多い、
          でもx86_64で拡張された各種機能はとっても美味しいので使いたい。

          という結果 64bit ポインタをあきらめることで メモリ消費を抑えつつ 本来の x86_64 の各種機能を使えるモード として提案されたのが
          x32 なわけですよ。

          というわけなので 誰でも得と言えば得なんだけど...

          一方で、もはやメモリなんかじゃぶじゃぶあるわけで そこまでしてガンバる構造をkernelに残しておくことの複雑さとか、そもそも
          みんな使ってないし.. とかいうあたりで メリットとデメリットを天秤すると 普及してもないしデメリットのが多くね? という話が
          出てきたというのが 本件だと思います。

          • メモリフットプリント倍ということは、単にメモリ倍積めば同じになるわけではなく、
            同一キャッシュサイズではキャッシュミス率も倍ということになります。
            イマドキはCPUキャッシュとメモリの速度差が数百倍あり、ほぼキャッシュミス率で速度が決まるので、下手すると速度が半分(実際にはデータ中のintとポインタの比率による)になります。

            英wikipedia [wikipedia.org]によると、SPEC INTベンチで最速40%,平均5-8%の高速化になるそうです。(x86-64比)

            イマドキの 64bit javaでは、 同様に(オプションで)参照を32bit表現にして高速化しています。32bit表現->64bitポインタへの余分な変換処理を入れてでもキャッシュミス率を低めた(ヒット率を高めた)法が速いってことです

          • by Anonymous Coward

            x64でもオペランドサイズのデフォルトは32bitなのでさすがに「すべて倍」は雑すぎる。大きくなることは確かだけど。
            だからintが32bitなのもx64では「自然」

        • by Anonymous Coward

          Raspberry Pi3とかで有効活用できる。でも今のraspbianってi386しかないよね。

          • by Anonymous Coward

            raspbrrypi は ARM

            • by Anonymous Coward

              あっ... (´・ω・`) ...

              • by Anonymous Coward

                うっかりするような所か?

          • by Anonymous Coward

            ラズパイ3はcpuがARM 64bitだけど、rasbianが既存のraspberrypiと互換を取るために32bitモードで動いているのであって全然違う話。

            • by Anonymous Coward

              そもそも x86 の話ですよ?

              ARM関係ない

        • by Anonymous Coward

          Intelの安かったり古いCore MAなCPUが64bitだと遅かったので、それ対策かも。
          Macro-Fusion 64bitとかで検索

        • by Anonymous Coward

          省メモリって書いてあるじゃん。
          あと、多分32ビット命令しか使わないんだろうから、コードサイズが減って
          多少キャッシュ効率とか上がったりしそう。

        • by Anonymous Coward

          今と違い4GB以下のマシンにも人権(マシン権?)があった時代の徒花ですな。

        • by Anonymous Coward

          誰得とか言ってる奴もJVMはきっと圧縮OOPで動いている
          https://www.oracle.com/technetwork/jp/articles/java/compressedoops-427... [oracle.com]

      • by Anonymous Coward

        キャッシュに載る量が多くなるから、若干速いのでは。

      • by Anonymous Coward

        > 4GBの壁はあるかわりにポインタが32bitなので若干省メモリ。

        若干どころではない
        ポインタとintなどのunionが軒並み8バイトになってx64化で倍のメモリを食うようになったアプリが少なくなかった
        今は16GBとか32GBのメモリが当たり前なのでx32のメリットはかなり少ない

        • by Anonymous Coward

          > ポインタとintなどのunion

          そんなデータ構造の大半を占めるようなアプリって、そんなにある気がしない。

    • by Anonymous Coward

      ほかの32bitといえばARMのThumb命令
      密度とアクセスアドレスの局所化のためにARMより大きな犠牲を払ったABIなのかな

      • 組み込みでは、ハードウェアのコストに直結するので、少容量であることは重要です。

        組み込み用のコアテックスMではThumb命令の利用があたりまえです。というかもとから組み込み用途のためのThumb命令です。ルネサスの真似しやがって!

        ちなみに組み込みではいまだにfarとかnearとかを駆使して速度と容量をケチるプログラミングスタイルは健在です。

  • by Anonymous Coward on 2018年12月15日 7時27分 (#3533885)

    いいんやで?

    ここに返信
    • by Anonymous Coward

      いや、普通にLinux滅んだら殆どのネット上のサーバー滅ぶんですがそれは

typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...