예제 #1
0
파일: dmg_utils.py 프로젝트: yulujia/daos
    def __init__(self, path):
        """Create a dmg Command object."""
        super(DmgCommand, self).__init__("/run/dmg/*", "daos_shell", path)

        self.request = BasicParameter("{}")
        self.action = BasicParameter("{}")

        # daos_shell options
        self.hostlist = FormattedParameter("-l {}")
        self.hostfile = FormattedParameter("-f {}")
        self.configpath = FormattedParameter("-o {}")
        self.insecure = FormattedParameter("-i", None)

        # dmg options
        self.gid = FormattedParameter("--gid={}")
        self.uid = FormattedParameter("--uid={}")
        self.group = FormattedParameter("--group={}")
        self.mode = FormattedParameter("--mode={}")
        self.size = FormattedParameter("--size={}")
        self.nvme = FormattedParameter("--nvme={}")
        self.svcn = FormattedParameter("--svcn={}")
        self.target = FormattedParameter("--target={}")
        self.force = FormattedParameter("--force", False)
        self.pool = FormattedParameter("--pool={}")
        self.svc = FormattedParameter("--svc={}")
        self.rank = FormattedParameter("--rank={}")
        self.cont = FormattedParameter("--cont={}")
        self.oid = FormattedParameter("--oid={}")
예제 #2
0
    def __init__(self, daosbinpath, runnerpath, attach="/tmp", timeout=300):
        """Create a ServerManager object.

        Args:
            daosbinpath (str): Path to daos bin
            runnerpath (str): Path to Orterun binary.
            attach (str, optional): Defaults to "/tmp".
            timeout (int, optional): Time for the server to start.
                Defaults to 300.
        """
        super(ServerManager, self).__init__("/run/server_manager/*", "", "")

        self.daosbinpath = daosbinpath
        self._hosts = None

        # Setup orterun command defaults
        self.runner = Orterun(DaosServer(self.daosbinpath), runnerpath, True)

        # Setup server command defaults
        self.runner.job.action.value = "start"
        self.runner.job.get_action_command()

        # Set server environment
        os.environ["CRT_ATTACH_INFO_PATH"] = attach

        # Parameters that user can specify in the test yaml to modify behavior.
        self.debug = BasicParameter(None, True)  # ServerCommand param
        self.attach = BasicParameter(None, attach)  # ServerCommand param
        self.insecure = BasicParameter(None, True)  # ServerCommand param
        self.recreate = BasicParameter(None, True)  # ServerCommand param
        self.sudo = BasicParameter(None, False)  # ServerCommand param
        self.srv_timeout = BasicParameter(None, timeout)  # ServerCommand param
        self.report_uri = BasicParameter(None)  # Orterun param
        self.enable_recovery = BasicParameter(None, True)  # Orterun param
        self.export = BasicParameter(None)  # Orterun param
예제 #3
0
    def __init__(self, path=""):
        """Create a FioCommand object.

        Args:
            path (str, optional): path to location of command binary file.
                Defaults to "".
        """
        super(FioCommand, self).__init__("/run/fio/*", "fio", path)

        # fio commandline options
        self.debug = FormattedParameter("--debug={}")
        self.parse_only = FormattedParameter("--parse-only", False)
        self.output = FormattedParameter("--output={}")
        self.bandwidth_log = FormattedParameter("--bandwidth-log", False)
        self.minimal = FormattedParameter("minimal", False)
        self.output_format = FormattedParameter("--output-format={}")
        self.terse_version = FormattedParameter("--terse-version={}")
        self.version = FormattedParameter("--version", False)
        self.fio_help = FormattedParameter("--help", False)
        self.cpuclock_test = FormattedParameter("--cpuclock-test", False)
        self.crctest = FormattedParameter("--crctest={}")
        self.cmdhelp = FormattedParameter("--cmdhelp={}")
        self.enghelp = FormattedParameter("--enghelp={}")
        self.showcmd = FormattedParameter("--showcmd={}")
        self.eta = FormattedParameter("--eta={}")
        self.eta_newline = FormattedParameter("--eta-newline={}")
        self.status_interval = FormattedParameter("--status-interval={}")
        self.readonly = FormattedParameter("--readonly", False)
        self.section = FormattedParameter("--section={}")
        self.alloc_size = FormattedParameter("--alloc-size={}")
        self.warnings_fatal = FormattedParameter("--warnings-fatal", False)
        self.max_jobs = FormattedParameter("--max-jobs={}")
        self.server = FormattedParameter("--server={}")
        self.daemonize = FormattedParameter("--daemonize={}")
        self.client = FormattedParameter("--client={}")
        self.remote_config = FormattedParameter("--remote-config={}")
        self.idle_prof = FormattedParameter("--idle-prof={}")
        self.inflate_log = FormattedParameter("--inflate-log={}")
        self.trigger_file = FormattedParameter("--trigger-file={}")
        self.trigger_timeout = FormattedParameter("--trigger-timeout={}")
        self.trigger = FormattedParameter("--trigger={}")
        self.trigger_remote = FormattedParameter("--trigger-remote={}")
        self.aux_path = FormattedParameter("--aux-path={}")

        # Middleware to use with fio.  Needs to be configured externally prior
        # to calling run().
        self.api = BasicParameter(None, "POSIX")

        # List of fio job names to run
        self.names = BasicParameter(None)
        self._jobs = {}

        # List of hosts on which the fio command will run.  If not defined the
        # fio command will run locally
        self._hosts = None
