You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ATRONIX: Fix the poor performance in network writing
The poor performance is hit when there is only one active port with a
big packet (> 64k bytes) to write. The network driver will split the
packet into 32k chunks, and only send the first chunk before returning
RD_PEND. When N_wait checks for signals from this port, it sees no
signal (write is not done yet), and thus the wait time is doubled, and
OS_Wait is called.
In OS_Wait, default Poll_Default is called, which goes through all
pending requests for the device. Because the packet is so big, after a
second "write", the packet is still not sent completely, and the status
remains the same: DR_PEND, which causes Poll_Default mistakenly thinks
the device is inactive, and then OS_Wait starts waiting with the doubled
wait time. The wait time could get doubled further until its max if the
packet is quite big.
The fix is in two folds:
1. Introduce a new flag RRF_ACTIVE, to mark the request as active in
case that partial data is written
2. Modify Poll_Default funcntion to check RRF_ACTIVE in
addition to the current DR_DONE/DR_ERROR.
So when the data is partial written, Poll_Default will return "TRUE",
which causes OS_Wait to return immediately, no matter how long the "wait
time" is.
(cherry picked from commit 4b5faab)
0 commit comments