How to improve FLEET 's performance among multi-nodes?

hi,

I have 4 nodes of QNX 4.25 ,and i want to transfer data through FLEET.Every
time i want to send the same data from 1 node to the others at almost the
same time.

I hope FLEET has the same function as the TCP/IP’s broadcast ,but which is
process to process

,then i use the method below:

1)On node 1
send1 ,send2 ,send3 — Three processes are created and blocked
prepairing to send the message(date) to one of the node of the other three
nodes.

control — Then i creat anoter prosess whose duty is to wake up the above
three processes.

2)on node 2, 3, 4
receive1, receive2, receive3 — Then i creat anoter prosess whose duty is
to wake up the above three processes.


| control |
NODE1 | |
| send1 send 2 send3 |
| \ | / |
----------- NIC-----------
|

  • ---------- HUB 100M ------------
    | | |
    |-------NIC----| |----NIC-------| |–NIC--------|
    | / | | | | | \ |
    | receive1 | | receive2 | | receive3 |
    || || |_____________|
    NODE2 NODE3 NODE4

3)Every process’ priority is set at 29!The HUB and the NICs all work at
100M!

4)But it takes so long time to finishe the task! It’s about 530us!
BTW:I use the oscilloscope to measure the time!

Even it is longer than the time to send the date in series through only one
process.(NODE1)
{…
send(2,…);
send(3,…);
send(4,…);

}

It’s about 310 us!

finally i change the priority of the Net and the Net.ether905 to 29 and
28,and my process to 27 , ,which sends the data. Adding the other two
network cards on NODE 1 ,thus node1 can build three VC directly to NODE2 ,
NODE3 and NODE4. but the question isn’t solved!

The performace is alway poorer than doing the whole thing just in one
process sends the data in series order through one network card !

Who can offer a good idea to send the messages from node 1 to node2,3,4 in a
shorter time? Any help and sugestion will be appreciated!


ycao

ycao <ycao@mail.ipp.ac.cn> wrote:

hi,

I have 4 nodes of QNX 4.25 ,and i want to transfer data through FLEET.Every
time i want to send the same data from 1 node to the others at almost the
same time.

I hope FLEET has the same function as the TCP/IP’s broadcast ,but which is
process to process

,then i use the method below:

1)On node 1
send1 ,send2 ,send3 — Three processes are created and blocked
prepairing to send the message(date) to one of the node of the other three
nodes.

control — Then i creat anoter prosess whose duty is to wake up the above
three processes.

2)on node 2, 3, 4
receive1, receive2, receive3 — Then i creat anoter prosess whose duty is
to wake up the above three processes.


| control |
NODE1 | |
| send1 send 2 send3 |
| \ | / |
----------- NIC-----------
|

  • ---------- HUB 100M ------------
    | | |
    |-------NIC----| |----NIC-------| |–NIC--------|
    | / | | | | | \ |
    | receive1 | | receive2 | | receive3 |
    || || |_____________|
    NODE2 NODE3 NODE4

3)Every process’ priority is set at 29!The HUB and the NICs all work at
100M!

4)But it takes so long time to finishe the task! It’s about 530us!
BTW:I use the oscilloscope to measure the time!

Even it is longer than the time to send the date in series through only one
process.(NODE1)
{…
send(2,…);
send(3,…);
send(4,…);

}

It’s about 310 us!

finally i change the priority of the Net and the Net.ether905 to 29 and
28,and my process to 27 , ,which sends the data. Adding the other two
network cards on NODE 1 ,thus node1 can build three VC directly to NODE2 ,
NODE3 and NODE4. but the question isn’t solved!

The performace is alway poorer than doing the whole thing just in one
process sends the data in series order through one network card !

Who can offer a good idea to send the messages from node 1 to node2,3,4 in a
shorter time? Any help and sugestion will be appreciated!

Why can’t you use Tcpip ? Broadcast (or with Tcpip5, multicast) the message
is the most efficent way.

If you also have other process to process, then use a mix model that
for those message, use Send/Receive/Reply, and for that perticular
message you want to broadcast, use tcpip.

The large difference you will then face, is, broadcast is not as reliable
as FLEET. (node1 can’t be sure 2,3,4 got his message). If you care about
this, there are planty of TCPIP samples of how to deal with it…

