On Thu, Aug 01, 2024 at 09:35:13AM -0300, Fabiano Rosas wrote: > Multifd currently has a simple scheduling mechanism that distributes > work to the various channels by keeping storage space within each > channel and an extra space that is given to the client. Each time the > client fills the space with data and calls into multifd, that space is > given to the next idle channel and a free storage space is taken from > the channel and given to client for the next iteration. > > This means we always need (#multifd_channels + 1) memory slots to > operate multifd. > > This is fine, except that the presence of this one extra memory slot > doesn't allow different types of payloads to be processed at the same > time in different channels, i.e. the data type of > multifd_send_state->pages needs to be the same as p->pages. > > For each new data type different from MultiFDPage_t that is to be > handled, this logic would need to be duplicated by adding new fields > to multifd_send_state, to the channels and to multifd_send_pages(). > > Fix this situation by moving the extra slot into the client and using > only the generic type MultiFDSendData in the multifd core. > > Signed-off-by: Fabiano Rosas <faro...@suse.de>
Reviewed-by: Peter Xu <pet...@redhat.com> -- Peter Xu