Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
c11806db
Commit
c11806db
authored
Jun 12, 2007
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge perch.ndb.mysql.com:/home/jonas/src/51-telco-gca
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
parents
0b58af09
4b8baaae
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
25 deletions
+83
-25
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
+40
-7
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
+43
-18
No files found.
storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp
View file @
c11806db
...
@@ -74,6 +74,10 @@ Dbtup::reportMemoryUsage(Signal* signal, int incDec){
...
@@ -74,6 +74,10 @@ Dbtup::reportMemoryUsage(Signal* signal, int incDec){
sendSignal
(
CMVMI_REF
,
GSN_EVENT_REP
,
signal
,
6
,
JBB
);
sendSignal
(
CMVMI_REF
,
GSN_EVENT_REP
,
signal
,
6
,
JBB
);
}
}
#ifdef VM_TRACE
extern
Uint32
fc_left
,
fc_right
,
fc_remove
;
#endif
void
void
Dbtup
::
execDUMP_STATE_ORD
(
Signal
*
signal
)
Dbtup
::
execDUMP_STATE_ORD
(
Signal
*
signal
)
{
{
...
@@ -155,12 +159,20 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
...
@@ -155,12 +159,20 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
return
;
return
;
}
//if
}
//if
#endif
#endif
#if defined VM_TRACE && 0
#if defined VM_TRACE
if
(
type
==
1211
){
if
(
type
==
1211
||
type
==
1212
||
type
==
1213
){
ndbout_c
(
"Startar modul test av Page Manager"
);
Uint32
seed
=
time
(
0
);
if
(
signal
->
getLength
()
>
1
)
seed
=
signal
->
theData
[
1
];
ndbout_c
(
"Startar modul test av Page Manager (seed: 0x%x)"
,
seed
);
srand
(
seed
);
Vector
<
Chunk
>
chunks
;
Vector
<
Chunk
>
chunks
;
const
Uint32
LOOPS
=
1000
;
const
Uint32
LOOPS
=
1000
;
Uint32
sum_req
=
0
;
Uint32
sum_conf
=
0
;
Uint32
sum_loop
=
0
;
Uint32
max_loop
=
0
;
for
(
Uint32
i
=
0
;
i
<
LOOPS
;
i
++
){
for
(
Uint32
i
=
0
;
i
<
LOOPS
;
i
++
){
// Case
// Case
...
@@ -177,8 +189,15 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
...
@@ -177,8 +189,15 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
if
(
chunks
.
size
()
==
0
&&
c
==
0
){
if
(
chunks
.
size
()
==
0
&&
c
==
0
){
c
=
1
+
rand
()
%
2
;
c
=
1
+
rand
()
%
2
;
}
}
if
(
type
==
1211
)
ndbout_c
(
"loop=%d case=%d free=%d alloc=%d"
,
i
,
c
,
free
,
alloc
);
ndbout_c
(
"loop=%d case=%d free=%d alloc=%d"
,
i
,
c
,
free
,
alloc
);
if
(
type
==
1213
)
{
c
=
1
;
alloc
=
2
+
(
sum_conf
>>
3
)
+
(
sum_conf
>>
4
);
}
switch
(
c
){
switch
(
c
){
case
0
:{
// Release
case
0
:{
// Release
const
int
ch
=
rand
()
%
chunks
.
size
();
const
int
ch
=
rand
()
%
chunks
.
size
();
...
@@ -190,23 +209,33 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
...
@@ -190,23 +209,33 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
case
2
:
{
// Seize(n) - fail
case
2
:
{
// Seize(n) - fail
alloc
+=
free
;
alloc
+=
free
;
// Fall through
// Fall through
sum_req
+=
free
;
goto
doalloc
;
}
}
case
1
:
{
// Seize(n) (success)
case
1
:
{
// Seize(n) (success)
sum_req
+=
alloc
;
doalloc:
Chunk
chunk
;
Chunk
chunk
;
allocConsPages
(
alloc
,
chunk
.
pageCount
,
chunk
.
pageId
);
allocConsPages
(
alloc
,
chunk
.
pageCount
,
chunk
.
pageId
);
ndbrequire
(
chunk
.
pageCount
<=
alloc
);
ndbrequire
(
chunk
.
pageCount
<=
alloc
);
if
(
chunk
.
pageCount
!=
0
){
if
(
chunk
.
pageCount
!=
0
){
chunks
.
push_back
(
chunk
);
chunks
.
push_back
(
chunk
);
if
(
chunk
.
pageCount
!=
alloc
)
{
if
(
chunk
.
pageCount
!=
alloc
)
{
ndbout_c
(
" Tried to allocate %d - only allocated %d - free: %d"
,
if
(
type
==
1211
)
alloc
,
chunk
.
pageCount
,
free
);
ndbout_c
(
" Tried to allocate %d - only allocated %d - free: %d"
,
alloc
,
chunk
.
pageCount
,
free
);
}
}
}
else
{
}
else
{
ndbout_c
(
" Failed to alloc %d pages with %d pages free"
,
ndbout_c
(
" Failed to alloc %d pages with %d pages free"
,
alloc
,
free
);
alloc
,
free
);
}
}
sum_conf
+=
chunk
.
pageCount
;
Uint32
tot
=
fc_left
+
fc_right
+
fc_remove
;
sum_loop
+=
tot
;
if
(
tot
>
max_loop
)
max_loop
=
tot
;
for
(
Uint32
i
=
0
;
i
<
chunk
.
pageCount
;
i
++
){
for
(
Uint32
i
=
0
;
i
<
chunk
.
pageCount
;
i
++
){
PagePtr
pagePtr
;
PagePtr
pagePtr
;
pagePtr
.
i
=
chunk
.
pageId
+
i
;
pagePtr
.
i
=
chunk
.
pageId
+
i
;
...
@@ -225,6 +254,10 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
...
@@ -225,6 +254,10 @@ Dbtup::execDUMP_STATE_ORD(Signal* signal)
returnCommonArea
(
chunk
.
pageId
,
chunk
.
pageCount
);
returnCommonArea
(
chunk
.
pageId
,
chunk
.
pageCount
);
chunks
.
erase
(
chunks
.
size
()
-
1
);
chunks
.
erase
(
chunks
.
size
()
-
1
);
}
}
ndbout_c
(
"Got %u%% of requested allocs, loops : %u 100*avg: %u max: %u"
,
(
100
*
sum_conf
)
/
sum_req
,
sum_loop
,
100
*
sum_loop
/
LOOPS
,
max_loop
);
}
}
#endif
#endif
}
//Dbtup::execDUMP_STATE_ORD()
}
//Dbtup::execDUMP_STATE_ORD()
...
...
storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp
View file @
c11806db
...
@@ -146,10 +146,17 @@ void Dbtup::initializePage()
...
@@ -146,10 +146,17 @@ void Dbtup::initializePage()
cnoOfAllocatedPages
=
tmp
;
// Is updated by returnCommonArea
cnoOfAllocatedPages
=
tmp
;
// Is updated by returnCommonArea
}
//Dbtup::initializePage()
}
//Dbtup::initializePage()
#ifdef VM_TRACE
Uint32
fc_left
,
fc_right
,
fc_remove
;
#endif
void
Dbtup
::
allocConsPages
(
Uint32
noOfPagesToAllocate
,
void
Dbtup
::
allocConsPages
(
Uint32
noOfPagesToAllocate
,
Uint32
&
noOfPagesAllocated
,
Uint32
&
noOfPagesAllocated
,
Uint32
&
allocPageRef
)
Uint32
&
allocPageRef
)
{
{
#ifdef VM_TRACE
fc_left
=
fc_right
=
fc_remove
=
0
;
#endif
if
(
noOfPagesToAllocate
==
0
){
if
(
noOfPagesToAllocate
==
0
){
jam
();
jam
();
noOfPagesAllocated
=
0
;
noOfPagesAllocated
=
0
;
...
@@ -228,7 +235,10 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
...
@@ -228,7 +235,10 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
{
{
PagePtr
pageFirstPtr
,
pageLastPtr
;
PagePtr
pageFirstPtr
,
pageLastPtr
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
Uint32
remainAllocate
=
noOfPagesToAllocate
-
noPagesAllocated
;
while
(
allocPageRef
>
0
)
{
Uint32
loop
=
0
;
while
(
allocPageRef
>
0
&&
++
loop
<
16
)
{
jam
();
jam
();
pageLastPtr
.
i
=
allocPageRef
-
1
;
pageLastPtr
.
i
=
allocPageRef
-
1
;
c_page_pool
.
getPtr
(
pageLastPtr
);
c_page_pool
.
getPtr
(
pageLastPtr
);
...
@@ -256,6 +266,9 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
...
@@ -256,6 +266,9 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
remainAllocate
-=
listSize
;
remainAllocate
-=
listSize
;
}
//if
}
//if
}
//if
}
//if
#ifdef VM_TRACE
fc_left
++
;
#endif
}
//while
}
//while
}
//Dbtup::findFreeLeftNeighbours()
}
//Dbtup::findFreeLeftNeighbours()
...
@@ -269,7 +282,10 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
...
@@ -269,7 +282,10 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
jam
();
jam
();
return
;
return
;
}
//if
}
//if
while
((
allocPageRef
+
noPagesAllocated
)
<
c_page_pool
.
getSize
())
{
Uint32
loop
=
0
;
while
((
allocPageRef
+
noPagesAllocated
)
<
c_page_pool
.
getSize
()
&&
++
loop
<
16
)
{
jam
();
jam
();
pageFirstPtr
.
i
=
allocPageRef
+
noPagesAllocated
;
pageFirstPtr
.
i
=
allocPageRef
+
noPagesAllocated
;
c_page_pool
.
getPtr
(
pageFirstPtr
);
c_page_pool
.
getPtr
(
pageFirstPtr
);
...
@@ -296,24 +312,37 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
...
@@ -296,24 +312,37 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
remainAllocate
-=
listSize
;
remainAllocate
-=
listSize
;
}
//if
}
//if
}
//if
}
//if
#ifdef VM_TRACE
fc_right
++
;
#endif
}
//while
}
//while
}
//Dbtup::findFreeRightNeighbours()
}
//Dbtup::findFreeRightNeighbours()
void
Dbtup
::
insertCommonArea
(
Uint32
insPageRef
,
Uint32
insList
)
void
Dbtup
::
insertCommonArea
(
Uint32
insPageRef
,
Uint32
insList
)
{
{
cnoOfAllocatedPages
-=
(
1
<<
insList
);
cnoOfAllocatedPages
-=
(
1
<<
insList
);
PagePtr
pageLastPtr
,
pageInsPtr
;
PagePtr
pageLastPtr
,
pageInsPtr
,
pageHeadPtr
;
pageHeadPtr
.
i
=
cfreepageList
[
insList
];
c_page_pool
.
getPtr
(
pageInsPtr
,
insPageRef
);
c_page_pool
.
getPtr
(
pageInsPtr
,
insPageRef
);
ndbrequire
(
insList
<
16
);
ndbrequire
(
insList
<
16
);
pageLastPtr
.
i
=
(
pageInsPtr
.
i
+
(
1
<<
insList
))
-
1
;
pageLastPtr
.
i
=
(
pageInsPtr
.
i
+
(
1
<<
insList
))
-
1
;
pageInsPtr
.
p
->
next_cluster_page
=
cfreepageList
[
insList
];
pageInsPtr
.
p
->
page_state
=
ZFREE_COMMON
;
pageInsPtr
.
p
->
next_cluster_page
=
pageHeadPtr
.
i
;
pageInsPtr
.
p
->
prev_cluster_page
=
RNIL
;
pageInsPtr
.
p
->
prev_cluster_page
=
RNIL
;
pageInsPtr
.
p
->
last_cluster_page
=
pageLastPtr
.
i
;
pageInsPtr
.
p
->
last_cluster_page
=
pageLastPtr
.
i
;
cfreepageList
[
insList
]
=
pageInsPtr
.
i
;
cfreepageList
[
insList
]
=
pageInsPtr
.
i
;
if
(
pageHeadPtr
.
i
!=
RNIL
)
{
jam
();
c_page_pool
.
getPtr
(
pageHeadPtr
);
pageHeadPtr
.
p
->
prev_cluster_page
=
pageInsPtr
.
i
;
}
c_page_pool
.
getPtr
(
pageLastPtr
);
c_page_pool
.
getPtr
(
pageLastPtr
);
pageLastPtr
.
p
->
page_state
=
ZFREE_COMMON
;
pageLastPtr
.
p
->
first_cluster_page
=
pageInsPtr
.
i
;
pageLastPtr
.
p
->
first_cluster_page
=
pageInsPtr
.
i
;
pageLastPtr
.
p
->
next_page
=
RNIL
;
pageLastPtr
.
p
->
next_page
=
RNIL
;
}
//Dbtup::insertCommonArea()
}
//Dbtup::insertCommonArea()
...
@@ -321,12 +350,13 @@ void Dbtup::insertCommonArea(Uint32 insPageRef, Uint32 insList)
...
@@ -321,12 +350,13 @@ void Dbtup::insertCommonArea(Uint32 insPageRef, Uint32 insList)
void
Dbtup
::
removeCommonArea
(
Uint32
remPageRef
,
Uint32
list
)
void
Dbtup
::
removeCommonArea
(
Uint32
remPageRef
,
Uint32
list
)
{
{
cnoOfAllocatedPages
+=
(
1
<<
list
);
cnoOfAllocatedPages
+=
(
1
<<
list
);
PagePtr
pagePrevPtr
,
pageNextPtr
,
pageLastPtr
,
pageSearchPtr
,
remPagePtr
;
PagePtr
pagePrevPtr
,
pageNextPtr
,
pageLastPtr
,
remPagePtr
;
c_page_pool
.
getPtr
(
remPagePtr
,
remPageRef
);
c_page_pool
.
getPtr
(
remPagePtr
,
remPageRef
);
ndbrequire
(
list
<
16
);
ndbrequire
(
list
<
16
);
if
(
cfreepageList
[
list
]
==
remPagePtr
.
i
)
{
if
(
cfreepageList
[
list
]
==
remPagePtr
.
i
)
{
jam
();
jam
();
ndbassert
(
remPagePtr
.
p
->
prev_cluster_page
==
RNIL
);
cfreepageList
[
list
]
=
remPagePtr
.
p
->
next_cluster_page
;
cfreepageList
[
list
]
=
remPagePtr
.
p
->
next_cluster_page
;
pageNextPtr
.
i
=
cfreepageList
[
list
];
pageNextPtr
.
i
=
cfreepageList
[
list
];
if
(
pageNextPtr
.
i
!=
RNIL
)
{
if
(
pageNextPtr
.
i
!=
RNIL
)
{
...
@@ -335,30 +365,25 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
...
@@ -335,30 +365,25 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
pageNextPtr
.
p
->
prev_cluster_page
=
RNIL
;
pageNextPtr
.
p
->
prev_cluster_page
=
RNIL
;
}
//if
}
//if
}
else
{
}
else
{
pageSearchPtr
.
i
=
cfreepageList
[
list
];
pagePrevPtr
.
i
=
remPagePtr
.
p
->
prev_cluster_page
;
while
(
true
)
{
jam
();
c_page_pool
.
getPtr
(
pageSearchPtr
);
pagePrevPtr
=
pageSearchPtr
;
pageSearchPtr
.
i
=
pageSearchPtr
.
p
->
next_cluster_page
;
if
(
pageSearchPtr
.
i
==
remPagePtr
.
i
)
{
jam
();
break
;
}
//if
}
//while
pageNextPtr
.
i
=
remPagePtr
.
p
->
next_cluster_page
;
pageNextPtr
.
i
=
remPagePtr
.
p
->
next_cluster_page
;
c_page_pool
.
getPtr
(
pagePrevPtr
);
pagePrevPtr
.
p
->
next_cluster_page
=
pageNextPtr
.
i
;
pagePrevPtr
.
p
->
next_cluster_page
=
pageNextPtr
.
i
;
if
(
pageNextPtr
.
i
!=
RNIL
)
{
if
(
pageNextPtr
.
i
!=
RNIL
)
{
jam
();
jam
();
c_page_pool
.
getPtr
(
pageNextPtr
);
c_page_pool
.
getPtr
(
pageNextPtr
);
pageNextPtr
.
p
->
prev_cluster_page
=
pagePrevPtr
.
i
;
pageNextPtr
.
p
->
prev_cluster_page
=
pagePrevPtr
.
i
;
}
//if
}
}
//if
}
//if
remPagePtr
.
p
->
next_cluster_page
=
RNIL
;
remPagePtr
.
p
->
next_cluster_page
=
RNIL
;
remPagePtr
.
p
->
last_cluster_page
=
RNIL
;
remPagePtr
.
p
->
last_cluster_page
=
RNIL
;
remPagePtr
.
p
->
prev_cluster_page
=
RNIL
;
remPagePtr
.
p
->
prev_cluster_page
=
RNIL
;
remPagePtr
.
p
->
page_state
=
~
ZFREE_COMMON
;
pageLastPtr
.
i
=
(
remPagePtr
.
i
+
(
1
<<
list
))
-
1
;
pageLastPtr
.
i
=
(
remPagePtr
.
i
+
(
1
<<
list
))
-
1
;
c_page_pool
.
getPtr
(
pageLastPtr
);
c_page_pool
.
getPtr
(
pageLastPtr
);
pageLastPtr
.
p
->
first_cluster_page
=
RNIL
;
pageLastPtr
.
p
->
first_cluster_page
=
RNIL
;
pageLastPtr
.
p
->
page_state
=
~
ZFREE_COMMON
;
}
//Dbtup::removeCommonArea()
}
//Dbtup::removeCommonArea()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment