On Mon, Jun 10, 2019 at 7:50 PM Axel Wagner <axel.wagner...@googlemail.com> wrote: > > > > On Mon, Jun 10, 2019 at 11:28 PM Tong Sun <suntong...@gmail.com> wrote: >> >> There is a second test well before your this post, which is a direct >> translation of Perl code, that is now reading and writing directly to >> a socket. Hanging on to the first test method and not referring to the >> second test is not a very constructive way of discussion, let alone >> using words like "ridiculously ...". > > > The updated test only changes *both* not to implement a web server. My point > was, that this is not a realistic test case.e > >> >> Over 90% of the code are NOT doing regular expression matching. >> Focusing *only* on regular expression, not >90% of the rest, is not >> very convincing but miss the elephant in the room, at least seems to >> me. > > > The amount of SLOC is not important, however, but where time is spent. When > adding some basic CPU profiling to the Go code, it spent ~10% of its time > RE-matching, ~10% in various allocation-related activities, ~75% blocking in > syscalls and the rest in other various network related runtime code. That's > pretty much what I meant - in terms of actual CPU time used, RE-matching (and > some allocation) is pretty much all that's happening. Now, I don't know how > to profile Perl code and I'll admit that the netpoller etc. are part of the > language and as such matter for the comparison. But the more direct the > translation becomes, the less these code-paths will differ in performance and > the more realistic your scenario gets (in terms of concurrency used and > required), the more I'd expect Go to be favored by it. > >> Please don't get personal and emotional over technical discussions, >> and please refrain from using terms like "ridiculously simple" or >> "reading in tea-leafs" in future discussions. It is inappropriately >> condescending, thus not the correct attitude of communication. It >> does not align with the code of conduct of this mlist, and neither of >> google's, I believe. >> >> If you have test results that contradict with mine, please show me >> yours -- Let's talk the data, and not let the emotion get in the way >> of technical discussion, and fact the fact, whatever it is. > > > I am not contradicting your data, I'm contradicting your conclusions. That's > why I said "reading tea-leafs": You seem to look at the same data and come to > conclusions that just don't connect for me. For example, your original post > says that the mean response time for your Perl code is 110.875ms resp. > 0.222ms and for your Go code it's 83.229ms resp. 0.166ms - and yet you claim > that your test shows that the mean response time is 8x higher for your Go > code than your Perl code. > > And in your second post, you use `hey`, but then just… throw the results out, > because you don't understand them (AIUI). > > I just don't know how I'm supposed to handle that discrepancy. All of this > just looks like really bad science to me. ISTM that defining the criteria > beforehand and designing the test to measure exactly those criteria is the > most reasonable way to reconcile that. If we use "mean response time over X", > it seems that so far your Go code is coming out ahead. And note that *I* > didn't make any claims about the relative strengths of programming languages > here. IMO the onus is clearly on you to show your work when making these > claims. I don't actually care.
I think you should at least try to apologize for your rude behavior, but again you are ignoring all others' valid reasoning and concluding your make sense while others don't. That's a very good point to end the discussion. I'll not be responding to your trolls. >> > Anyway, all of that being said: While I don't think the test you devised >> > allows the broad generalizations you are making, ultimately I don't have >> > any stakes in this (which is why I haven't responded further on the blog >> > post). If you like Perl and think it performs good enough or better for >> > your use case - then go ahead and use Perl. No one here will begrudge you >> > for it. >> >> As I've comment in the blog many times, I'm not trying to prove Perl >> performs better than Go. On the contrary, I was trying to improve Perl >> performs with Go, that's why the whole thing get started, as I have >> replied to your comment in the blog:"that's why I was rewriting the >> Perl code to Go". >> >> It is still the case, and I want to try out everyone's suggestion to >> see how things can improve. >> >> Moreover, if you have taken a look at my second test, you will >> understand my other goal is to make it clear "who and what to trust". >> Because if you have taken a look at the httperf test result I posted >> to this mlist before you reply, you may have realized that, of all the >> performance testing tools I've used so far, all are suggesting Perl >> performs better than Go, except for httperf. So maybe the performance >> testing tools are biased toward Go, and I made it clear in my second >> blog that I want to get to the bottom of it. >> >> > All of that being said >> > >> > IMO this is just not a meaningful test. Or its results are totally >> > unsurprising. >> >> Again, I was trying to improve Perl performs with Go. That >> "ridiculously simple" Perl code is the foundation of the Debian dbab >> package, and I was trying to improve it. >> >> It might be meaningless to you but it is perfectly meaningful to me. >> Please don't be so judgmental. >> >> > On Sun, Jun 9, 2019 at 4:54 AM Justin Israel <justinisr...@gmail.com> >> > wrote: >> >> >> >> I'm wondering about a couple factors in this comparison that seem to make >> >> a difference in my local test: >> >> >> >> I think perl sockets are write buffered. So would the equivalent be to >> >> wrap the net.Conn in bufio.NewWriter(c) and flush before the Close? >> >> Since this is a straigh-line test where both servers are not using >> >> concurrent handling of connections (uncommon for a Go server even on 1 >> >> core), would it not make sense to run the Go server with GOMAXPROCS=1? >> >> >> >> - Justin >> >> >> >> On Saturday, June 8, 2019 at 1:36:49 AM UTC+12, Tong Sun wrote: >> >>> >> >>> I had always believed that the web projects build with Go should be much >> >>> faster than Perl, since Go is a compiled language. >> >>> >> >>> However that belief was crushed brutally last night, when I did a >> >>> comparison -- the Go implementation is 8 times worse than the Perl! -- >> >>> the mean response time jumped from 6ms to 48ms. >> >>> >> >>> I know this is the simplest possible web server, but still, when it >> >>> comes to simple web servers like this, I have to say that Perl performs >> >>> much better than Go. >> >>> >> >>> I don't think there is much I can twist on the Go side, since it can't >> >>> be more simpler than that. However, I also believe it won't hurt to ask >> >>> and confirm. So, >> >>> >> >>> Have I missed anything? Is it possible for me to make my Go >> >>> implementation anywhere near the Perl's performance? >> >>> >> >>> Thanks -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAMmz1OcZYi9jewmewAB-JSQCF-c3ctaUKO%3Ds1Stf9HBXG%3Dhcbg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.