【问题标题】:Can I prevent ZeroMQ from occupying file descriptors?我可以防止 ZeroMQ 占用文件描述符吗?
【发布时间】:2016-07-19 06:29:59
【问题描述】:

我有一个设置,其中一个主进程正在设置 ZMQ_ROUTER,然后分叉许多子进程,然后连接到该路由器。

每当一个子zmq_connect() 到主控时,就会占用一个文件描述符。

但是,这将交互进程的数量限制为允许的文件描述符的数量(每个进程)。对我(linux)来说,目前只有 1024。

这对于我的预期用途(多智能体/群体模拟)来说太小了。


回答

您不能,除非使用线程间套接字类型(使用 inproc:// 传输类)。所有其他协议每个连接使用一个文件描述符。

如果该应用程序有多个服务(例如可以建立多个tcp://<address:port> 连接),则减少每个应用程序所需文件描述符数量的一种新方法似乎是使用资源属性resource property,它允许一种将多个服务组合到一个端点。

【问题讨论】:

  • 拥有消息传递智能群听起来很有吸引力。无论如何,亚历克斯,方向陷入双重麻烦,痛苦来自ZMQ_FD意义上的PTIMEPSPACE方向,并且可能来自EXPTIME的恐怖可能来自消息流 -- 您的目标数字的数量级是多少? 1E4? 1E5? 1E6?很想听到更多关于您的项目/研究的信息,亚历克斯。
  • 是的,我知道将给定任务拆分为多代理可能会增加复杂性。我听到了两个方向的争论;有人说“我们需要将其拆分,否则我们无法获得足够灵活/功能强大的解决方案”,其他人则说:“将其组合在一起,否则您将无法控制复杂性”。我想两者都是真的。取决于应用程序。
  • 对此本身绝对没有异议,但需要知道您的群体将增长到的预计数量级。 那么?
  • 啊,我错过了这个信息。我会说 10k 是必须的 100k 很好 上面的一切都会很棒。
  • 感谢您的澄清,100k+ 很好且可行并且作为一个主要分布式系统,可以通过进一步扩展来保持增长,具体取决于群体间代理信号的复杂程度/通信层应该是。

标签: zeromq file-descriptor distributed-system


【解决方案1】:

虫群优先:

首先,大量代理的智能解决方案需要灵活性(在 swarm 框架设计中用于添加功能)和效率(对于 >scalabilityspeed ) 以实现尽可能快的模拟运行时间,尽管有 PTIMEPSPACE 障碍物,在更复杂的代理间通信方案中可能会进入 EXPTIME 区域。


效率下一个:

一开始,我的猜测是宁愿使用和定制一个轻量级的基于 POSIX 的信号/消息传递框架nanomsg -- a younger sister of ZeroMQ from Martin SUSTRIK, co-father of ZeroMQ——其中一个 Context() 更少的设计加上像 SURVEYBUS 消息原型这样的附加功能,对于使用您自己的软件设计的问题域特定消息/信令协议的群特别有吸引力:


100k+ file_descriptors

嗯,你需要勇气。可行,但要袖手旁观,这将需要在内核中进行手动操作,调整系统设置,并且您将通过增加开销来为这样的规模付出代价。

Andrew Hacking has explained both the PROS and CONS of the "just" increasing fd count ( not only on the kernel side of the system tuning and configuration ).

其他需要考虑的因素是,虽然某些软件可能使用 sysconf(OPEN_MAX) 来动态确定进程可能打开的文件数量,但许多软件仍然使用 @ 987654337@ 库的默认 FD_SETSIZE通常是 1024 个描述符,因此无论管理上定义的上限如何,打开的文件都不会超过那么多.

Andrew has also directed your kind attention to this, that may serve as an ultimate report on how to setup a system for 100k-200k connections.


每台主机超过 100k 的静态规模是否对群体模拟有任何实际意义?

虽然“技术上”仍然可行,但还有更多限制——即使 nanomsg 也无法推送超过 1.000.000 [MSGs/s],这对于大多数应用程序来说已经足够好了,但不能跟上消息发送的本机速度。引用说明了一些 ~6 [us] 用于 CPU 内核到 CPU 内核的传输延迟,如果用户设计的群处理应用程序无法在某些 3-4 [us] 下进行发送循环性能上限不会引起问题。


如何扩大规模?

分布式多主机处理是攻击群体静态规模的第一个维度。接下来需要引入 RDMA 注入,以便摆脱分布式消息/信令实现中任何堆栈处理的性能瓶颈。是的,这可以将您的 Swarm 系统移动到纳秒级延迟区域,但代价是构建 HPC/高科技计算基础架构(如果您的项目发起人可以调整,这将是一个很棒的项目此类项目的融资 -- + 请让我知道如果,我会非常渴望加入这样的群体智能 HPC 实验室),但值得在决定架构之前了解这个含义并了解最终限制是从一开始就做好的关键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多