Skip to content

Commit 9b2e21a

Browse files
committed
cluster: Addition of new tests to run Scrub and Recovery
Add 2 new tests similar to the background Recovery test for running Scrub load with client IO and the other one for running Scrub, Recovery, and Client load. The Scrub and client IO test performs the following steps: - Create a pool and image to populate scrub objects (scrub pool) - Create scrub thread - Populate the scrub pool with objects using radosbench - Initiate deep-scrub on the scrub pool - Create a second pool and an image in it to run client IO - Initiate fio job on the second image at the same time the deep-scrub starts In the second test, we have an additional recovery pool that is populated after an OSD is marked down and out. Once the pool is populated we mark the OSD up and in which starts backfill. At the same time, we begin deep-scrub on the scrub pool and client IO. Signed-off-by: Aishwarya Mathuria <amathuri@redhat.com>
1 parent d248111 commit 9b2e21a

File tree

10 files changed

+445
-9
lines changed

10 files changed

+445
-9
lines changed

benchmark/fio.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ def initialize_endpoints(self):
6666
# Create the recovery image based on test type requested
6767
if 'recovery_test' in self.cluster.config and self.recov_test_type == 'background':
6868
self.client_endpoints_object.create_recovery_image()
69+
if 'scrubbing_test' in self.cluster.config:
70+
self.client_endpoints_object.create_scrubbing_image()
71+
if 'scrub_recov_test' in self.cluster.config:
72+
self.client_endpoints_object.create_recovery_image()
73+
self.client_endpoints_object.create_scrubbing_image()
6974
self.create_endpoints()
7075

7176
def create_endpoints(self):
@@ -213,6 +218,18 @@ def run(self):
213218
# Wait for signal to start client IO
214219
self.cluster.wait_start_io()
215220

221+
if 'scrubbing_test' in self.cluster.config:
222+
logger.info('Scrubbing test in config')
223+
scrubbing_callback = self.scrubbing_callback
224+
self.cluster.create_scrubbing_test(self.run_dir, scrubbing_callback)
225+
self.cluster.wait_start_io()
226+
227+
if 'scrub_recov_test' in self.cluster.config:
228+
logger.info('Scrub+Recov')
229+
scrub_recov_callback = self.scrub_recov_callback
230+
self.cluster.create_scrub_recovery_test(self.run_dir, scrub_recov_callback)
231+
self.cluster.wait_start_io()
232+
216233
monitoring.start(self.run_dir)
217234

218235
logger.info('Running fio %s test.', self.mode)
@@ -225,6 +242,13 @@ def run(self):
225242
# If we were doing recovery, wait until it's done.
226243
if 'recovery_test' in self.cluster.config:
227244
self.cluster.wait_recovery_done()
245+
# If we were doing scrubbing, wait until it's done.
246+
if 'scrubbing_test' in self.cluster.config:
247+
self.cluster.wait_scrubbing_done()
248+
249+
if 'scrub_recov_test' in self.cluster.config:
250+
self.cluster.wait_scrub_recovery_done()
251+
228252

229253
monitoring.stop(self.run_dir)
230254

@@ -239,6 +263,12 @@ def recovery_callback_blocking(self):
239263
def recovery_callback_background(self):
240264
logger.info('Recovery thread completed!')
241265

266+
def scrubbing_callback(self):
267+
logger.info('Scrubbing thread completed')
268+
269+
def scrub_recov_callback(self):
270+
logger.info('Scrub+Recovery thread completed')
271+
242272
def analyze(self, out_dir):
243273
logger.info('Convert results to json format.')
244274
for client in settings.getnodes('clients').split(','):

benchmark/librbdfio.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def __init__(self, archive_dir, cluster, config):
4646
self.use_existing_volumes = config.get('use_existing_volumes', False)
4747
self.pool_name = config.get("poolname", "cbt-librbdfio")
4848
self.recov_pool_name = config.get("recov_pool_name", "cbt-librbdfio-recov")
49+
self.scrub_pool_name = config.get("scrub_pool_name", "cbt-librbdfio-scrub")
50+
self.scrub_pool_profile = config.get("scrub_pool_profile", "default")
4951
self.rbdname = config.get('rbdname', '')
5052

5153
self.total_procs = self.procs_per_volume * self.volumes_per_client * len(settings.getnodes('clients').split(','))
@@ -80,9 +82,17 @@ def initialize(self):
8082

8183
common.sync_files('%s/*' % self.run_dir, self.out_dir)
8284

85+
if 'scrubbing_test' in self.cluster.config:
86+
self.mkscrubimage()
87+
8388
# Create the recovery image based on test type requested
8489
if 'recovery_test' in self.cluster.config and self.recov_test_type == 'background':
8590
self.mkrecovimage()
91+
92+
if 'scrub_recov_test' in self.cluster.config:
93+
self.mkrecovimage()
94+
self.mkscrubimage()
95+
8696
self.mkimages()
8797
# populate the fio files
8898
ps = []
@@ -128,6 +138,17 @@ def run(self):
128138
# Wait for a signal from the recovery thread to initiate client IO
129139
self.cluster.wait_start_io()
130140

141+
if 'scrubbing_test' in self.cluster.config:
142+
scrubbing_callback = self.scrubbing_callback
143+
self.cluster.create_scrubbing_test(self.run_dir, scrubbing_callback)
144+
self.cluster.wait_start_io()
145+
146+
if 'scrub_recov_test' in self.cluster.config:
147+
scrub_recov_callback = self.scrub_recov_callback
148+
self.cluster.create_scrub_recovery_test(self.run_dir, scrub_recov_callback)
149+
self.cluster.wait_start_io()
150+
151+
131152
monitoring.start(self.run_dir)
132153

