Thanks Sergey, the patch works great so far. I tested the file example with your patch applied and, as predicted, the CPU instruction count went down by about 60%. CPU load as shown by top also decreased by about the same factor and download speed has increased, especially with multiple parallel downloads. 2 parallel downloads have the same total transfer rate as a single download, without the patch it decreased rapidly, limited by the CPU usage.
An analysis with callgrind now shows FD_* macros as the biggest impact on CPU load, and i don't think, there's a way to save anything there. Am Freitag, 19. September 2014 23:57:17 UTC+2 schrieb Sergey Lyubka: > > Thanks Macel. > Could you try on attached patch please? > > > > On Thu, Sep 18, 2014 at 12:19 PM, Marcel Wirtz <[email protected] > <javascript:>> wrote: > >> The problem is definetly not IO related (And no other software I know has >> such a high CPU load transferring data from a file to a socket). >> >> A short analysis of the problem: >> >> in transfer_file_data() read is called to read data from the file to a >> buffer (0.29% of the total CPU instructions). Then ns_send() is called. >> Here the buffer is copied to another buffer (59.27% CPU instructions in >> memcpy). send() is called by ns_write_to_socket() and uses 0.49% of the CPU >> instructions. So the real problem is not reading from the file or writing >> to the socket, but the internal copy of the buffer in ns_send(). If there >> would be a way not to copy every byte of the file internaly before sending, >> the CPU load should be smaller (about 60%, which would be better by far). >> >> Am Mittwoch, 17. September 2014 09:54:11 UTC+2 schrieb Sergey Lyubka: >>> >>> Well if that is memcpy, then I don't find it surprising. >>> Server is mostly doing data copying, reading from file and copying to >>> the socket. >>> >>> >>> >>> On Sat, Sep 13, 2014 at 12:11 PM, Marcel Wirtz <[email protected]> wrote: >>> >>>> Yes >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "mongoose-users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at http://groups.google.com/group/mongoose-users. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "mongoose-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at http://groups.google.com/group/mongoose-users. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "mongoose-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/mongoose-users. For more options, visit https://groups.google.com/d/optout.