예제 #4
0
    def __init__(self, context, dmg_command, cb_handler=None):
        # pylint: disable=unused-argument
        """Initialize a TestPool object.

        Args:
            context (DaosContext): [description]
            dmg_command (DmgCommand): DmgCommand used to call dmg command. This
                value can be obtained by calling self.get_dmg_command() from a
                test. It'll return the object with -l <Access Point host:port>
                and --insecure.
            log (logging): logging object used to report the pool status
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestPool, self).__init__("/run/pool/*", cb_handler)
        self.context = context
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)  # server group name
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)
        self.prop_name = BasicParameter(None)  # name of property to be set
        self.prop_value = BasicParameter(None)  # value of property

        self.pool = None
        self.uuid = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
        self.dmg = dmg_command
        self.query_data = []
예제 #5
0
 def __init__(self):
     """Create a AgentSecurityConfig object."""
     super(DaosAgentConfig.AgentSecurityConfig,
           self).__init__("/run/agent_config/transport_config/*")
     #transport_config:
     #  allow_insecure: true
     #  ca_cert:        .daos/daosCA.crt
     #  cert:           .daos/daos_agent.crt
     #  key:            .daos/daos_agent.key
     #  server_name:    server
     self.allow_insecure = BasicParameter(None, True)
     self.ca_cert = BasicParameter(None, ".daos/daosCA.crt")
     self.cert = BasicParameter(None, ".daos/daos_agent.crt")
     self.key = BasicParameter(None, ".daos/daos_agent.key")
     self.server_name = BasicParameter(None, "server")
예제 #6
0
    def __init__(self, path, host):
        """Create a daos_racer command object.

        Args:
            path (str): path of the daos_racer command
            host (str): host on which to run the daos_racer command
        """
        super(DaosRacerCommand, self).__init__(
            "/run/daos_racer", "daos_racer", path)
        self.host = host

        # Number of seconds to run
        self.runtime = FormattedParameter("-t {}", 60)

        # Optional timeout for the clush command running the daos_racer command.
        # This should be set greater than the 'runtime' value but less than the
        # avocado test timeout value to allow for proper cleanup.  Using a value
        # of None will result in no timeout being used.
        self.clush_timeout = BasicParameter(None)

        # Environment variable names required to be set when running the
        # daos_racer command.  The values for these names are populated by the
        # get_environment() method and added to command line by the
        # set_environment() method.
        self._env_names = ["OFI_INTERFACE", "CRT_PHY_ADDR_STR", "D_LOG_FILE"]
예제 #7
0
    def __init__(self, namespace, cb_handler=None):
        """Create a TestDaosApi object.

        Args:
            namespace (str): yaml namespace (path to parameters)
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestDaosApiBase, self).__init__(namespace)
        self.cb_handler = cb_handler
        self.debug = BasicParameter(None, False)

        # Test yaml parameter used to define the control method:
        #   USE_API    - use the API methods to create/destroy pools/containers
        #   USE_DMG    - use the dmg command to create/destroy pools/containers
        #   USE_DAOS   - use the daos command to create/destroy pools/containers
        self.control_method = BasicParameter(self.USE_API, self.USE_API)
예제 #8
0
파일: test_utils.py 프로젝트: yulujia/daos
    def __init__(self, context, log, cb_handler=None):
        """[summary].

        Args:
            context (DaosContext): [description]
            log (logging): logging object used to report the pool status
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestPool, self).__init__("/run/pool/*", cb_handler)
        self.context = context
        self.log = log
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)
        self.group = BasicParameter(None)
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)

        self.pool = None
        self.uuid = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
예제 #9
0
    def __init__(self, namespace, name, data):
        """Create a ConfigurationParameters object.

        Args:
            name (str): configuration name; used to define param namespace
            data (ConfigurationData): object retaining the host data needed to
                verify the configuration requirement
        """
        super(ConfigurationParameters, self).__init__(namespace + name + "/*")
        self.name = name
        self._config_data = data

        # Define the yaml entries that define the configuration
        #  - Make sure to add any new parameter names defined here in the
        #    ConfigurationData._data_key_map dictionary
        self.mem_size = BasicParameter(0, 0)
        self.nvme_size = BasicParameter(0, 0)
        self.scm_size = BasicParameter(0, 0)
예제 #10
0
    def __init__(self, namespace, cb_handler=None):
        """Create a TestDaosApi object.

        Args:
            namespace (str): yaml namespace (path to parameters)
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestDaosApiBase, self).__init__(namespace)
        self.cb_handler = cb_handler
        self.debug = BasicParameter(None, False)
