Closed motorman-ibm closed 6 days ago
This should move to enhancement. You (as a team) can also choose to close it. My understanding is you run fast enough per pod on a performance system. If you ever end up having to look at a per pod performance bottleneck I think it is better to have left this somewhere just so we document a possible solution.
This issue had no activity for too long - it will now be labeled stale. Update it to prevent it from getting closed.
This issue is stale and had no activity for too long - it will now be closed.
More information - Screenshots / Logs / Other output
Follow-up on slack discussion with Guy (and pasting stuff here)
Basic issue - tcp stack handling in current implementation of Noobaa with nodejs limits processing rate of a single Noobaa endpoint to 4GB/sec (roughly). It would be better if a single endpoint could run faster and saturate the physical node - that reduces redundant, independent cache pools required by each of the multiple endpoints in a node. (like the "ls" cache)
worker threads are inside the GPFS stack all the time, so that's good
But the main event loop thread is actually busy with TCP stack all the time:
Per our discussion - nodejs cluster is not a viable solution - since it forks, it has the same issue as multiple endpoints
From Guy -> What I'm thinking is that instead of using the cluster module, which hands over the entire request to the worker and therefore cannot reuse the caches, we can selectively do the hand over on read/write flows once we start streaming the data. Passing an http/tcp socket to a child process is simple - child_process_example_sending_a_socket_object so we can just execute the NSFS read-loop and write-loop in a worker that will off load the TCP work from main thread.
This will probably require us to boost the number of worker threads, but that will be empirical testing after this change is implemented