Other alternatives are: instead of doing “Send()” on node1, you keep
datas in a quere, and Trigger() a proxy to let 2,3,4 know they have
data ready. 2,3,4 then Send() to node 1, and node1 just Reply() them.

This still take time, but since Reply() is not blocking, node 1 do
not need to wait until 2,3,4 confirm. (the data copied into VC buffer
and done).

-xtang

">

Why can’t you use Tcpip ? Broadcast (or with Tcpip5, multicast) the
message
is the most efficent way.

If you also have other process to process, then use a mix model that
for those message, use Send/Receive/Reply, and for that perticular
message you want to broadcast, use tcpip.

The large difference you will then face, is, broadcast is not as reliable
as FLEET. (node1 can’t be sure 2,3,4 got his message). If you care about
this, there are planty of TCPIP samples of how to deal with it…

Other alternatives are: instead of doing “Send()” on node1, you keep
datas in a quere, and Trigger() a proxy to let 2,3,4 know they have
data ready. 2,3,4 then Send() to node 1, and node1 just Reply() them.

This still take time, but since Reply() is not blocking, node 1 do
not need to wait until 2,3,4 confirm. (the data copied into VC buffer
and done).

-xtang

Thanks xiaodan Tang!

I want a reliable and realtime transfer!TCP/ip maybe not fit!

I have just tested the method that sending 0 byte fron node 2,3 ,4 o node1
and got the reply(in serials).

The performance even becomes worse. It’s about 900us!But when i change the
priority of sending and repling on all nodes to 19 ,just one blow my
Net.ether905(default is 20o),the time get shoter, which is about 185us!

The time wchich spends on tranfer data betwween two nodes ,is about 48 us.

But I want it bcomes shorter than 100us from one node to others 6 nodes! But
every time the data i send is about 30bytes.

Who has exprience in the performace of FLEET?Can it becomes reality?

ycao wrote:

"

The performance even becomes worse. It’s about 900us!But when i change the
priority of sending and repling on all nodes to 19 ,just one blow my
Net.ether905(default is 20o),the time get shoter, which is about 185us!

The driver code is executed in the context of Net/Proc so the priority
of the driver is not relevant.

The time wchich spends on tranfer data betwween two nodes ,is about 48 us.

But I want it bcomes shorter than 100us from one node to others 6 nodes! But
every time the data i send is about 30bytes.

Who has exprience in the performace of FLEET?Can it becomes reality?

Hmmm, 100us for all 6 nodes is probably not possible. This sounds like
it might be time to break out netraw, and write your own custom protocol
for this (it wouldn’t be that difficult). If you write your own
protocol you can use broadcasting, and have zero overhead.

Rennie

The performance even becomes worse. It’s about 900us!But when i change
the
priority of sending and repling on all nodes to 19 ,just one blow my
Net.ether905(default is 20o),the time get shoter, which is about 185us!


The driver code is executed in the context of Net/Proc so the priority
of the driver is not relevant.


The time wchich spends on tranfer data betwween two nodes ,is about 48
us.

But I want it bcomes shorter than 100us from one node to others 6 nodes!
But
every time the data i send is about 30bytes.

Who has exprience in the performace of FLEET?Can it becomes reality?


Hmmm, 100us for all 6 nodes is probably not possible. This sounds like
it might be time to break out netraw, and write your own custom protocol
for this (it wouldn’t be that difficult). If you write your own
protocol you can use broadcasting, and have zero overhead.

It seems an interesting work, but how can i get started ,please give me some
instruction ,hint or example?

“ycao” <ycao@mail.ipp.ac.cn> wrote in message
news:a78v77$o58$1@inn.qnx.com

Hmmm, 100us for all 6 nodes is probably not possible. This sounds like
it might be time to break out netraw, and write your own custom protocol
for this (it wouldn’t be that difficult). If you write your own
protocol you can use broadcasting, and have zero overhead.

It seems an interesting work, but how can i get started ,please give me
some
instruction ,hint or example?

  1. If you deside to use TCP/IP then check TCPIP ToolKit docs about
    broadcasting etc.
  2. If you deside to design your own protocol on top of Ethernet then check
    netraw examples from ftp://ftp.qnx.com/usr/free/qnx4/os/net/

// wbr