Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Felix Seibert
xtreemfs_client
Commits
9df9f975
Commit
9df9f975
authored
Jul 20, 2018
by
Felix Seibert
Browse files
use more meaningful per-OSD reassignment limit
parent
81dce78f
Changes
1
Show whitespace changes
Inline
Side-by-side
xtreemfs_client/dataDistribution.py
View file @
9df9f975
...
@@ -104,6 +104,18 @@ class DataDistribution(object):
...
@@ -104,6 +104,18 @@ class DataDistribution(object):
self
.
OSDs
[
new_osd
].
add_folder
(
folder_id
,
self
.
OSDs
[
old_osd
.
uuid
].
folders
[
folder_id
])
self
.
OSDs
[
new_osd
].
add_folder
(
folder_id
,
self
.
OSDs
[
old_osd
.
uuid
].
folders
[
folder_id
])
self
.
OSDs
[
old_osd
.
uuid
].
remove_folder
(
folder_id
)
self
.
OSDs
[
old_osd
.
uuid
].
remove_folder
(
folder_id
)
def
get_total_folder_size
(
self
):
total_size
=
0
for
one_osd
in
self
.
OSDs
.
values
():
total_size
+=
one_osd
.
total_folder_size
return
total_size
def
get_total_bandwidth
(
self
):
total_bandwidth
=
0
for
one_osd
in
self
.
OSDs
.
values
():
total_bandwidth
+=
one_osd
.
bandwidth
return
total_bandwidth
def
get_average_folder_size
(
self
):
def
get_average_folder_size
(
self
):
"""
"""
get the average folder size of all folders of all OSDs.
get the average folder size of all folders of all OSDs.
...
@@ -258,17 +270,13 @@ class DataDistribution(object):
...
@@ -258,17 +270,13 @@ class DataDistribution(object):
"""
"""
movements
=
{}
movements
=
{}
folders_to_be_reassigned
=
[]
folders_to_be_reassigned
=
[]
# TODO reassignment factor based on load or based on processing time?
# as long as we use OSDs with the same bandwidth, there is no difference.
reassignment_limit
=
self
.
get_average_processing_time
()
*
rebalance_factor
# for each OSD, remove the smallest folder until its total_folder_size does not exceed the reassignment_limit
# for each OSD, remove the smallest folder until its total_folder_size does not exceed the reassignment_limit
# unrolling
# unrolling
for
osd
in
self
.
OSDs
.
values
():
for
osd
in
self
.
OSDs
.
values
():
# TODO how to calculate the 'unrolling limit' for each individual OSD?
# self.get_total_folder_size / self.get_total_bandwidth() is the optimal processing time for each OSD:
# again, as long as all OSDs have the same bandwidth, there is no difference.
# this value is a lower bound for the makespan
# BUT it should definitely not depend on the load or pt of the OSD.
reassignment_limit
=
osd
.
bandwidth
*
(
self
.
get_total_folder_size
()
/
self
.
get_total_bandwidth
())
# so for now we use a static limit, the same for all OSDs.
while
osd
.
get_processing_time
()
>
reassignment_limit
:
while
osd
.
get_processing_time
()
>
reassignment_limit
:
folder_id
,
folder_size
=
osd
.
get_smallest_folder
()
folder_id
,
folder_size
=
osd
.
get_smallest_folder
()
folders_to_be_reassigned
.
append
(
folder
.
Folder
(
folder_id
,
folder_size
,
None
))
folders_to_be_reassigned
.
append
(
folder
.
Folder
(
folder_id
,
folder_size
,
None
))
...
@@ -281,7 +289,7 @@ class DataDistribution(object):
...
@@ -281,7 +289,7 @@ class DataDistribution(object):
for
folder_id
,
target
in
new_assignments
:
for
folder_id
,
target
in
new_assignments
:
movements
[
folder_id
]
=
(
movements
[
folder_id
],
target
)
movements
[
folder_id
]
=
(
movements
[
folder_id
],
target
)
return
movements
,
reassignment_limit
return
movements
def
rebalance_one_folder
(
self
):
def
rebalance_one_folder
(
self
):
"""
"""
...
...
Write
Preview
Supports
Markdown
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