OMNET++ - 控制何时更新矢量文件

问题描述

我想先解释一下我的 Omnet++ 在模拟过程中编写 .vec 文件时的行为。

我的 Omnet++ 版本:5.6.2

操作系统:Windows 10

当我开始在快速模式下为我的网络运行模拟片刻时,我注意到 .vec 和 .vci 文件已创建,但只有标题。当模拟继续运行时,.vec 文件的大小和内容没有任何变化。只有当我在 Omnet++ 文件资源管理器中双击 .vec 文件并打开 Omnet Analysis 时,才会将矢量数据写入 .vec 文件中。从那一刻起,我只能在关闭时看到更新的 .vec 文件内容和大小,删除创建的 .anf 文件,然后双击再次打开 .vec 文件

所以我的问题是:

  1. 我不确定这是否是 omnet++ 在模拟期间更新 .vec 文件时的认行为,或者我的配置有什么不同?
  2. 如果这是预期的行为,有什么方法可以改变它(即,我想要的是 .vec 文件内容自动保持最新,而我不必再次关闭删除和重新打开 anf 文件再)?

非常感谢。

解决方法

.vec 文件的内容与您在 IDE 中执行的操作无关。模拟运行时不断写入 .vec 文件。更准确地说,它是将数据写入内存缓冲区,一旦缓冲区已满,它将所有数据转储到文件中。每当您尝试使用该 .vec 文件时,IDE 都会及时获取该文件的当前状态。简而言之,IDE 不准备连续重新读取和重新评估所有输出文件的内容。目的是在模拟结束时分析结果。

,

基于 Rudi 关于控制在写入 .vec 文件之前要保存的最大数据量的内存缓冲区的回答,我在 Omnet++ 的手册中进行了后续搜索,并找到了控制该内存大小的确切配置参数来自 Apdendix H 的缓冲区。这是 .ini 文件中的以下每次模拟运行设置:

output-vectors-memory-limit = ,unit=B,默认值:16MiB
每次模拟运行设置
可用于缓冲输出向量的总内存。较大的值产生较少碎片化的矢量文件(即导致矢量数据被分组为更大的块),因此允许以后更有效的处理。还有每个向量的限制,请参阅**.vector-buffer。

我也做了一个测试,将值改为 8MiB,结果如我所料:Omnet++ 确实更频繁地更新输出 .vec 文件。