From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "ry dahl" Newsgroups: gmane.comp.lang.ruby.mongrel.devel Subject: Re: [PATCH] http11: ~6% performance increase in header parsing Date: Tue, 25 Mar 2008 09:13:24 +0100 Message-ID: <3ae7f4480803250113m4aefb748o308e841cb2abec7e@mail.gmail.com> References: <20080229015309.GA9080@untitled> <20080302123712.GA13979@hand.yhbt.net> <20080306075421.GA1583@hand.yhbt.net> <3ae7f4480803060153v18e955a5j9038f93e558f81d1@mail.gmail.com> <20080308081210.GA30702@hand.yhbt.net> <20080308220220.GA27749@mayonaise> <20080325034307.GA13379@soma> Reply-To: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1206432837 24027 80.91.229.12 (25 Mar 2008 08:13:57 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 25 Mar 2008 08:13:57 +0000 (UTC) To: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Original-X-From: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Tue Mar 25 09:14:26 2008 Return-path: Envelope-to: gclrmd-mongrel-development@m.gmane.org In-Reply-To: Content-Disposition: inline X-Google-Sender-Auth: 0f78ec410f35ff21 X-BeenThere: mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Errors-To: mongrel-development-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Xref: news.gmane.org gmane.comp.lang.ruby.mongrel.devel:9 Archived-At: Received: from rubyforge.org ([205.234.109.19]) by lo.gmane.org with esmtp (Exim 4.50) id 1Je4IL-0003HH-N8 for gclrmd-mongrel-development@m.gmane.org; Tue, 25 Mar 2008 09:14:09 +0100 Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 6BF9A185861D; Tue, 25 Mar 2008 04:13:30 -0400 (EDT) Received: from wr-out-0506.google.com (wr-out-0506.google.com [64.233.184.236]) by rubyforge.org (Postfix) with ESMTP id 49122185861D for ; Tue, 25 Mar 2008 04:13:25 -0400 (EDT) Received: by wr-out-0506.google.com with SMTP id c48so2752943wra.23 for ; Tue, 25 Mar 2008 01:13:25 -0700 (PDT) Received: by 10.150.139.15 with SMTP id m15mr3793175ybd.99.1206432804610; Tue, 25 Mar 2008 01:13:24 -0700 (PDT) Received: by 10.70.30.2 with HTTP; Tue, 25 Mar 2008 01:13:24 -0700 (PDT) List-Post: This is broken in Ebb too. I'll put some time into it again today and see if I can fix it. ry On Tue, Mar 25, 2008 at 5:53 AM, Evan Weaver wrote: > > I never committed the Ragel 6 upgrade to trunk because I couldn't figure > > out why it was broken. I was hoping someone else would step in and fix > > it for us :) > > Maybe Ry knows. Otherwise, I'll try to hack through it. I think > something might have to happen in the state transitions to make up for > the inability to explicitly close the output (is that even remotely > close?). > > > > Digging into the revision history (with git :), the nasty_pound_header > > test was committed in its commented form in r361 and has never changed > > until now. > > I'm not surprised, but there was no comment as to why it was disabled, > so I enabled it and let it fail. We should maybe remove that test > entirely and document multiline headers as not supported. > > Thanks for looking in to this. > > > > Evan > > > > > > > > > On Sat, Mar 8, 2008 at 6:02 PM, Eric Wong wrote: > > > > Evan Weaver wrote: > > > > > > > > > Upgrading ragel is fine with me. > > > > > > > > Here's my work-in-progress. The changes below are pretty much copied > > > > from ry's changes in ebb. > > > > > > > > I haven't been able to figure out why > > > > test_horrible_queries(HttpParserTest) is failing, so any help here would > > > > be appreciated. > > > > > > > > Thanks. > > > > > > > > diff --git a/Rakefile b/Rakefile > > > > index f47d7a2..07a89c2 100644 > > > > --- a/Rakefile > > > > +++ b/Rakefile > > > > @@ -55,13 +55,15 @@ task :ragel do > > > > Dir.chdir "ext/http11" do > > > > target = "http11_parser.c" > > > > File.unlink target if File.exist? target > > > > - sh "ragel http11_parser.rl | rlgen-cd -G2 -o #{target}" > > > > + # sh "ragel http11_parser.rl | rlgen-cd -G2 -o #{target}" # ragel 5.x > > > > + sh "ragel -G2 http11_parser.rl" # ragel 6.0 > > > > raise "Failed to build C source" unless File.exist? target > > > > end > > > > Dir.chdir "ext/http11" do > > > > target = "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java" > > > > File.unlink target if File.exist? target > > > > - sh "ragel -J http11_parser.java.rl | rlgen-java -o #{target}" > > > > + # sh "ragel -J http11_parser.java.rl | rlgen-java -o #{target}" # ragel 5.x > > > > + sh "ragel -J -o #{target} http11_parser.java.rl" # ragel 6.0 > > > > raise "Failed to build Java source" unless File.exist? target > > > > end > > > > end > > > > diff --git a/ext/http11/http11_parser.rl b/ext/http11/http11_parser.rl > > > > index a418605..0c4e2d4 100644 > > > > --- a/ext/http11/http11_parser.rl > > > > +++ b/ext/http11/http11_parser.rl > > > > @@ -114,7 +114,7 @@ size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, > > > > p = buffer+off; > > > > pe = buffer+len; > > > > > > > > - assert(*pe == '\0' && "pointer does not end on NUL"); > > > > + /* assert(*pe == '\0' && "pointer does not end on NUL"); */ > > > > assert(pe - p == len - off && "pointers aren't same distance"); > > > > > > > > > > > > @@ -130,23 +130,11 @@ size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, > > > > assert(parser->field_len <= len && "field has length longer than whole buffer"); > > > > assert(parser->field_start < len && "field starts after buffer end"); > > > > > > > > - if(parser->body_start) { > > > > - /* final \r\n combo encountered so stop right here */ > > > > - %%write eof; > > > > - parser->nread++; > > > > - } > > > > - > > > > return(parser->nread); > > > > } > > > > > > > > int http_parser_finish(http_parser *parser) > > > > { > > > > - int cs = parser->cs; > > > > - > > > > - %%write eof; > > > > - > > > > - parser->cs = cs; > > > > - > > > > if (http_parser_has_error(parser) ) { > > > > return -1; > > > > } else if (http_parser_is_finished(parser) ) { > > > > @@ -161,5 +149,5 @@ int http_parser_has_error(http_parser *parser) { > > > > } > > > > > > > > int http_parser_is_finished(http_parser *parser) { > > > > - return parser->cs == http_parser_first_final; > > > > + return parser->cs >= http_parser_first_final; > > > > } > > > > -- > > > > > > > > > > > > Eric Wong > > > -- > > > Evan Weaver > > > Cloudburst, LLC > > > > > > _______________________________________________ > > Mongrel-development mailing list > > Mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org > > http://rubyforge.org/mailman/listinfo/mongrel-development > > > > > > -- > Evan Weaver > Cloudburst, LLC > _______________________________________________ > Mongrel-development mailing list > Mongrel-development-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org > http://rubyforge.org/mailman/listinfo/mongrel-development >