133154
logger.info('Running rbd fio %s test.', self.mode)
@@ -142,6 +163,9 @@ def run(self):
142163
if 'recovery_test' in self.cluster.config:
143164
self.cluster.wait_recovery_done()
144165

166+
if 'scrub_recov_test' in self.cluster.config:
167+
self.cluster.wait_scrub_recovery_done()
168+
145169
monitoring.stop(self.run_dir)
146170

147171
# Finally, get the historic ops
@@ -210,6 +234,18 @@ def mkrecovimage(self):
210234
self.cluster.mkimage('cbt-librbdfio-recov-%s-%d' % (node,volnum), self.vol_size, self.recov_pool_name, self.data_pool, self.vol_object_size)
211235
monitoring.stop()
212236

237+
def mkscrubimage(self):
238+
logger.info('Creating scrubbing image...')
239+
monitoring.start("%s/scrub_pool_monitoring" % self.run_dir)
240+
if (self.use_existing_volumes == False):
241+
self.cluster.rmpool(self.scrub_pool_name, self.scrub_pool_profile)
242+
self.cluster.mkpool(self.scrub_pool_name, self.scrub_pool_profile, 'rbd')
243+
for node in common.get_fqdn_list('clients'):
244+
for volnum in range(0, self.volumes_per_client):
245+
node = node.rpartition("@")[2]
246+
self.cluster.mkimage('cbt-librbdfio-scrub-%s-%d' % (node,volnum), self.vol_size, self.scrub_pool_name, self.data_pool, self.vol_object_size)
247+
monitoring.stop()
248+
213249
def mkimages(self):
214250
monitoring.start("%s/pool_monitoring" % self.run_dir)
215251
if (self.use_existing_volumes == False):
@@ -231,6 +267,9 @@ def recovery_callback_blocking(self):
231267
def recovery_callback_background(self):
232268
logger.info('Recovery thread completed!')
233269

270+
def scrubbing_callback(self):
271+
logger.info('Scrubbing thread completed!')
272+
234273
def parse(self, out_dir):
235274
for client in settings.getnodes('clients').split(','):
236275
host = settings.host_info(client)["host"]

client_endpoints/ceph_client_endpoints.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def __init__(self, cluster, config):
2626
self.data_pool_profile = config.get('data_pool_profile', None)
2727
self.recov_pool = None
2828
self.recov_pool_profile = config.get('recov_pool_profile', 'default')
29+
self.scrub_pool = None
30+
self.scrub_pool_profile = config.get('scrub_pool_profile', 'default')
2931
self.order = config.get('order', 22)
3032
self.disabled_features = config.get('disabled_features', None)
3133

@@ -114,6 +116,15 @@ def create_rbd_recovery(self):
114116
rbd_name = '%s-%s' % (self.pool, self.get_rbd_name(node, ep_num))
115117
self.cluster.mkimage(rbd_name, self.endpoint_size, self.pool, self.data_pool, self.order)
116118

119+
def create_rbd_scrubbing(self):
120+
self.pool = '%s-scrub' % self.name
121+
self.cluster.rmpool(self.pool, self.scrub_pool_profile)
122+
self.cluster.mkpool(self.pool, self.scrub_pool_profile, 'rbd')
123+
for node in common.get_fqdn_list('clients'):
124+
for ep_num in range(0, self.endpoints_per_client):
125+
rbd_name = '%s-%s' % (self.pool, self.get_rbd_name(node, ep_num))
126+
self.cluster.mkimage(rbd_name, self.endpoint_size, self.pool, self.data_pool, self.order)
127+
117128
def mount_rbd(self):
118129
for ep_num in range(0, self.endpoints_per_client):
119130
dir_name = self.get_dir_name(ep_num)

client_endpoints/client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ def remove(self):
4545

4646
def create_recovery_image(self):
4747
pass
48+
49+
def create_scrubbing_image(self):
50+
pass

client_endpoints/librbd_client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ def mount(self):
1919

2020
def create_recovery_image(self):
2121
self.create_rbd_recovery()
22+
23+
def create_scrubbing_image(self):
24+
self.create_rbd_scrubbing()

client_endpoints/rbdfuse_client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,6 @@ def map_rbd(self, node, rbd_name):
3131

3232
def create_recovery_image(self):
3333
self.create_rbd_recovery()
34+
35+
def create_scrubbing_image(self):
36+
self.create_rbd_scrubbing()

client_endpoints/rbdkernel_client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,6 @@ def map_rbd(self, node, rbd_name):
2222

2323
def create_recovery_image(self):
2424
self.create_rbd_recovery()
25+
26+
def create_scrubbing_image(self):
27+
self.create_rbd_scrubbing()

client_endpoints/rbdnbd_client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@ def map_rbd(self, node, rbd_name):
1616

1717
def create_recovery_image(self):
1818
self.create_rbd_recovery()
19+
20+
def create_scrubbing_image(self):
21+
self.create_rbd_scrubbing()

client_endpoints/rbdtcmu_client_endpoints.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ def map_rbd(self, node, rbd_name):
2323

2424
def create_recovery_image(self):
2525
self.create_rbd_recovery()
26+
27+
def create_scrubbing_image(self):
28+
self.create_rbd_scrubbing()

0 commit comments

Comments
 (0)