예제 #11
0
    def __init__(self, context, log=None, cb_handler=None, dmg_bin_path=None):
        # pylint: disable=unused-argument
        """Initialize a TestPool object.

        Note: 'log' is now a defunct argument and will be removed in the future

        Args:
            context (DaosContext): [description]
            log (logging): logging object used to report the pool status
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestPool, self).__init__("/run/pool/*", cb_handler)
        self.context = context
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)  # server group name
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)
        # Set USE_API to use API or USE_DMG to use dmg. If it's not set, API is
        # used.
        self.control_method = BasicParameter(self.USE_API, self.USE_API)
        uname = getpass.getuser()
        gname = grp.getgrnam(uname)[0]
        self.username = BasicParameter(uname, uname)
        self.groupname = BasicParameter(gname, gname)

        self.pool = None
        self.uuid = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
        self.dmg = None
        # Required to use dmg. It defined the directory where dmg is installed.
        # Use self.basepath + '/install/bin' in the test
        self.dmg_bin_path = dmg_bin_path
        if dmg_bin_path is not None:
            # We make dmg as the member of this class because the test would
            # have more flexibility over the usage of the command.
            self.dmg = DmgCommand(self.dmg_bin_path)
            self.dmg.insecure.value = True
            self.dmg.request.value = "pool"
예제 #12
0
    def __init__(self):
        """Create a DaosServerConfig object."""
        super(DaosServerConfig, self).__init__("/run/server_config/*")

        # Parameters
        self.name = BasicParameter(None, "daos_server")
        self.access_points = BasicParameter(None)  # e.g. "<host>:<port>"
        self.port = BasicParameter(None, 10001)
        self.provider = BasicParameter(None, "ofi+sockets")
        self.socket_dir = BasicParameter(None)  # /tmp/daos_sockets
        self.nr_hugepages = BasicParameter(None, 4096)
        self.control_log_mask = BasicParameter(None, "DEBUG")
        self.control_log_file = BasicParameter(None, "/tmp/daos_control.log")

        # Used to drop privileges before starting data plane
        # (if started as root to perform hardware provisioning)
        self.user_name = BasicParameter(None)  # e.g. 'daosuser'
        self.group_name = BasicParameter(None)  # e.g. 'daosgroup'

        # Single server config parameters
        self.server_params = [self.SingleServerConfig()]
예제 #13
0
    def __init__(self, pool, cb_handler=None):
        """Create a TeestContainer object.

        Args:
            pool (TestPool): the test pool in which to create the container
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestContainer, self).__init__("/run/container/*", cb_handler)
        self.pool = pool

        self.object_qty = BasicParameter(None)
        self.record_qty = BasicParameter(None)
        self.akey_size = BasicParameter(None)
        self.dkey_size = BasicParameter(None)
        self.data_size = BasicParameter(None)

        self.container = None
        self.uuid = None
        self.opened = False
        self.written_data = []
예제 #14
0
    def __init__(self, pool, cb_handler=None):
        """Create a TeestContainer object.

        Args:
            pool (TestPool): the test pool in which to create the container
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestContainer, self).__init__("/run/container/*", cb_handler)
        self.pool = pool

        self.object_qty = BasicParameter(None)
        self.record_qty = BasicParameter(None)
        self.akey_size = BasicParameter(None)
        self.dkey_size = BasicParameter(None)
        self.data_size = BasicParameter(None)
        self.data_array_size = BasicParameter(0, 0)
        # Provider access to get input params values
        # for enabling different container properties
        self.input_params = DaosInputParams()

        self.container = None
        self.uuid = None
        self.info = None
        self.opened = False
        self.written_data = []
예제 #15
0
    def __init__(self, context, log=None, cb_handler=None):
        # pylint: disable=unused-argument
        """Initialize a TestPool object.

        Note: 'log' is now a defunct argument and will be removed in the future

        Args:
            context (DaosContext): [description]
            log (logging): logging object used to report the pool status
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestPool, self).__init__("/run/pool/*", cb_handler)
        self.context = context
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)            # server group name
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)

        self.pool = None
        self.uuid = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
예제 #16
0
    def __init__(self, context, log=None, cb_handler=None, dmg_command=None):
        # pylint: disable=unused-argument
        """Initialize a TestPool object.

        Note: 'log' is now a defunct argument and will be removed in the future

        Args:
            context (DaosContext): [description]
            log (logging): logging object used to report the pool status
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
            dmg_command (DmgCommand): DmgCommand used to call dmg command. If
                control_method is set to dmg, this value needs to be set. It
                can be obtained by calling self.get_dmg_command() from a test.
                It'll return the object with -l <Access Point host:port> and
                --insecure.
        """
        super(TestPool, self).__init__("/run/pool/*", cb_handler)
        self.context = context
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)            # server group name
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)
        # Set USE_API to use API or USE_DMG to use dmg. If it's not set, API is
        # used.
        self.control_method = BasicParameter(self.USE_API, self.USE_API)
        uname = getpass.getuser()
        gname = grp.getgrgid(self.gid)[0]
        self.username = BasicParameter(uname, uname)
        self.groupname = BasicParameter(gname, gname)

        self.pool = None
        self.uuid = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
        self.dmg = dmg_command
