ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[3]: guid to nginx internals


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Re[3]: guid to nginx internals
  • From: "Alexey Mahotkin" <squadette@xxxxxxxxx>
  • Date: Fri, 4 May 2007 18:34:12 +0400
  • Dkim-signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=ENiPse59jyAA2BNMjI+U15cgCavgKILK4MsPoO5+4j7ZMwm7UuuzAsQ2gjvjblLx95nPvvWrkgfxVoHPRnXgJwk0/LJUwJ/LtQ7nIkD2OkRH1JV0t55NccqYvc270rnRmTv3h1a3jb6qsztfOYtgDUEXrOba8x0N9Mqp4iKDJ88=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=bT9shiPv4x/YBNbOFyQjHiUvZYt3nkp8AUd9GJdj1+rZ0YlGnVjCEM1cDAXKmHyxIXn9+KJGpWbT6ZG6PprTVDW0jWnMjj3CprjV/yhTMqqdynOGilFpLw6zMA+th4Pw8Df1TClyQHTGIASZTuAwSC4QfyhQe4s5hiOcP++4N5o=
  • In-reply-to: <2510423705.20070504212441@xxxxxxxxxx>
  • References: <20070430120202.GF21398@xxxxxxxxxxxxx> <20070504161826.d756ceed.zuborg@xxxxxxxxxxxxxxxxxxx> <379282932.20070504174108@xxxxxxxxx> <2510423705.20070504212441@xxxxxxxxxx>

компилировал с -O2: у nginx_method на 6 операций больше.


Что абсолютно ни о чём на современном процессоре не говорит.

On 5/4/07, Denis F. Latypoff <denis@xxxxxxxxxx> wrote:
Hello Anton,

Friday, May 4, 2007, 8:41:08 PM, you wrote:

> Hello Mykola,

> You wrote on Friday, May 4, 2007, 5:18:26 PM:

MZ>> Начало цитаты:
MZ>>     if (m[1] == 'O') {

MZ>>         if (m[0] == 'P' && m[2] == 'S' && m[3] == 'T') {
MZ>>             r->method = NGX_HTTP_POST;
MZ>>             break;
MZ>>         }

MZ>>         if (m[0] == 'C' && m[2] == 'P' && m[3] == 'Y') {
MZ>>             r->method = NGX_HTTP_COPY;
MZ>>             break;
MZ>>         }
MZ>>     ...
MZ>> That's a man who cares about performance.
MZ>> Конец цитаты.

MZ>> Я не спец в C, и не читал той дискуссии по strncmp, но по моему
MZ>> проверять 2-й байт, а потом 1-й - не самый оптимальный шаблон доступа к
MZ>> памяти

> С точки зрения скорости доступа к памяти без разницы в каком порядке,
> лишь бы данные были там рядом.

> Если повезет и они выровнены, как нужно то данные за один прием попадут
> в кэш процессора. Не повезет - в два.

> А количество сравнений получается меньше если сначала 2-й байт
> проверить, потом 1-й.


первый мой пост был не правилен.

вот более правильные результаты:

nginx_method.c (добавлен дополнительный if):

int
main (void)
{
    char m[] = "POST";
    if (m[1] == 'O')
        if (m[0] == 'P' && m[2] == 'S' && m[3] == 'T')
            printf ("OK\n");
}

0W_method.c (такой же, как и в первом посте):

#define  STR4_POST 0x54534f50
int
main (void)
{
    char m[] = "POST";
    unsigned int tmp4 = *(unsigned int *) m;

    if (tmp4 == STR4_POST)
        printf ("OK\n");
}


--- 0w_method.s 2007-05-04 21:14:09.000000000 +0700
+++ nginx_method.s      2007-05-04 21:19:40.000000000 +0700
@@ -1,4 +1,4 @@
-       .file   "0w_method.c"
+       .file   "nginx_method.c"
        .section        .rodata.str1.1,"aMS",@progbits,1
 .LC0:
        .string "POST"
@@ -12,18 +12,25 @@
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
-       andl    $-16, %esp
        movl    .LC0, %edx
+       andl    $-16, %esp
+       movl    %edx, -24(%ebp)
        subl    $16, %esp
        movb    .LC0+4, %al
-       cmpl    $1414745936, %edx
-       movl    %edx, -24(%ebp)
+       cmpb    $79, -23(%ebp)
        movb    %al, -20(%ebp)
-       je      .L4
+       je      .L5
+.L2:
        leave
        ret
        .p2align 2,,3
-.L4:
+.L5:
+       cmpb    $80, -24(%ebp)
+       jne     .L2
+       cmpb    $83, -22(%ebp)
+       jne     .L2
+       cmpb    $84, -21(%ebp)
+       jne     .L2
        subl    $12, %esp
        pushl   $.LC1
        call    puts

--
Best regards,
 Denis                            mailto:denis@xxxxxxxxxx





 




Copyright © Lexa Software, 1996-2009.