問題タブ [mmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - PCI を介して VME バスをユーザー空間メモリにオーバーレイする mmap?
メモリで通常の読み取り/書き込みを実行できるように、PCI バスを介して VME アドレス空間をユーザー空間にマップしようとしています。私はこのような別の PCI デバイスでこれを行いました:-
そして、「バー」は読み取り/書き込みに通常どおり使用できます。
したがって、VME には、Tundra Universe II PCI-VME Bridge チップを使用します:-
「/dev/vme_m0」を開く必要がありますか? どこから BAR をマップしますか? lspci -vv : 「リージョン 1: 80020000 のメモリ」
また、VME バス内のアドレスは 0x20000000 だけオフセットされているため、アクセス/マッピングに関してどのように機能するのでしょうか?!
(Linux 2.6.18-128.el5 #1 SMP を使用) (新しいタグ "vme" が必要です!)
perl - ディスクから 10 GB のファイルを読み取る最速の方法は何ですか?
さまざまな種類のメッセージを読み取ってカウントし、10 GB のテキスト ファイル ( FIXエンジン ログなど) でいくつかの統計を実行する必要があります。Linux、32 ビット、4 CPU、Intel、Perl でのコーディングを使用していますが、言語はそれほど重要ではありません。
Tim Bray の WideFinder プロジェクトで興味深いヒントを見つけました。ただし、メモリ マッピングの使用は、32 ビット アーキテクチャによって本質的に制限されることがわかっています。
複数のプロセスを使用してみましたが、4 つの CPU で 4 つのプロセスを使用してファイルを並列処理すると、より高速に動作するようです。マルチスレッドを追加すると、おそらくコンテキスト切り替えのコストが原因で速度が低下します。スレッドプールのサイズを変更してみましたが、それでも単純なマルチプロセス版より遅いです。
メモリ マッピング部分はあまり安定していません。2 GB のファイルで 80 秒かかることもあれば、7 秒かかることもあります。とにかく、Mmap は 32 ビット アーキテクチャで 4 GB を超えて拡張することはできません。
Perl のIPC::MmapとSys::Mmapを試しました。Map-Reduce も調べましたが、問題は実際には I/O バウンドであり、処理自体は十分に高速です。
そこで、バッファリングのサイズやタイプなどを調整して、基本的な I/O を最適化することにしました。
この問題が任意の言語/プラットフォームで効率的に解決された既存のプロジェクトを知っている人は、有用なリンクを示したり、方向性を提案したりできますか?
linux - mmap(2)とmmap(3)
mmap(2)
との違いを知っている人はいmmap(3)
ますか?Manセクション3は、「この章では、システムコールを実装する第2章で説明したライブラリ関数を除くすべてのライブラリ関数について説明します」と説明されています。mmap(3)
システムコールを実行しませんか?
2つのマニュアルページを読むと、それmmap(2)
は実際よりもはるかに幅広い種類のフラグを受け入れているようでmmap(3)
あり、デバイスのI/Oスペースをマッピングできると主張しています。 mmap(3)
「共有メモリオブジェクト」と「型付きメモリオブジェクト」をファイルに追加してマップできると主張していますが、デバイスI/Oについては言及していません。
2つの関数の名前が同じであるため、どちらを選択するかさえわかりません。
arm - mmapとARMプロセッサのGPIO構成レジスタへのアクセス
LinuxユーザースペースからHWレジスターへの読み取り(および書き込み)に苦労しています。目標は、いくつかのGPIOピンを構成し、このピンを設定して読み取ることができるようにすることです。
プロセッサ(Freescaleのimx27)の仕様によると、GPIOを制御するレジスタバンクの物理アドレスは0x10015000です。
私の仮定は、次のようなものを使用できるというものでした。
これで、プロセッサのレジスタにデータを読み取って設定できるようになると期待していました。問題は、私がどの場所を読んだかは問題ではなく、常に0になることです。
たとえば、物理的な場所0x10015220のレジスタには、GPIOとして使用されているピンを示すレジスタが含まれています。これはデフォルトで0xFFFFFFFFになります。このレジスタを読むと、0とは異なるものが得られると期待していました。
与えるPTC_GIUS: 0x00000000
。
どこが間違っているのですか?
python - Python File Slurp w/エンディアン変換
最近、 pythonでファイルを丸呑みする方法を尋ねられ、受け入れられた答えは次のようなものを提案しました:
ファイルを読み込んでデータのエンディアン表現を変換するにはどうすればよいですか?
たとえば、ビッグ エンディアンとしてパックされた単精度浮動小数点数の集まりである 1 GB のバイナリ ファイルがあり、それをリトル エンディアンに変換して numpy 配列にダンプしたいとします。以下は、これを達成するために私が書いた関数と、それを呼び出す実際のコードです。私struct.unpack
はエンディアン変換を使用し、を使用してすべてを高速化しようとしましたmmap
。
私の質問は、丸呑みをmmap
and で正しく使用していstruct.unpack
ますか? これを行うためのよりクリーンで高速な方法はありますか? 現在、私が持っているものはうまくいきますが、これをより良くする方法を学びたいと思っています.
前もって感謝します!
python - Python の mmap が大きなファイルで機能しないのはなぜですか?
[編集: この問題は 32 ビット システムにのみ適用されます。お使いのコンピューター、OS、および Python の実装が 64 ビットの場合、巨大なファイルの mmap は確実に機能し、非常に効率的です。]
ファイルへのビット単位の読み取りアクセスを可能にするモジュールを作成しています。ファイルが大きくなる可能性があるため (数百 GB)、ファイルを文字列のように扱い、すべてのシークと読み取りを非表示にする単純なクラスを作成しました。
ラッパー クラスを書いた時点では、mmap モジュールについて知りませんでした。mmap のドキュメントを読んで、「すばらしい。これはまさに私が必要としていたものです。コードを取り出して、mmap に置き換えます。おそらくはるかに効率的であり、コードを削除することは常に良いことです。」
問題は、mmap が大きなファイルに対して機能しないことです! おそらく最も明白なアプリケーションだと思っていたので、これは私にとって非常に驚くべきことです。ファイルが数ギガバイトを超える場合、EnvironmentError: [Errno 12] Cannot allocate memory
. これは 32 ビットの Python ビルドでのみ発生するため、アドレス空間が不足しているように見えますが、これに関するドキュメントは見つかりません。
私のコードはただ
だから私の質問は、ここで明らかな何かが欠けているのでしょうか? mmap を大きなファイルで移植可能に動作させる方法はありますか、それとも単純なファイル ラッパーに戻す必要がありますか?
更新: Python mmap には POSIX mmap と同じ制限が必要であるという感覚があるようです。ここで私のフラストレーションをよりよく表現するために、mmap の機能のごく一部を備えた単純なクラスを示します。
これは読み取り専用で、派手なことは何もしませんが、mmap と同じように実行できます。
ただし、ファイルサイズに制限はありません。さほど難しいことはありません。
c - Cのmallocとmmap
2 つのプログラムを作成しました。1 つは を使用しmalloc
、もう 1 つは を使用しmmap
ました。を使用した場合の実行時間mmap
は、 を使用した場合よりも大幅に短縮されmalloc
ます。
たとえば、使用しているときはmmap
、システムへの読み取り/書き込み呼び出しを避けることを知っています。そして、メモリアクセスは少なくなります。
mmap
しかし、 overを使用した場合の利点について、他に何か理由はありますmalloc
か?
どうもありがとう
linux - メモリマップファイルシステムコール - Linux
ファイルをメモリにマップするときは、システム コールが必要です。ファイルへの後続のアクセスにはシステム コールが必要ですか、それともプロセスの仮想メモリ ページはメモリ内の実際のページ キャッシュにマップされていますか?
update : 私が知りたいのは、複数のプロセスが mmap を介して同じファイルにアクセスしている場合です。それらは同じ物理メモリ部分の書き込みにアクセスします。