예제 #17
0
    def __init__(self, path="", env=None):
        """Create a ExecutableCommand object.

        Uses Avocado's utils.process module to run a command str provided.

        Args:
            command (str): string of the command to be executed.
            path (str, optional): path to location of command binary file.
                Defaults to ""
        """
        super(IoConfGen, self).__init__("/run/gen_io_conf/*",
                                        "daos_gen_io_conf", path)
        self.verbose = True
        self.env = env
        self.ranks = FormattedParameter("-g {}")
        self.targets = FormattedParameter("-t {}")
        self.obj_num = FormattedParameter("-o {}")
        self.akeys = FormattedParameter("-a {}")
        self.dkeys = FormattedParameter("-d {}")
        self.record_size = FormattedParameter("-s {}")
        self.obj_class = FormattedParameter("-O {}")
        self.filename = BasicParameter(None, "testfile")
예제 #18
0
    def __init__(self):
        """Create a DaosAgentConfig object."""
        super(DaosAgentConfig, self).__init__("/run/agent_config/*")

        # DaosAgentConfig Parameters
        #   name: daos
        #   access_points: ['server[0]:10001']
        #   port: 10001
        #   hostlist: ['host1', 'host2']
        #   runtime_dir: /var/run/daos_agent
        #   log_file: /tmp/daos_agent.log
        self.name = BasicParameter(None, "daos")
        self.access_points = BasicParameter(None)
        self.port = BasicParameter(None, 10001)
        self.hostlist = BasicParameter(None)
        self.runtime_dir = BasicParameter(None, "/var/run/daos_agent")
        self.log_file = BasicParameter(None, "/tmp/daos_agent.log")

        # Agent transport_config parameters
        self.transport_params = self.AgentSecurityConfig()
예제 #19
0
    def __init__(self, context, dmg_command, cb_handler=None,
                 label_generator=None):
        # pylint: disable=unused-argument
        """Initialize a TestPool object.

        Args:
            context (DaosContext): The daos environment and other info. Use
                self.context when calling from a test.
            dmg_command (DmgCommand): DmgCommand used to call dmg command. This
                value can be obtained by calling self.get_dmg_command() from a
                test. It'll return the object with -l <Access Point host:port>
                and --insecure.
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
            label_generator (LabelGenerator, optional): Generates label by
                adding number to the end of the prefix set in self.label.
                There's a link between label_generator and label. If the label
                is used as it is, i.e., not None, label_generator must be
                provided in order to call create(). Defaults to None.
        """
        super().__init__("/run/pool/*", cb_handler)
        self.context = context
        self.uid = os.geteuid()
        self.gid = os.getegid()

        self.mode = BasicParameter(None)
        self.name = BasicParameter(None)            # server group name
        self.svcn = BasicParameter(None)
        self.target_list = BasicParameter(None)
        self.nranks = BasicParameter(None)
        self.size = BasicParameter(None)
        self.tier_ratio = BasicParameter(None)
        self.scm_size = BasicParameter(None)
        self.nvme_size = BasicParameter(None)
        self.prop_name = BasicParameter(None)       # name of property to be set
        self.prop_value = BasicParameter(None)      # value of property
        self.properties = BasicParameter(None)      # string of cs name:value
        self.rebuild_timeout = BasicParameter(None)
        self.pool_query_timeout = BasicParameter(None)
        self.acl_file = BasicParameter(None)
        self.label = BasicParameter(None, "TestLabel")
        self.label_generator = label_generator

        # Optional TestPool parameters used to autosize the dmg pool create
        # 'size', 'scm_size', and/or 'nvme_size' values:
        #   server_index: TestWithServers.server_managers list index
        #   quantity:     number of pools to account for in sizing
        #   min_targets:  minimum number of targets allowed
        self.server_index = BasicParameter(None, 0)
        self.quantity = BasicParameter(None, 1)
        self.min_targets = BasicParameter(None, 1)

        self.pool = None
        self.info = None
        self.svc_ranks = None
        self.connected = False
        # Flag to allow the non-create operations to use UUID. e.g., if you want
        # to destroy the pool with UUID, set this to False, then call destroy().
        self.use_label = True

        self._dmg = None
        self.dmg = dmg_command

        self.query_data = []
