def test_fourservers(self): """ Jira ID: DAOS-1263 Test Description: Test IOR with four servers. Use Cases: Different combinations of 1/64/128 Clients, 1K/4K/32K/128K/512K/1M transfer size. :avocado: tags=ior,fourservers """ # parameters used in pool create createmode = self.params.get("mode_RW", '/run/pool/createmode/') createuid = os.geteuid() creategid = os.getegid() createsetid = self.params.get("setname", '/run/pool/createset/') createsize = self.params.get("size", '/run/pool/createsize/') createsvc = self.params.get("svcn", '/run/pool/createsvc/') # ior parameters iteration = self.params.get("iter", '/run/ior/iteration/') client_processes = self.params.get("np", '/run/ior/clientslots/*') ior_flags = self.params.get("F", '/run/ior/iorflags/') transfer_size = self.params.get("t", '/run/ior/transfersize_blocksize/*/') block_size = self.params.get("b", '/run/ior/transfersize_blocksize/*/') object_class = self.params.get("o", '/run/ior/objectclass/') try: # initialize a python pool object then create the underlying # daos storage self.pool = DaosPool(self.context) self.pool.create(createmode, createuid, creategid, createsize, createsetid, None, None, createsvc) pool_uuid = self.pool.get_uuid_str() tmp_rank_list = [] svc_list = "" for i in range(createsvc): tmp_rank_list.append(int(self.pool.svc.rl_ranks[i])) svc_list += str(tmp_rank_list[i]) + ":" svc_list = svc_list[:-1] ior_utils.run_ior_daos(self.hostfile_clients, ior_flags, iteration, block_size, transfer_size, pool_uuid, svc_list, object_class, self.basepath, client_processes) except (DaosApiError, ior_utils.IorFailed) as excep: self.fail("<FourServers Test run Failed>\n {}".format(excep))
def test_singleserver(self): """ Test IOR with Single Server config. :avocado: tags=ior,singleserver """ # parameters used in pool create createmode = self.params.get("mode", '/run/createtests/createmode/*/') createuid = os.geteuid() creategid = os.getegid() createsetid = self.params.get("setname", '/run/createtests/createset/') createsize = self.params.get("size", '/run/createtests/createsize/') createsvc = self.params.get("svcn", '/run/createtests/createsvc/') # ior parameters client_processes = self.params.get("np", '/run/ior/client_processes/*/') iteration = self.params.get("iter", '/run/ior/iteration/') ior_flags = self.params.get("F", '/run/ior/iorflags/') transfer_size = self.params.get("t", '/run/ior/transfersize_blocksize/*/') block_size = self.params.get("b", '/run/ior/transfersize_blocksize/*/') object_class = self.params.get("o", '/run/ior/objectclass/') try: # initialize a python pool object then create the underlying # daos storage self.pool = DaosPool(self.context) self.pool.create(createmode, createuid, creategid, createsize, createsetid, None, None, createsvc) pool_uuid = self.pool.get_uuid_str() print("pool_uuid: {}".format(pool_uuid)) tmp_rank_list = [] svc_list = "" for item in range(createsvc): tmp_rank_list.append(int(self.pool.svc.rl_ranks[item])) svc_list += str(tmp_rank_list[item]) + ":" svc_list = svc_list[:-1] ior_utils.run_ior_daos(self.hostfile_clients, ior_flags, iteration, block_size, transfer_size, pool_uuid, svc_list, object_class, self.basepath, client_processes) except (DaosApiError, ior_utils.IorFailed) as excep: self.fail("<Single Server Test FAILED>\n {}".format(excep))
def executable(self, iorflags=None): """ Executable function to run ior for sequential and random order """ # parameters used in pool create createmode = self.params.get("mode_RW", '/run/pool/createmode/') createuid = os.geteuid() creategid = os.getegid() createsetid = self.params.get("setname", '/run/pool/createset/') createsize = self.params.get("size", '/run/pool/createsize/') createsvc = self.params.get("svcn", '/run/pool/createsvc/') # ior parameters client_processes = self.params.get("np", '/run/ior/clientslots/*') iteration = self.params.get("iter", '/run/ior/iteration/') block_size = self.params.get("b", '/run/ior/transfersize_blocksize/*/') object_class = self.params.get("o", '/run/ior/objectclass/*/') transfer_size = self.params.get("t", '/run/ior/transfersize_blocksize/*/') try: # initialize a python pool object then create the underlying # daos storage self.pool = DaosPool(self.context) #print("self.context:{}".format(self.context)) self.pool.create(createmode, createuid, creategid, createsize, createsetid, None, None, createsvc) pool_uuid = self.pool.get_uuid_str() svc_list = "" for item in range(createsvc): svc_list += str(int(self.pool.svc.rl_ranks[item])) + ":" svc_list = svc_list[:-1] print("svc_list: {}".format(svc_list)) ior_utils.run_ior_daos(self.hostfile_clients, iorflags, iteration, block_size, transfer_size, pool_uuid, svc_list, object_class, self.basepath, client_processes) except (DaosApiError, ior_utils.IorFailed) as excep: print(excep) self.fail("Test was expected to pass but it failed.\n")
def test_nvme_io(self): """ Test ID: DAOS-2082 Test Description: Test will run IOR with standard and non standard sizes.IOR will be run for all Object type supported. Purpose is to verify pool size (SCM and NVMe) for IOR file. This test is running multiple IOR on same server start instance. :avocado: tags=nvme,nvme_io,large """ ior_args = {} tests = self.params.get("ior_sequence", '/run/ior/*') object_type = self.params.get("object_type", '/run/ior/*') #Loop for every IOR object type for obj_type in object_type: for ior_param in tests: #There is an issue with NVMe if Transfer size>64M, Skipped this #sizes for now if ior_param[2] > 67108864: print ("Xfersize > 64M getting failed, DAOS-1264") continue self.pool = DaosPool(self.context) self.pool.create(self.params.get("mode", '/run/pool/createmode/*'), os.geteuid(), os.getegid(), ior_param[0], self.params.get("setname", '/run/pool/createset/*'), nvme_size=ior_param[1]) self.pool.connect(1 << 1) self.pool_connect = True createsvc = self.params.get("svcn", '/run/pool/createsvc/') svc_list = "" for i in range(createsvc): svc_list += str(int(self.pool.svc.rl_ranks[i])) + ":" svc_list = svc_list[:-1] ior_args['client_hostfile'] = self.hostfile_clients ior_args['pool_uuid'] = self.pool.get_uuid_str() ior_args['svc_list'] = svc_list ior_args['basepath'] = self.basepath ior_args['server_group'] = self.server_group ior_args['tmp_dir'] = self.workdir ior_args['iorflags'] = self.params.get("iorflags", '/run/ior/*') ior_args['iteration'] = self.params.get("iteration", '/run/ior/*') ior_args['transfer_size'] = ior_param[2] ior_args['block_size'] = ior_param[3] ior_args['object_class'] = obj_type ior_args['client_processes'] = ior_param[4] try: size_before_ior = self.pool.pool_query() ior_utils.run_ior_daos(ior_args['client_hostfile'], ior_args['iorflags'], ior_args['iteration'], ior_args['block_size'], ior_args['transfer_size'], ior_args['pool_uuid'], ior_args['svc_list'], ior_args['object_class'], ior_args['basepath'], ior_args['client_processes'], cont_uuid=str(uuid.uuid4()), display_output=True) self.verify_pool_size(size_before_ior, ior_args) except ior_utils.IorFailed as exe: print (exe) print (traceback.format_exc()) self.fail() try: if self.pool_connect: self.pool.disconnect() self.pool_connect = False if self.pool: self.pool.destroy(1) except DaosApiError as exe: print (exe) self.fail("Failed to Destroy/Disconnect the Pool")