ovn-remote-probe-interval 作用解释

88 阅读1分钟

ovn-remote-probe-interval 这个配置只在 ovn 的代码中有引用,libovsdb 和 ovs 代码中完全不涉及



      <dt><code>external_ids:ovn-remote-probe-interval</code></dt>
      <dd>
        <p>
          The inactivity probe interval of the connection to the OVN database,
          in milliseconds.
          If the value is zero, it disables the connection keepalive feature.
        </p>

        <p>
          If the value is nonzero, then it will be forced to a value of
          at least 1000 ms.
        </p>
      </dd>
      

image.png

sb db idl 相关探测

image.png


(v.v) ➜  ovn git:(main) grep set_idl_probe_interval -r *
controller/ovn-controller.c:    set_idl_probe_interval(ovnsb_idl, remote, interval);
controller-vtep/ovn-controller-vtep.c:    set_idl_probe_interval(ovn_sb_idl, ovnsb_remote, interval);
ic/ovn-ic.c:    set_idl_probe_interval(ovn_sb_idl, ovnsb_db, interval);
ic/ovn-ic.c:    set_idl_probe_interval(ovn_nb_idl, ovnnb_db, interval);
ic/ovn-ic.c:    set_idl_probe_interval(ovn_icsb_idl, ovn_ic_sb_db, ic_interval);
ic/ovn-ic.c:    set_idl_probe_interval(ovn_icnb_idl, ovn_ic_nb_db, ic_interval);
lib/ovn-util.h:void set_idl_probe_interval(struct ovsdb_idl *idl, const char *remote,
lib/ovn-util.c:void set_idl_probe_interval(struct ovsdb_idl *idl, const char *remote,
northd/ovn-northd.c:        set_idl_probe_interval(ovnnb_idl_loop.idl, ovnnb_db, interval);
northd/ovn-northd.c:        set_idl_probe_interval(ovnsb_idl_loop.idl, ovnsb_db, interval);
utilities/ovn-ic-sbctl.c:    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
utilities/ovn-ic-nbctl.c:    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
utilities/ovn-dbctl.c:    set_idl_probe_interval(idl, db, DEFAULT_UTILS_PROBE_INTERVAL_MSEC);
utilities/ovn-dbctl.c:    set_idl_probe_interval(ctx->idl, db,
(v.v) ➜  ovn git:(main) 

可以看到在常规场景以及 ic 场景中, nb sb 的 probe 应该都是该参数控制,探测频率过高会导致 cpu 压力,而且 ovn-northd 本身可能会因为流表计算经常看到 cpu 100%,如果设置为 10 毫秒级可能会导致来不及分时间片执行,导致 probe 失败,从而导致频繁触发重新选举。

image.png