Hi list,

Sorry for raising another thread on the topic. This is the original thread:
https://lists.quagga.net/pipermail/quagga-dev/2014-November/011795.html

The 6WIND VRF patch uses one daemon to manage all protocol instances/VRFs,
named here *all-inst-in-1-daemon* or *N-in-1*.

There's another thought saying why not just starting multiple daemons, each
daemon for one protocol instance, called here *1-daemon-per-inst* or *1-for-1*.

The main discussion is around which is better, N-in-1 or 1-for-1? While, many
comments indicate the preference with support from only experiences.

So I raise this new thread to place the practice/test statistics and then
lighten the choice.

Any comment and test result are appreciated.

This is the test topology (per VRF):

        NUT1 zebra with 5 static routes
          |  ospfd advertising the static routes
          |
          | virtual ethernet
          |
          |  zebra with 5 static routes
        NUT2 ospfd advertising the static routes

I have two same machines, with Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz
(4 cores) and 4G memory on each machine.

If the number of instance (I mean the instance pair zebra + ospf here) is N,
then:
    for N-in-1: there will be (1 zebra + 1 ospfd)
    for 1-for-1: there will be (N zebra + N ospfd)

- Memory consumption:

    Num. of inst N-in-1 1-for-1
    ============ ====== =======
    1            90M    90M
    30           200M   2.7G
    100          520M   --

    For 1-for-1, I can not start more instances if the required memory
    exceeds 4G.

- Time consumption to starting all daemons:

    Num. of inst N-in-1 1-for-1
    ============ ====== =======
    1 <1s <1s
    30 <1s    3s
    100 <1s    --

For 1-for-1, it took about 1s to start (10 zebra + 10 ospfd) in average.

- CPU load: very low in both cases.

From my point of view:
(1) For those users who need only several instances (memory consumption MAY
    be sensitive), which would be preferred, 100M or 1G?
(2) For those users who need tens of instances, which would be preferred,
    300M or 5G?
(3) For those users who need 1K instances, which would be preferred, 1G or
    90G?
(4) How about 2K instances?

So I prefer the solution N-in-1.

While I know N-in-1 has the shortage that it will get more harder to keep
the stable adjacencies when there are a lot of instances (e.g 1K), though
we have technical solutions.

But, how can I know 1-for-1 does *not* have the same shortage? With N-in-1
we at least can let user have 1K instances with low memory consumption and
acceptable CPU load. But with 1-for-1, we can not even test it in the lab
(sorry, we have no machines with 100G memory).

So what in my mind is:

- For most of use cases, N-in-1 is enough, with low memory consumption and
  acceptable CPU load.

- For special use cases which need amount of instances (e.g. 2K), we may
  need N-in-N, that is:

    1 zebra + M protocol daemons (N instances in each daemon)

  This is mostly the mix of N-in-1 and 1-for-1 - and this should be the
  final status.

(An explanation: I made the tests with 6WIND quagga, where each daemon needs
about 45M bytes. Presently the open source quagga daemon needs about only 22M bytes. But, I believe that the memory consumption will grow bigger and bigger
when we are adding new features.)

Thanks and best regards,
Feng Lu

_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to