私は興味がある。 64ビットプロセッサを搭載した32ビットOSに64ビットプログラムをインストールすることはできますか?
Raspberry Pi 3でLinuxを実行していますが、MongoDBの新しいバージョンをインストールしようとしています。
armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
64ビットプロセッサを搭載した32ビットOSに64ビットプログラムをインストールすることはできますか?
原則的には可能ですが、プロセッサとOSがサポートする必要があります。
ARMv8では、32ビット(Aarch32)カーネルは64ビット(Aarch64)プロセスを実行できません。これはプロセッサの制限です。
この制限がない他のプロセッサもあります。たとえば、x86_64プロセッサ上でx86_32カーネル上でx86_64プロセスを実行することは可能ですが、ユーティリティが限られているため(おそらく、ほとんどの場合、 RAMをカーネルで32ビットにすることにより)のビット。Linuxではサポートされていませんが、Solarisではサポートされています。
64ビットkernelを実行している場合は、既存の32ビットOSを維持できます。 Aarch64 LinuxカーネルはAarch32プロセスを実行できます。 Raspbianはそのままではこれをサポートしていないため、32ビットOSと64ビットOSの両方を維持する必要があります。どちらかをメインOS(つまり init およびシステムサービスを実行するOS)として使用し、もう一方をchrootを使用して特定のプログラムを実行することができます。実用的なアプローチについては 64ビットDebian/Ubuntuで32ビットプログラムを実行するにはどうすればよいですか? を参照してください。
64ビットプログラムに必要なすべてのライブラリをインストールする必要があることに注意してください。特定のプロセスは完全に32ビットまたは完全に64ビットである必要があるため、64ビットの実行可能ファイルで32ビットのライブラリを使用することはできません。
32ビットシステムを維持する強い理由がない限り、64ビット実行可能ファイルを実行する必要がある場合は、64ビットシステムをインストールする方が簡単です。
64ビットプログラムでできること、32ビットプログラムではできないことは、約3 GBを超える仮想メモリをアドレス指定することだけであることに注意してください。追加のより大きなレジスタからパフォーマンス上の利点を得ることができますが、追加のメモリアクセスからもパフォーマンスが失われます。
一部のアーキテクチャでは、はい。 ARMまたはx86ではありません。
QEMUを使用して64ビットシステムをエミュレートできますが、そうしたくありません。
カーネルのみを64ビットカーネルにアップグレードすると、64ビットバイナリを実行できるようになります。基本的に、ディストリビューション全体を32ビットの互換モードで実行し、64ビットのmongodbのみが通常モードになります。
しかし、それはその価格に値しません。 mongodbを32ビットに切り替えた方がよい。ただし、この場合、仮想メモリ全体を直接マップするため、データベースを2GB以下にするという制限があります。データベースが大きい場合は、カーネルのアップグレードのみが残ります。 (@duskwuffの拡張子に感謝!)
ところで、dbが非常に大きな負荷を必要としない場合、またはその前にキャッシングソリューションを使用できる場合(たとえば、別の32ビットmongoなど)、CPUエミュレーションが機能します。そのために、「qemu qemu-system-x86_64」のグーグルを開始します。そのような解決策はおそらく実行不可能な仕事の必要性を持ち、生産的な環境では奇妙であると考えられるかもしれませんが。
あなたの場所では、私のdbに十分な場合は32ビットのmongoを使用し、そうでない場合は64ビットのカーネルを使用します。
それは不可能ではありませんが、管理するのは本当に難しいと思います。そのため、32ビットOSは通常32ビットのみのバイナリーとライブラリーと共にパッケージ化され(そして受け入れ)るため、システムを64ビットのもので動作させるには、システムを大幅に調整する必要があります。
RPI3で直面する主な問題は、64ビットカーネルがないことです(少なくともraspbianでは)。
要するに、32ビットのバイナリを使用すれば大丈夫です。
EDIT:
64ビットカーネルを使用する場合は、ARM64アーキテクチャをサポートするディストリビューションをインストールする必要があります。 ArchLinux ARM( here ))を確認する必要がありますが、完全にはサポートされていません。
探している情報は、インストールタブの下部にあります。
公式のdebianポート を確認することもできますが、RPI3ポートには依然として大きな問題があるため、問題の価値があるかどうかを判断するのはあなた次第です。
私はかなり長い間、32ビットシステムで64ビットカーネルを使用していました(これは、64ビットの実行可能ファイルをネイティブで実行するための最小要件と、必要なすべての64ビットライブラリです)。私はそれをお勧めしません。最終的に64ビットシステムホールセールにアップグレードしたのは、ALSAヘッダー、特にMidi ioctl呼び出しに関して、サイズにとらわれないという認識でした。つまり、32ビットモードでコンパイルされたものは、64ビットカーネルとうまく相互運用できません。
もちろん、これは修正する価値のあるバグと考えることができますが、ALSA開発のペースはほとんど凍結されており、混合プラットフォームのサポートが修正されるまで数年待つことはできませんでした(非混合の非バイナリ互換の方法で)。実行可能ファイル)混合プラットフォームへの関心がとにかく急速に減少している場合。
一部のアプリケーションでは、混合モードで動作します(驚くほど実際には)が、外部ライブラリを介してさえ、カーネルへのインターフェイスの基本的な共有以上のことをしている場合、それは単に楽観的過ぎます。