私は、Linux用のユーザモードのNUMA対応メモリアロケータを構築しています。その初期化中のアロケータは、NUMAノードごとに1つのチャンクという大きなチャンクを取得します。この後、大きなチャンクプールから多くのメモリページを与えることによって、ユーザによって要求されたメモリページが満たされる。ユーザモードのNUMA対応メモリアロケータでインターリーブドページアロケーションを実装する方法は?
ユーザがnページを要求すると、特定のチャンクからnページを簡単に与えることができます。しかし今、インターリーブド・アロケーション・ポリシーを実装したいと考えています。ここで、ユーザーは各チャンクから1ページを取得し、nページまでラウンドロビンします。これは、これらのページの仮想アドレスがもはや連続していないという問題を引き起こす。
質問:仮想アドレス可能な連続メモリを返す方法はありますか?私が考えることができる唯一の解決策は、あるページから別のページにジャンプする方法を知っている "スマート"ポインタを使用することです。
私はこの道を歩いていた理由の一つは、私がそのラウンドロビンポリシー(決定)厳密ではないのlinuxのMPOL_INTERLEAVEメモリ割り当てポリシーに満足していないということです。
質問2:指定された仮想アドレス範囲にマップされているページとNUMAノードを安価に知る方法はありますか?もっと正確には、読み込み/ proc/< proc_id>/numa_mapsからきめ細かなページレベルの情報を取得する方法はありません。
ありがとうございました。