問題タブ [isis2]
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.
mono - Mono をハッキングして、メモリ マップト ファイルで非同期 I/O をサポートする
Mono (実際には .NET も) を "ハッキング" するためのちょっとしたアドバイスを探しています。
コンテキスト: Isis2 ライブラリ (Isis2.codeplex.com) の一部として、適切な種類のハードウェア (Infiband NIC) を備えたマシン上でメモリ マップト ファイルの非常に高速な「ゼロ コピー」レプリケーションをサポートしたいと考えています。 UDP を使用した標準イーサネット。セットアップは次のとおりです。一連のプロセス {A,B....} がすべて Isis2 にリンクされており、一部のメンバー (おそらく A) が大きなメモリ マップ ファイルを持ち、それを F と呼び、Isis2 にお願いします。 F を B、D、G、および X に再複製します。ライブラリは、多くの同時イニシエーターによる大量の使用があっても、これを非常に効率的かつ非常に迅速に行います。アイデアは、ビッグデータ アプリケーションを実行している HPC およびクラウド デベロッパーにこれを提供することです。
現在、Isis2 は .NET 上の C# でコーディングされており、Mono を介して Linux にクロスコンパイルされます。.NET と Mono の両方が管理されているため、どちらもネットワーク I/O のゼロコピーを許可したくありません。通常のモデルでは、「データを管理対象の byte[] オブジェクトにコピーし、SendTo または SendAsync を使用して送信します。受信、同じ取引: Receive または ReceiveAsync を byte[] オブジェクトに変換してから、ファイル内のターゲットの場所にコピーします。" これは、ハードウェアが維持できる速度よりも遅くなります。
.NET では、通常のメモリ保護を回避できることがわかりました。私は独自のマップされたファイル ラッパーを作成しました (実際には、コロンビアの研究者によって数年前に投稿されたものに基づいています)。Win32Kernel.dll ライブラリを取得し、Win32 メソッドを使用してファイルをマップし、ソケットの Send および Receive 呼び出しなどを開始します。少しハッキングするだけで、この方法で .NET 非同期 I/O を模倣できます。かなりクリーンで完全に C# でコード化されており、.NET が安全でないコードとして認識するものは何もありません。マップされたファイルを大きな管理されていないバイト配列として扱い、不要なコピーをすべて回避します。明らかに、Isis2 ユーザーからこれらすべてを保護します。彼らは知りません。
ここで、私の質問の核心に到達します。Linux では、Win32 カーネル dll が存在しないため、明らかにロードできません。そのため、コア Linux O/S 呼び出しを使用していくつかの基本機能を実装する必要があります。fmap() 呼び出しはファイルをマップします。Linux にも独自の形式の非同期 I/O があります。Infiniband の場合は Mellanox の Verbs ライブラリを使用し、UDP の場合は生の IP 送信と完了時のシグナル (「割り込み」) を使用します。醜いですが、これを機能させることができると思います。繰り返しますが、Isis2 自体のコードをクリーンにするために、これらすべてをラップして、標準の非同期 Windows 非同期 I/O にできるだけ似せて、管理されていない安全でない混乱全体をエンド ユーザーから隠します。
一度に 1 ギガバイトほどをチャンクで送信するので、重要な目標の 1 つは、順番に送信されたデータが、理想的には非同期受信を投稿した順序で受信されるようにすることです。明らかに、信頼できないコミュニケーションについて心配する必要があります (データがドロップされてしまい、コピーする必要があります)。しかし、何もドロップされない場合は、送信する n 番目のチャンクが n 番目の受信領域になるようにします...
だからここに私の質問があります:誰かがすでにこれをやったことがありますか?.NET が頻繁に使用する非同期 I/O 呼び出しを Mono がどのように実装するかについてのヒントはありますか? きっと同じようにすればいいのに。そして、最小限の痛みでこれを行う方法について誰かアドバイスはありますか?
もう 1 つ質問があります。Win32 では、マップされたファイルは 2Gb に制限されています。クラウド システムでは、多くの場合、Win64 が実行されます。Win64 を実行しているユーザーが Win64 を最大限に活用できるようにしながら、相互運用性を最大化する方法について何か提案はありますか? (一種の O/S 反映の問題...)
c# - mkbundle に MonoPosixHelper を含めるように説得するにはどうすればよいですか?
私は mkbundle を使用しており、Isis2 を使用する小さなプログラム IdaTester の組み込みバージョンを作成しようとしています。そのシステムは、MonoPosixHelper に依存する Mono の機能を使用します。
私の問題は、mkbundle が依存関係を認識せず、~/bin/lib/libMonoPosixHelper.so に対して動的にリンクする必要がある実行可能ファイルになってしまい、この実行可能ファイルをシステムに移動すると問題が発生することです。 Monoがインストールされています。実際、バンドルには、静的にリンクする必要があるものの 1 つが欠けています。
私の実行可能ファイルは機能しますが、動的ライブラリが「適切な場所」にあるマシンでのみ実行することを確認した場合に限ります。これは、組み込み実行可能ファイルの目的を無効にします...私は、このプログラムを、どこにでも置いてバイナリとして起動できる一種のサーバーとして人々に渡すことができることを望んでいました。これが機能するためにライブラリをインストールする必要がある場合は明らかです、サーバーは完全にスタンドアロンではありません!
プログラムが依存する dll ファイルを mkbundle に強制的に含める方法はわかりましたが、MonoPosixHelper は dll として存在しません。これは Linux 専用のライブラリであり、共有ライブラリとしてのみ存在します。バンドルを静的に埋め込むように「強制」する方法を知っている人はいますか?
これが役立つ場合、私の小さなコンパイル スクリプトは次のとおりです。
次に、IdaTester を実行します。これは、libMonoPosixHelper ライブラリが見つかるプラットフォームでは機能しますが、libMonoPosixHelper がインストールされていないプラットフォームで実行している場合、そのライブラリを動的にロードしようとすると実行時に失敗します...
linux - Linuxでインフィニバンド受信完了を待つ最良の方法は?
Isis2 (isis2.codeplex.com) を移植して、Infiniband 動詞をより有効に活用し、コードを実行しています。ただし、IB は、一連の受信バッファーを送信し、受信が完了すると、受信データを処理する非同期受信モデルを中心にしています。
ポーリングが遅い: たとえば 2 ミリ秒のブロッキング待機を使用すると、IB データが表示されるまでに 2 ミリ秒も遅延する可能性があります。それは解決策ですが、貧弱なものです。私が本当に望んでいるのは、IB 完了レコードが完了するまで待ってから、スレッドを即座に起動させる方法です (Windows ではこれは簡単ですが、Linux ではそれほど自然ではありません)。誰もこれを行う方法を知っていますか? Verbs を使用する場合、IB ファイル記述子がないため、明らかに select() を使用できません。
multicast - isis2 アプリケーションの接続に失敗しました
isis2 を使用してレプリケート アプリケーションを開発しています。これは、アプリケーションを実行している 2 つのホストをルーター経由で接続することによって機能します。これら 2 つのホストをイーサネット ケーブルでエンドツーエンドで接続しようとしましたが、失敗しました。以下はエラー例外です:
働くことは可能ですか?この接続は IP マルチキャストと互換性がありませんか?
c++ - ns-3 の Isis2 とブリッジ タップ
したがって、ns-3でIsis2をシミュレートする必要があります。(少なくとも準リアルタイムのミッション クリティカルな動作が必要なため、Isis2 を少し変更し、いくつかの C/C++ コードでラップします)
私はそのいずれも実装していないので、これが適切な方法であるかどうかを知ることは興味深いでしょう. 散発的なwifi(アドホック)動作中のコンセンサスのパフォーマンスを特に監視する必要があります。
Isis2 のインスタンスごとにマシンを仮想化し、Tap bridge( モデルを使用して ns-3 チャネルのトラフィックを分析するのは理にかなっていますか? (また、各インスタンスのイベントをログに記録します。さまざまなデータを統一されたプレゼンテーション)
c++11 - C++ 11/14 可変個引数テンプレートは、関数への引数を反復処理できますか?
可変個引数テンプレートを使用して、アトミック マルチキャスト ライブラリ (isis2.codeplex.com) である Isis2 の静的型情報をキャプチャしています。一部の Isis2 イベントはアップコール経由で配信されます。たとえば、コーディングする場合
次に、グループ g で文字列と Foo オブジェクトを含む更新を含むマルチキャストを受信すると、Isis2 は Foo オブジェクトのローカル インスタンスを構築し、適切な引数を使用してこのラムダをアップコールします。
これが私のパズルです。OrderedSend への引数をスキャンするための可変長コードがあり、メッセージの作成に必要な静的型情報を取得できます。最終的に、実際の OrderedSend メソッドに引数の 1 次元配列を渡します。それぞれの引数の型、ポインター、またはデータまたはオブジェクトへの安全な参照、およびオブジェクトの場合はマーシャリング メソッドのアドレスが含まれます。しかし、可変個引数テンプレートを使用してラムダをスキャンするには、ハンドラのベクトルに追加されるオブジェクトがラムダであるという意味で、関数の「内部引数リスト」を調べる必要があります。type_traits メソッドは、タイプ「関数」のオブジェクトです。ラムダの引数リストから、string 型と Foo 型を探しています。しかし、私が見る限り、type_traits.h には引数リストにアクセスするためのものが何もありません。
GCC-11 固有のオプションは、typeid をアンマングルし、結果の文字列を解析することです。しかし、コンパイル時にラムダの引数リストにアクセスできるようにする可変個引数テンプレート機能はありますか?
anaconda - Fedora 35 OS (プロトコル バッファ ランタイム ライブラリ) の ISIS エラー protobuf
私はISISを初めて使用します。
./qview アプリケーションを実行すると、次のエラーが表示されます。
なぜこのエラーが発生するのか疑問に思っています。助けてください。
java - JDO Entity フィールドに Lombok NonNull アノテーションを追加した後のコンパイルの失敗
Apache Isis 2 SimpleApp JDO プロジェクト ( https://github.com/apache/isis-app-simpleapp/tree/jdo ) に基づいて、クラスを少し変更して、Lombok を使用してSimpleObject
一部のフィールド (name
および) を null 不可としてマークしようとしましたnotes
注釈@NonNull
。これにより、予期せずコンパイルが失敗します
関連する GitHub アクション: https://github.com/a-st/isis-app-simpleapp/runs/5330590432
DataNucleus によって生成されたクラスisis-app-simpleapp/module-simple/target/generated-sources/annotations/domainapp/modules/simple/dom/so/QSimpleObject.java
は次のようになります
Visual Studio Code によると、次の行が問題を引き起こしています ( Illegally placed annotation: type annotations must directly precede the simple name of the type they are meant to affect (or the [] for arrays)Java(1610613796)
)
ソース コードはhttps://github.com/a-st/isis-app-simpleapp/tree/jdo-lombok-nonnullにあります。