예제 #20
0
        def __init__(self, index=None):
            """Create a SingleServerConfig object.

            Args:
                index (int, optional): index number for the namespace path used
                    when specifying multiple servers per host. Defaults to None.
            """
            namespace = "/run/server_config/servers/*"
            if isinstance(index, int):
                namespace = "/run/server_config/servers/{}/*".format(index)
            super(DaosServerConfig.SingleServerConfig,
                  self).__init__(namespace)

            # Use environment variables to get default parameters
            default_interface = os.environ.get("OFI_INTERFACE", "eth0")
            default_port = os.environ.get("OFI_PORT", 31416)

            # Parameters
            #   targets:                count of VOS targets
            #   first_core:             starting index for targets
            #   nr_xs_helpers:          offload helpers per server
            #   fabric_iface:           map to OFI_INTERFACE=eth0
            #   fabric_iface_port:      map to OFI_PORT=31416
            #   log_mask:               map to D_LOG_MASK env
            #   log_file:               map to D_LOG_FILE env
            #   env_vars:               influences DAOS IO Server behaviour
            #       Add to enable scalable endpoint:
            #           - CRT_CREDIT_EP_CTX=0
            #           - CRT_CTX_SHARE_ADDR=1
            #           - CRT_CTX_NUM=8
            #       nvme options:
            #           - IO_STAT_PERIOD=10
            self.targets = BasicParameter(None, 8)
            self.first_core = BasicParameter(None, 0)
            self.nr_xs_helpers = BasicParameter(None, 16)
            self.fabric_iface = BasicParameter(None, default_interface)
            self.fabric_iface_port = BasicParameter(None, default_port)
            self.pinned_numa_node = BasicParameter(None)
            self.log_mask = BasicParameter(None, "DEBUG")
            self.log_file = BasicParameter(None, "daos_server.log")
            self.env_vars = BasicParameter(None, [
                "ABT_ENV_MAX_NUM_XSTREAMS=100", "ABT_MAX_NUM_XSTREAMS=100",
                "DAOS_MD_CAP=1024", "CRT_CTX_SHARE_ADDR=0", "CRT_TIMEOUT=30",
                "FI_SOCKETS_MAX_CONN_RETRY=1", "FI_SOCKETS_CONN_TIMEOUT=2000",
                "DD_MASK=mgmt,io,md,epc,rebuild"
            ])

            # Storage definition parameters:
            #
            # When scm_class is set to ram, tmpfs will be used to emulate SCM.
            #   scm_mount: /mnt/daos        - map to -s /mnt/daos
            #   scm_class: ram
            #   scm_size: 6                 - size in GB units
            #
            # When scm_class is set to dcpm, scm_list is the list of device
            # paths for AppDirect pmem namespaces (currently only one per
            # server supported).
            #   scm_class: dcpm
            #   scm_list: [/dev/pmem0]
            #
            # If using NVMe SSD (will write /mnt/daos/daos_nvme.conf and start
            # I/O service with -n <path>)
            #   bdev_class: nvme
            #   bdev_list: ["0000:81:00.0"] - generate regular nvme.conf
            #
            # If emulating NVMe SSD with malloc devices
            #   bdev_class: malloc          - map to VOS_BDEV_CLASS=MALLOC
            #   bdev_size: 4                - malloc size of each device in GB.
            #   bdev_number: 1              - generate nvme.conf as follows:
            #       [Malloc]
            #       NumberOfLuns 1
            #       LunSizeInMB 4000
            #
            # If emulating NVMe SSD over kernel block device
            #   bdev_class: kdev            - map to VOS_BDEV_CLASS=AIO
            #   bdev_list: [/dev/sdc]       - generate nvme.conf as follows:
            #       [AIO]
            #       AIO /dev/sdc AIO2
            #
            # If emulating NVMe SSD with backend file
            #   bdev_class: file            - map to VOS_BDEV_CLASS=AIO
            #   bdev_size: 16               - file size in GB. Create file if
            #                                 it does not exist.
            #   bdev_list: [/tmp/daos-bdev] - generate nvme.conf as follows:
            #       [AIO]
            #       AIO /tmp/aiofile AIO1 4096
            self.scm_mount = BasicParameter(None, "/mnt/daos")
            self.scm_class = BasicParameter(None, "ram")
            self.scm_size = BasicParameter(None, 16)
            self.scm_list = BasicParameter(None)
            self.bdev_class = BasicParameter(None)
            self.bdev_list = BasicParameter(None)
            self.bdev_size = BasicParameter(None)
            self.bdev_number = BasicParameter(None)
예제 #21
0
 def __init__(self):
     """Initialize a RebuildTestParams object."""
     super(RebuildTestParams, self).__init__("/run/rebuild/*")
     self.object_class = BasicParameter(None)
     self.rank = BasicParameter(None)
예제 #22
0
    def __init__(self, pool, cb_handler=None, daos_command=None):
        """Create a TeestContainer object.

        Args:
            pool (TestPool): the test pool in which to create the container
            cb_handler (CallbackHandler, optional): callback object to use with
                the API methods. Defaults to None.
        """
        super(TestContainer, self).__init__("/run/container/*", cb_handler)
        self.pool = pool

        self.object_qty = BasicParameter(None)
        self.record_qty = BasicParameter(None)
        self.akey_size = BasicParameter(None)
        self.dkey_size = BasicParameter(None)
        self.data_size = BasicParameter(None)
        self.data_array_size = BasicParameter(0, 0)
        # Provider access to get input params values
        # for enabling different container properties
        self.input_params = DaosInputParams()

        # Optional daos command objec to use with the USE_DAOS control method
        self.daos = daos_command

        # Optional daos command argument values to use with the USE_DAOS control
        # method when creating/destroying containers
        self.path = BasicParameter(None)
        self.type = BasicParameter(None)
        self.oclass = BasicParameter(None)
        self.chunk_size = BasicParameter(None)
        self.properties = BasicParameter(None)

        self.container = None
        self.uuid = None
        self.info = None
        self.opened = False
        self.written_data = []
