问题标签 [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 发送。接收,同样的处理:接收或 ReceiveAsync 到一个 byte[] 对象,然后复制到文件中的目标位置。” 这将比硬件可以承受的速度慢。
事实证明,在 .NET 上,我可以绕过正常的内存保护。我构建了自己的映射文件包装器(实际上基于哥伦比亚研究人员几年前发布的一个)。我拉入 Win32Kernel.dll 库,然后使用 Win32 方法映射我的文件,启动套接字发送和接收调用等。通过一些黑客攻击,我可以通过这种方式模仿 .NET 异步 I/O,我最终一些相当干净且完全用 C# 编码的东西,没有任何 .NET 甚至将其识别为不安全的代码。我将我的映射文件视为一个大的非托管字节数组,避免了所有不必要的复制。显然我会保护我的 Isis2 用户的所有这些;他们不会知道的。
现在我们解决了我的问题的症结所在:在 Linux 上,我显然无法加载 Win32 内核 dll,因为它不存在。所以我需要使用核心 Linux O/S 调用来实现一些基本功能: fmap() 调用将映射我的文件。Linux 也有自己的异步 I/O 形式:对于 Infiniband,我将使用 Mellanox 的 Verbs 库,对于 UDP,我将使用原始 IP 发送和完成时的信号(“中断”)。丑陋,但我想我可以让它工作。再次,我将尝试将所有这些包装起来,使其看起来尽可能像标准异步 Windows 异步 I/O,以便 Isis2 本身的代码清洁,并且我将对最终用户隐藏整个非托管、不安全的混乱。
由于我将一次发送一个千兆字节左右的数据块,因此一个关键目标是按顺序发送的数据最好按照我发布异步接收的顺序接收。显然我不得不担心不可靠的通信(导致东西最终被丢弃,然后我必须复制)。但是,如果没有任何内容被丢弃,我希望我发送的第 n 个块最终位于第 n 个接收区域......
所以这是我的问题:有人已经这样做了吗?有人对 Mono 如何实现 .NET 大量使用的异步 I/O 调用有任何提示吗?我大概应该这样做。有没有人对如何以最小的痛苦做到这一点有任何建议?
还有一个问题:Win32 仅限于 2Gb 的映射文件。云系统通常会运行 Win64。关于如何最大限度地提高互操作性,同时允许运行 Win64 的人充分利用 Win64 的任何建议?(一种O/S反射问题……)
c# - 如何说服 mkbundle 包含 MonoPosixHelper?
我正在使用 mkbundle 并尝试创建一个使用 Isis2 的小程序 IdaTester 的嵌入式版本。该系统反过来使用依赖于 MonoPosixHelper 的 Mono 功能
我的问题是 mkbundle 无法识别依赖关系,我最终得到了一个仍然需要动态链接到 ~/bin/lib/libMonoPosixHelper.so 的可执行文件,当我将此可执行文件移动到我没有的系统时会导致问题安装了 Mono。实际上,bundle 缺少它应该静态链接的东西之一。
我的可执行文件确实有效,但前提是我确保仅在“正确位置”具有动态库的机器上运行它。这违背了嵌入式可执行文件的目的......我希望能够将这个程序作为一种服务器提供给人们,他们可以放在任何地方并作为二进制文件启动,显然如果他们需要安装库以使其工作,服务器并不完全独立!
我看到了如何强制 mkbundle 包含程序所依赖的任何 dll 文件,但 MonoPosixHelper 不作为 dll 存在;这是一个仅限 Linux 的库,仅作为共享库存在。有谁知道“强制”捆绑包静态嵌入它的方法?
如果这有帮助,我的小编译脚本如下:
然后我运行 IdaTester;这适用于可以找到 libMonoPosixHelper 库的平台,但如果在未安装 libMonoPosixHelper 的平台上运行,则尝试动态加载该库时将在运行时失败...
linux - 在 Linux 上等待 infiniband 接收完成的最佳方法是什么?
我们正在移植 Isis2 (isis2.codeplex.com) 以更好地使用 Infiniband 动词并让我们的代码运行。但是,IB 面向异步接收模型,在该模型中您发布一堆接收缓冲区,然后在接收完成时处理接收到的数据。
轮询很慢:如果我使用阻塞等待,比如说 2 毫秒,我可能会延迟 2 毫秒才能看到 IB 数据。所以这是一个解决方案,但很糟糕。我真正想要的是一种等待 IB 完成记录最终确定然后让我的线程立即唤醒的方法(在 Windows 上这很容易......在 Linux 上它不那么自然)。有谁知道如何做到这一点?使用动词时,没有任何 IB 文件描述符,所以显然我不能使用 select()
multicast - isis2 应用程序连接失败
我使用 isis2 开发了一个复制应用程序。它通过路由器连接运行应用程序的两台主机来工作。我尝试通过以太网电缆端到端连接这两个主机,但失败了。以下是错误异常:
有可能工作吗?此连接是否与 IP 多播不兼容?
c++ - ns-3 中的 Isis2 和桥接抽头
所以我需要在ns-3中模拟Isis2。(我还要稍微修改 Isis2,用一些 C/C++ 代码包装它,因为我至少需要一个准实时的关键任务行为)
由于我还远未实现任何这些,因此知道这是否是一种合适的行为方式会很有趣。我需要在零星的 wifi (ad hoc) 行为期间专门监控共识的性能。
为 Isis2 的每个实例虚拟化一台机器然后使用 tap bridge( 模型并分析 ns-3 通道中的流量是否有意义?(我还要记录每个实例上的事件;将各种数据组合成一个统一展示)
c++11 - C++11/14 可变参数模板可以迭代函数的参数吗?
我正在使用可变参数模板来捕获 Isis2 中的静态类型信息,Isis2 是一个原子多播库 (isis2.codeplex.com)。一些 Isis2 事件是通过 upcall 传递的。例如,如果您编写代码
然后在组 g 中接收到一个多播,其中包含一个带有字符串和一个 Foo 对象的更新,Isis2 将构造一个 Foo 对象的本地实例,然后使用适当的参数调用这个 lambda。
所以这是我的难题。我有可变参数代码来扫描 OrderedSend 的参数,并且可以捕获构建我的消息所需的静态类型信息。我最终将一个一维参数数组传递给真正的 OrderedSend 方法,每个参数都有它的类型、指针或对数据或对象的安全引用,而对于一个对象,则是一个编组方法的地址。但是要使用可变参数模板来扫描 lambda,我需要查看函数的“内部参数列表”,因为添加到处理程序向量的对象是 lambda:type_traits 方法只会说它是“函数”类型的对象。我从 lambda 的参数列表中寻找字符串和 Foo 类型。但是据我所见, type_traits.h 缺少访问参数列表的任何内容。
GCC-11 特定的选项是解开 typeid 并解析结果字符串。但是是否有一个可变参数模板功能可以让我在编译时获得 lambda 的参数列表?
caching - Are one-sided RDMA reads atomic for single cache lines?
My group (a project called Isis2) is experimenting with RDMA. We're puzzled by the lack of documentation for the atomicity guarantees of one-sided RDMA reads. I've spent the past hour and a half hunting for any kind of information at all on this to no avail. This includes close reading of the blog at rdmamojo.com, famous for having answers to every RDMA question...
In the case we are focused on, we want to have writers doing atomic writes for objects that will always fit within a single cache line. Say this happens on machine A. Then we plan to have a one-sided atomic RDMA reader on machine B, who might read chunks of memory from A, spanning many of these objects (but again, no object would ever be written non-atomically, and all will fit within some single cache line). So B reads X, Y and Z, and each of those objects lives in one cache line on A, and was written with atomic writes.
Thus the atomic writes will be local, but the RDMA reads will arrive from remote machines and are done with no local CPU involvement.
Are our one-sided reads "semantically equivalent" to atomic local reads despite being initiated on the remote machine? (I suspect so: otherwise, one-sided RDMA reads would be useless for data that is ever modified...). And where are the "rules" documented?
anaconda - Fedora 35 OS 中的 ISIS 错误 protobuf(Protocol Buffer 运行时库)
我是ISIS的新手。
当我运行 ./qview 应用程序时,会显示以下错误。
我想知道为什么我会收到这个错误。请帮忙。
java - 将 Lombok NonNull 注释添加到 JDO 实体字段后编译失败
基于 Apache Isis 2 SimpleApp JDO 项目(https://github.com/apache/isis-app-simpleapp/tree/jdo),我尝试稍微修改类以使用 LombokSimpleObject
将某些字段(name
和)标记为不可为空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