Re: [Maria-developers] bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (knielsen:2702)

2009-06-19 Thread Kristian Nielsen
Michael Widenius mo...@askmonty.org writes:

 knielsen +/*
 knielsen +  We initialise the hashes for deadlock detection lazily.
 knielsen +  This greatly helps with performance when lots of mutexes are 
 initiased but
 knielsen +  only a few of them are actually used (eg. XtraDB).
 knielsen +*/
 knielsen +static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t 
 *mp)
 knielsen +{
 knielsen +  if (!my_multi_malloc(MY_FAE | MY_WME,
 knielsen +   mp-locked_mutex, 
 sizeof(*mp-locked_mutex),
 knielsen +   mp-used_mutex, sizeof(*mp-used_mutex), 
 NullS))
 knielsen +  {

 Add:
/* Disable deadlock handling for this mutex */
mp-flags|= MYF_NO_DEADLOCK_DETECTION;

Ok, done.

(It is not strictly necessary, as the caller checks the return value. The
difference is if in case of out-of-memory, the malloc() will be re-tried on
next access or not. It very likely doesn't matter one way or the other).

 knielsen @@ -167,35 +196,8 @@ int safe_mutex_init(safe_mutex_t *mp,
 knielsenmp-line= line;
 knielsen/* Skip the very common '' prefix from the autogenerated name */
 knielsenmp-name= name[0] == '' ? name + 1 : name;
 knielsen +  /* Deadlock detection is initialised only lazily, on first use. 
 */
  
 knielsen -  if (safe_mutex_deadlock_detector  !( my_flags  
 MYF_NO_DEADLOCK_DETECTION))
 knielsen -  {
 knielsen -if (!my_multi_malloc(MY_FAE | MY_WME,
 knielsen - mp-locked_mutex, 
 sizeof(*mp-locked_mutex),
 knielsen - mp-used_mutex, sizeof(*mp-used_mutex), 
 NullS))
 knielsen -{
 knielsen -  /* Disable deadlock handling for this mutex */
 knielsen -  my_flags|= MYF_NO_DEADLOCK_DETECTION;
 knielsen -}
 knielsen -else
 knielsen -{
 knielsen -  pthread_mutex_lock(THR_LOCK_mutex);
 knielsen -  mp-id= ++safe_mutex_id;
 knielsen -  pthread_mutex_unlock(THR_LOCK_mutex);
 knielsen -  hash_init(mp-locked_mutex, my_charset_bin,
 knielsen -1000,
 knielsen -offsetof(safe_mutex_deadlock_t, id),
 knielsen -sizeof(mp-id),
 knielsen -0, 0, HASH_UNIQUE);
 knielsen -  hash_init(mp-used_mutex, my_charset_bin,
 knielsen -1000,
 knielsen -offsetof(safe_mutex_t, id),
 knielsen -sizeof(mp-id),
 knielsen -0, 0, HASH_UNIQUE);
 knielsen -}
 knielsen -  }
 knielsen -  else
 knielsen -my_flags|= MYF_NO_DEADLOCK_DETECTION;

 You accidently removed checking of 'safe_mutex_deadlock_detector here.

Oops :-(

Fixed, thanks for catching this!

 - Kristian.

___
Mailing list: https://launchpad.net/~maria-developers
Post to : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp


Re: [Maria-developers] bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (knielsen:2702)

2009-06-18 Thread Michael Widenius

Hi!

 knielsen == knielsen  kniel...@knielsen-hq.org writes:

knielsen #At lp:maria
knielsen  2702 kniel...@knielsen-hq.org2009-06-09
knielsen   XtraDB after-merge fixes.
  
knielsen === modified file 'mysys/thr_mutex.c'
knielsen --- a/mysys/thr_mutex.c   2009-02-19 09:01:25 +
knielsen +++ b/mysys/thr_mutex.c   2009-06-09 15:08:46 +
knielsen @@ -149,6 +149,35 @@ static inline void remove_from_active_li
knielsenmp-prev= mp-next= 0;
knielsen  }
 
knielsen +/*
knielsen +  We initialise the hashes for deadlock detection lazily.
knielsen +  This greatly helps with performance when lots of mutexes are 
initiased but
knielsen +  only a few of them are actually used (eg. XtraDB).
knielsen +*/
knielsen +static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
knielsen +{
knielsen +  if (!my_multi_malloc(MY_FAE | MY_WME,
knielsen +   mp-locked_mutex, sizeof(*mp-locked_mutex),
knielsen +   mp-used_mutex, sizeof(*mp-used_mutex), 
NullS))
knielsen +  {

Add:
   /* Disable deadlock handling for this mutex */
   mp-flags|= MYF_NO_DEADLOCK_DETECTION;

knielsen +return 1;   /* Error */
knielsen +  }
knielsen +
knielsen +  pthread_mutex_lock(THR_LOCK_mutex);
knielsen +  mp-id= ++safe_mutex_id;
knielsen +  pthread_mutex_unlock(THR_LOCK_mutex);
knielsen +  hash_init(mp-locked_mutex, my_charset_bin,
knielsen +1000,
knielsen +offsetof(safe_mutex_deadlock_t, id),
knielsen +sizeof(mp-id),
knielsen +0, 0, HASH_UNIQUE);
knielsen +  hash_init(mp-used_mutex, my_charset_bin,
knielsen +1000,
knielsen +offsetof(safe_mutex_t, id),
knielsen +sizeof(mp-id),
knielsen +0, 0, HASH_UNIQUE);
knielsen +  return 0;
knielsen +}
 
knielsen  int safe_mutex_init(safe_mutex_t *mp,
knielsen   const pthread_mutexattr_t *attr 
__attribute__((unused)),
knielsen @@ -167,35 +196,8 @@ int safe_mutex_init(safe_mutex_t *mp,
knielsenmp-line= line;
knielsen/* Skip the very common '' prefix from the autogenerated name */
knielsenmp-name= name[0] == '' ? name + 1 : name;
knielsen +  /* Deadlock detection is initialised only lazily, on first use. */
 
knielsen -  if (safe_mutex_deadlock_detector  !( my_flags  
MYF_NO_DEADLOCK_DETECTION))
knielsen -  {
knielsen -if (!my_multi_malloc(MY_FAE | MY_WME,
knielsen - mp-locked_mutex, 
sizeof(*mp-locked_mutex),
knielsen - mp-used_mutex, sizeof(*mp-used_mutex), 
NullS))
knielsen -{
knielsen -  /* Disable deadlock handling for this mutex */
knielsen -  my_flags|= MYF_NO_DEADLOCK_DETECTION;
knielsen -}
knielsen -else
knielsen -{
knielsen -  pthread_mutex_lock(THR_LOCK_mutex);
knielsen -  mp-id= ++safe_mutex_id;
knielsen -  pthread_mutex_unlock(THR_LOCK_mutex);
knielsen -  hash_init(mp-locked_mutex, my_charset_bin,
knielsen -1000,
knielsen -offsetof(safe_mutex_deadlock_t, id),
knielsen -sizeof(mp-id),
knielsen -0, 0, HASH_UNIQUE);
knielsen -  hash_init(mp-used_mutex, my_charset_bin,
knielsen -1000,
knielsen -offsetof(safe_mutex_t, id),
knielsen -sizeof(mp-id),
knielsen -0, 0, HASH_UNIQUE);
knielsen -}
knielsen -  }
knielsen -  else
knielsen -my_flags|= MYF_NO_DEADLOCK_DETECTION;

You accidently removed checking of 'safe_mutex_deadlock_detector here.

Please add:

 if (safe_mutex_deadlock_detector)
   my_flags|= MYF_NO_DEADLOCK_DETECTION;

knielsenmp-create_flags= my_flags;

cut

knielsen === modified file 'storage/xtradb/ibuf/ibuf0ibuf.c'
knielsen --- a/storage/xtradb/ibuf/ibuf0ibuf.c 2009-03-26 06:11:11 +
knielsen +++ b/storage/xtradb/ibuf/ibuf0ibuf.c 2009-06-09 15:08:46 +
knielsen @@ -422,7 +422,12 @@ ibuf_init_at_db_start(void)
knielsen   grow in size, as the references on the upper levels of the tree 
can
knielsen   change */
 
knielsen - ibuf-max_size = ut_min( buf_pool_get_curr_size() / 
UNIV_PAGE_SIZE
knielsen +/* The default for ibuf_max_size is calculated from the 
requested
knielsen +   buffer pool size srv_buf_pool_size, not the actual size 
as returned
knielsen +   by buf_pool_get_curr_size(). The latter can differ from 
the former
knielsen +   by one page due to alignment requirements, and we do not 
want a
knielsen +   user-visible variable like INNODB_IBUF_MAX_SIZE to vary 
at random. */
knielsen + ibuf-max_size = ut_min( srv_buf_pool_size / UNIV_PAGE_SIZE
knielsen   / IBUF_POOL_SIZE_PER_MAX_SIZE, (ulint) 
srv_ibuf_max_size / UNIV_PAGE_SIZE);
 
knielsen   srv_ibuf_max_size = (long long) ibuf-max_size * UNIV_PAGE_SIZE;

Not sure if the above is correct. From MySQL 5.1:


from ../srv/srv0start.c:


 if (srv_use_awe) {