예제 #23
0
    def __init__(self, namespace, command, test):
        """Create a fio Command object."""
        super(FioCommand, self).__init__(namespace, command)
        self.test = test

        # fio commandline options
        self.debug = FormattedParameter("--debug={}")
        self.parse_only = FormattedParameter("--parse-only", False)
        self.output = FormattedParameter("--output={}")
        self.bandwidth_log = FormattedParameter("--bandwidth-log", False)
        self.minimal = FormattedParameter("minimal", False)
        self.output_format = FormattedParameter("--output-format={}")
        self.terse_version = FormattedParameter("--terse-version={}")
        self.version = FormattedParameter("--version", False)
        self.fio_help = FormattedParameter("--help", False)
        self.cpuclock_test = FormattedParameter("--cpuclock-test", False)
        self.crctest = FormattedParameter("--crctest={}")
        self.cmdhelp = FormattedParameter("--cmdhelp={}")
        self.enghelp = FormattedParameter("--enghelp={}")
        self.showcmd = FormattedParameter("--showcmd={}")
        self.eta = FormattedParameter("--eta={}")
        self.eta_newline = FormattedParameter("--eta-newline={}")
        self.status_interval = FormattedParameter("--status-interval={}")
        self.readonly = FormattedParameter("--readonly", False)
        self.section = FormattedParameter("--section={}")
        self.alloc_size = FormattedParameter("--alloc-size={}")
        self.warnings_fatal = FormattedParameter("--warnings-fatal", False)
        self.max_jobs = FormattedParameter("--max-jobs={}")
        self.server = FormattedParameter("--server={}")
        self.daemonize = FormattedParameter("--daemonize={}")
        self.client = FormattedParameter("--client={}")
        self.remote_config = FormattedParameter("--remote-config={}")
        self.idle_prof = FormattedParameter("--idle-prof={}")
        self.inflate_log = FormattedParameter("--inflate-log={}")
        self.trigger_file = FormattedParameter("--trigger-file={}")
        self.trigger_timeout = FormattedParameter("--trigger-timeout={}")
        self.trigger = FormattedParameter("--trigger={}")
        self.trigger_remote = FormattedParameter("--trigger-remote={}")
        self.aux_path = FormattedParameter("--aux-path={}")

        # fio job options
        self.description = FormattedParameter("--description={}")
        self.name = FormattedParameter("--name={}")
        self.wait_for = FormattedParameter("--wait_for={}")
        self.filename = FormattedParameter("--filename={}")
        self.lockfile = FormattedParameter("--lockfile={}")
        self.directory = FormattedParameter("--directory={}")
        self.filename_format = FormattedParameter("--filename_format={}")
        self.unique_filename = FormattedParameter("--unique_filename={}")
        self.opendir = FormattedParameter("--opendir={}")
        self.rw = FormattedParameter("--rw={}")
        self.blocksize = FormattedParameter("--bs={}")
        self.blockalign = FormattedParameter("--ba={}")
        self.bsrange = FormattedParameter("--bsrange={}")
        self.bssplit = FormattedParameter("--bssplit={}")
        self.bs_unaligned = FormattedParameter("--bs_unaligned", False)
        self.randrepeat = FormattedParameter("--randrepeat={}")
        self.randseed = FormattedParameter("--randseed={}")
        self.norandommap = FormattedParameter("--norandommap", False)
        self.ignore_error = FormattedParameter("--ignore_error={}")
        self.rw_sequencer = FormattedParameter("--rw_sequencer={}")
        self.ioengine = FormattedParameter("--ioengine={}")
        self.iodepth = FormattedParameter("--iodepth={}")
        self.iodepth_batch = FormattedParameter("--iodepth_batch={}")
        self.iodepth_batch_complete_min = FormattedParameter(
            "--iodepth_batch_complete_min={}")
        self.iodepth_batch_complete_max = FormattedParameter(
            "--iodepth_batch_complete_max={}")
        self.iodepth_low = FormattedParameter("--iodepth_low={}")
        self.serialize_overlap = FormattedParameter("--serialize_overlap={}")
        self.io_submit_mode = FormattedParameter("--io_submit_mode={}")
        self.size = FormattedParameter("--size={}")
        self.io_size = FormattedParameter("--io_size={}")
        self.fill_device = FormattedParameter("--fill_device={}")
        self.filesize = FormattedParameter("--filesize={}")
        self.file_append = FormattedParameter("--file_append={}")
        self.offset = FormattedParameter("--offset={}")
        self.offset_increment = FormattedParameter("--offset_increment={}")
        self.offset_align = FormattedParameter("--offset_align={}")
        self.number_ios = FormattedParameter("--number_ios={}")
        self.random_generator = FormattedParameter("--random_generator={}")
        self.random_distribution = FormattedParameter(
            "--random_distribution={}")
        self.percentage_random = FormattedParameter("--percentage_random={}")
        self.allrandrepeat = FormattedParameter("--allrandrepeat={}")
        self.nrfiles = FormattedParameter("--nrfiles={}")
        self.file_service_type = FormattedParameter("--file_service_type={}")
        self.openfiles = FormattedParameter("--openfiles={}")
        self.fallocate = FormattedParameter("--fallocate={}")
        self.fadvise_hint = FormattedParameter("--fadvise_hint={}")
        self.fsync = FormattedParameter("--fsync={}")
        self.fdatasync = FormattedParameter("--fdatasync={}")
        self.write_barrier = FormattedParameter("--write_barrier={}")
        self.sync_file_range = FormattedParameter("--sync_file_range={}")
        self.direct = FormattedParameter("--direct={}")
        self.atomic = FormattedParameter("--atomic={}")
        self.buffered = FormattedParameter("--buffered={}")
        self.sync = FormattedParameter("--sync={}")
        self.overwrite = FormattedParameter("--overwrite={}")
        self.loops = FormattedParameter("--loops={}")
        self.numjobs = FormattedParameter("--numjobs={}")
        self.startdelay = FormattedParameter("--startdelay={}")
        self.runtime = FormattedParameter("--runtime={}")
        self.time_based = FormattedParameter("--time_based={}")
        self.verify_only = FormattedParameter("--verify_only", False)
        self.ramp_time = FormattedParameter("--ramp_time={}")
        self.clocksource = FormattedParameter("--clocksource={}")
        self.mem = FormattedParameter("--mem={}")
        self.verify = FormattedParameter("--verify={}")
        self.do_verify = FormattedParameter("--do_verify={}")
        self.verifysort = FormattedParameter("--verifysort={}")
        self.verifysort_nr = FormattedParameter("--verifysort_nr={}")
        self.verify_interval = FormattedParameter("--verify_interval={}")
        self.verify_offset = FormattedParameter("--verify_offset={}")
        self.verify_pattern = FormattedParameter("--verify_pattern={}")
        self.verify_fatal = FormattedParameter("--verify_fatal={}")
        self.verify_dump = FormattedParameter("--verify_dump={}")
        self.verify_async = FormattedParameter("--verify_async={}")
        self.verify_backlog = FormattedParameter("--verify_backlog={}")
        self.verify_backlog_batch = FormattedParameter(
            "--verify_backlog_batch={}")
        self.experimental_verify = FormattedParameter(
            "--experimental_verify={}")
        self.verify_state_load = FormattedParameter("--verify_state_load={}")
        self.verify_state_save = FormattedParameter("--verify_state_save={}")
        self.trim_percentage = FormattedParameter("--trim_percentage={}")
        self.trim_verify_zero = FormattedParameter("--trim_verify_zero={}")
        self.trim_backlog = FormattedParameter("--trim_backlog={}")
        self.trim_backlog_batch = FormattedParameter("--trim_backlog_batch={}")
        self.write_iolog = FormattedParameter("--write_iolog={}")
        self.read_iolog = FormattedParameter("--read_iolog={}")
        self.replay_no_stall = FormattedParameter("--replay_no_stall={}")
        self.replay_redirect = FormattedParameter("--replay_redirect={}")
        self.replay_scale = FormattedParameter("--replay_scale={}")
        self.replay_align = FormattedParameter("--replay_align={}")
        self.exec_prerun = FormattedParameter("--exec_prerun={}")
        self.exec_postrun = FormattedParameter("--exec_postrun={}")
        self.ioscheduler = FormattedParameter("--ioscheduler={}")
        self.zonesize = FormattedParameter("--zonesize={}")
        self.zonerange = FormattedParameter("--zonerange={}")
        self.zoneskip = FormattedParameter("--zoneskip={}")
        self.lockmem = FormattedParameter("--lockmem={}")
        self.rwmixread = FormattedParameter("--rwmixread={}")
        self.rwmixwrite = FormattedParameter("--rwmixwrite={}")
        self.nice = FormattedParameter("--nice={}")
        self.prio = FormattedParameter("--prio={}")
        self.prioclass = FormattedParameter("--prioclass={}")
        self.thinktime = FormattedParameter("--thinktime={}")
        self.thinktime_spin = FormattedParameter("--thinktime_spin={}")
        self.thinktime_blocks = FormattedParameter("--thinktime_blocks={}")
        self.rate = FormattedParameter("--rate={}")
        self.rate_min = FormattedParameter("--rate_min={}")
        self.rate_process = FormattedParameter("--rate_process={}")
        self.rate_cycle = FormattedParameter("--rate_cycle={}")
        self.rate_ignore_thinktime = FormattedParameter(
            "--rate_ignore_thinktime={}")
        self.rate_iops = FormattedParameter("--rate_iops={}")
        self.rate_iops_min = FormattedParameter("--rate_iops_min={}")
        self.max_latency = FormattedParameter("--max_latency={}")
        self.latency_target = FormattedParameter("--latency_target={}")
        self.latency_window = FormattedParameter("--latency_window={}")
        self.latency_percentile = FormattedParameter("--latency_percentile={}")
        self.invalidate = FormattedParameter("--invalidate={}")
        self.write_hint = FormattedParameter("--write_hint={}")
        self.create_serialize = FormattedParameter("--create_serialize={}")
        self.create_fsync = FormattedParameter("--create_fsync={}")
        self.create_on_open = FormattedParameter("--create_on_open={}")
        self.create_only = FormattedParameter("--create_only={}")
        self.allow_file_create = FormattedParameter("--allow_file_create={}")
        self.allow_mounted_write = FormattedParameter(
            "--allow_mounted_write={}")
        self.pre_read = FormattedParameter("--pre_read={}")
        self.cpumask = FormattedParameter("--cpumask={}")
        self.cpus_allowed = FormattedParameter("--cpus_allowed={}")
        self.cpus_allowed_policy = FormattedParameter(
            "--cpus_allowed_policy={}")
        self.numa_cpu_nodes = FormattedParameter("--numa_cpu_nodes={}")
        self.numa_mem_policy = FormattedParameter("--numa_mem_policy={}")
        self.end_fsync = FormattedParameter("--end_fsync={}")
        self.fsync_on_close = FormattedParameter("--fsync_on_close={}")
        self.unlink = FormattedParameter("--unlink={}")
        self.unlink_each_loop = FormattedParameter("--unlink_each_loop={}")
        self.exitall = FormattedParameter("--exitall", False)
        self.exitall_on_error = FormattedParameter("--exitall_on_error", False)
        self.stonewall = FormattedParameter("--stonewall", False)
        self.new_group = FormattedParameter("--new_group", False)
        self.thread = FormattedParameter("--thread={}")
        self.per_job_logs = FormattedParameter("--per_job_logs={}")
        self.write_bw_log = FormattedParameter("--write_bw_log={}")
        self.bwavgtime = FormattedParameter("--bwavgtime={}")
        self.write_lat_log = FormattedParameter("--write_lat_log={}")
        self.write_iops_log = FormattedParameter("--write_iops_log={}")
        self.iopsavgtime = FormattedParameter("--iopsavgtime={}")
        self.log_avg_msec = FormattedParameter("--log_avg_msec={}")
        self.log_hist_msec = FormattedParameter("--log_hist_msec={}")
        self.log_hist_coarseness = FormattedParameter(
            "--log_hist_coarseness={}")
        self.write_hist_log = FormattedParameter("--write_hist_log={}")
        self.log_max_value = FormattedParameter("--log_max_value={}")
        self.log_offset = FormattedParameter("--log_offset={}")
        self.log_compression = FormattedParameter("--log_compression={}")
        self.log_compression_cpus = FormattedParameter(
            "--log_compression_cpus={}")
        self.log_store_compressed = FormattedParameter(
            "--log_store_compressed={}")
        self.log_unix_epoch = FormattedParameter("--log_unix_epoch={}")
        self.block_error_percentiles = FormattedParameter(
            "--block_error_percentiles={}")
        self.group_reporting = FormattedParameter("--group_reporting={}")
        self.stats = FormattedParameter("--stats={}")
        self.zero_buffers = FormattedParameter("--zero_buffers={}")
        self.refill_buffers = FormattedParameter("--refill_buffers={}")
        self.scramble_buffers = FormattedParameter("--scramble_buffers={}")
        self.buffer_pattern = FormattedParameter("--buffer_pattern={}")
        self.buffer_compress_percentage = FormattedParameter(
            "--buffer_compress_percentage={}")
        self.buffer_compress_chunk = FormattedParameter(
            "--buffer_compress_chunk={}")
        self.dedupe_percentage = FormattedParameter("--dedupe_percentage={}")
        self.clat_percentiles = FormattedParameter("--clat_percentiles={}")
        self.lat_percentiles = FormattedParameter("--lat_percentiles={}")
        self.percentile_list = FormattedParameter("--percentile_list={}")
        self.significant_figures = FormattedParameter(
            "--significant_figures={}")
        self.disk_util = FormattedParameter("--disk_util={}")
        self.gtod_reduce = FormattedParameter("--gtod_reduce={}")
        self.disable_lat = FormattedParameter("--disable_lat={}")
        self.disable_clat = FormattedParameter("--disable_clat={}")
        self.disable_slat = FormattedParameter("--disable_slat={}")
        self.disable_bw_measurement = FormattedParameter(
            "--disable_bw_measurement={}")
        self.gtod_cpu = FormattedParameter("--gtod_cpu={}")
        self.unified_rw_reporting = FormattedParameter(
            "--unified_rw_reporting={}")
        self.continue_on_error = FormattedParameter("--continue_on_error={}")
        self.error_dump = FormattedParameter("--error_dump={}")
        self.profile = FormattedParameter("--profile={}")
        self.cgroup = FormattedParameter("--cgroup={}")
        self.cgroup_nodelete = FormattedParameter("--cgroup_nodelete={}")
        self.cgroup_weight = FormattedParameter("--cgroup_weight={}")
        self.uid = FormattedParameter("--uid={}")
        self.gid = FormattedParameter("--gid={}")
        self.kb_base = FormattedParameter("--kb_base={}")
        self.unit_base = FormattedParameter("--unit_base={}")
        self.hugepage_size = FormattedParameter("--hugepage-size={}")
        self.flow_id = FormattedParameter("--flow_id={}")
        self.flow = FormattedParameter("--flow={}")
        self.flow_watermark = FormattedParameter("--flow_watermark={}")
        self.flow_sleep = FormattedParameter("--flow_sleep={}")
        self.steadystate = FormattedParameter("--steadystate={}")
        self.steadystate_duration = FormattedParameter(
            "--steadystate_duration={}")
        self.steadystate_ramp_time = FormattedParameter(
            "--steadystate_ramp_time={}")

        # fio api
        self.api = BasicParameter(None, "POSIX")