List:Internals« Previous MessageNext Message »
From:Sergey Vojtovich Date:March 23 2010 2:15pm
Subject:Re: Is that intentional or my configure error?
View as plain text  
Hi Tianwei,

in 5.1 (include/my_pthread.h) there is a nice comment regarding
statistic_* functions:

  statistics_xxx functions are for non critical statistic,
  maintained in global variables.
  When compiling with SAFE_STATISTICS:
  - race conditions can not occur.
  - some locking occurs, which may cause performance degradation.

  When compiling without SAFE_STATISTICS:
  - race conditions can occur, making the result slightly inaccurate.
  - the lock given is not honored.

Regards,
Sergey

On Tue, Mar 23, 2010 at 09:41:41PM +0800, Tianwei wrote:
> Hi, all,
>   I use the following configuration for mysql 5.0:
> CFLAGS="-O0 -g3" CC=gcc CXX=g++ CXXFLAGS="-O0  -g3
> -felide-constructors   -fno-exceptions -fno-rtti" ./configure
> --prefix=/home/tianwei/mysql-server/bin/ --enable-assembler
> I develop a tool which can detect lock usage, It gives the warning as:
> 
> Mem: 0x32bf7c0 current lockset is: () previous lockset is: ()
> the thread id are: 7984 8140
> the ip and source files are: 0x006ada00
> /home/tianwei/mysql-server/5.0/sql/ha_myisam.cc:1605
> 0x006ad9f5 /home/tianwei/mysql-server/5.0/sql/ha_myisam.cc:1605
> the stack trace are:
> previous call stack is:
> current call stack is:
> 
> I check ha_myisam.cc, it looks like:
> 1604   statistic_increment(table->in_use->status_var.ha_read_next_count,
> 1605                      
> &LOCK_status);
> 
> the assembly code for this is:
>   6ad9f5:       48 8b 90 d0 0a 00 00    mov  
>  0xad0(%rax),%rdx
>   6ad9fc:       48 83 c2 01        
>     add    $0x1,%rdx
>   6ada00:       48 89 90 d0 0a 00 00    mov  
>  %rdx,0xad0(%rax)
> 
> I check the .ii file which seems that the statistic actually do not
> use lock or atomic_inc,
> int ha_myisam::index_next(byte * buf)
> {
>   ;
>   (table->in_use->status_var.ha_read_next_count)++;
>   int error=mi_rnext(file,buf,active_index);
>   table->status=error ? 2: 0;
>   return error;
> }
> 
> I am new for mysqld, I think there should be some configuration flag
> which can enable this, such as not define "HAVE_ATOMIC_ADD" to enable
> pthread lock/unlock pair, or We just tolerate the race here because of
> the performance issue and we are OK because it's only statistic as the
> function name indicated?
> Can you give me some suggestions? I build mysqld with gcc/g++ 4.4.1 on
> Ubuntu 9.10(X86_64)
> 
> Thanks so much.
> 
> Tianwei
> --
> Sheng, Tianwei
> Inst. of High Performance Computing
> Dept. of Computer Sci. & Tech.
> Tsinghua Univ.
> 
> --
> MySQL Internals Mailing List
> For list archives: http://lists.mysql.com/internals
> To unsubscribe:    http://lists.mysql.com/internals?unsub=1
> 

-- 
Sergey Vojtovich <svoj@stripped>
MySQL AB, Software Engineer
Izhevsk, Russia, www.mysql.com
Thread
Is that intentional or my configure error?Tianwei23 Mar
  • Re: Is that intentional or my configure error?xiaobing jiang23 Mar
    • Re: Is that intentional or my configure error?Tianwei23 Mar
  • Re: Is that intentional or my configure error?Sergey Vojtovich23 Mar
    • Re: Is that intentional or my configure error?Tianwei23 Mar
      • Re: Is that intentional or my configure error?Tianwei23 Mar
        • Re: Is that intentional or my configure error?Sergey Vojtovich23 Mar
        • Re: Is that intentional or my configure error?Konstantin Osipov23 Mar
Re: Is that intentional or my configure error?Tianwei24 Mar