Skip to content

Cycle error in handleMnCycTimeExceed on Windows 10 with network load #279

@testrunner123

Description

@testrunner123

We have openPowerlink 2.3.2 stack and Vimba camera (Ethernet) driver running on one PC with Windows 10 64-bit. Each of them are using separate network card. Both are operated at the same time. Powerlink cycle is 10ms. Camera is generating something like 62 Mbyte/s data stream. But it works.
However, if I run at the same time program communicating intern on PC with network on loopback adapter then from time to time Powerlink stack restarts communication to B&R Powerlink controller. CPU Load is low: ~12% (multicore system).

From debugging issue, I've found that it comes because function timerHdlCycleCb() signal error 30 (kErrorEdrvCurTxListEmpty) that in turn provoked "Cycle error" in handleMnCycTimeExceed(). The reason is that notification from network card driver about successful send of packets did not come. I've find out that these notifications comes ~10ms later bundled into one call of protocolSendNblComplete() protocol driver function (drv_ndis_intermediate).

From Documentation for NDIS 6.0 NdisSendNetBufferLists() function:

NDIS can collect the structures and data from multiple send requests into a single linked list of NET_BUFFER_LIST structures before it passes the list to ProtocolSendNetBufferListsComplete.

So it seems the problem is the effect of collecting callbacks in NDIS on Windows 10 under high network load. Unfortunately these callbacks play very important role in openPowerlink implementation of cycle timing.

Is there any solution for this problem?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions