From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F1FEA0524 for ; Tue, 25 Feb 2020 11:35:15 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 78D8A1BFAC; Tue, 25 Feb 2020 11:35:15 +0100 (CET) Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by dpdk.org (Postfix) with ESMTP id D31E61BC24 for ; Tue, 25 Feb 2020 11:35:13 +0100 (CET) Received: by mail-pg1-f178.google.com with SMTP id 6so6692771pgk.0 for ; Tue, 25 Feb 2020 02:35:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=mrczbXHiKVDr2VoMvA02uTWXUqyQCqzeMve3DjxP3Co=; b=YBkvYf+rWOOYa2Ay2u2NbWQWSaOUzMbFlHHVOnYzGbdmJP3IDIMDETULUJGczGl+mP yu3wgrJ3gh0d/IaO/w4MqkaHBJW76EKrJ8Ggtu+wzV1xNFkEHG0jHm9yaMDO5eeR9c+w IrVBlwjzVNH9EXgZU6QlyoBM05pdRMF/QT2/uVkyXunJSoEwmRqFks+ze54DrQvPvakl 0dTqCndjJDo/TQr2DlbqbarM2W8j/LzhwDonwLW59Zj9h4UcWwdGn3jXiX0jFVJb5ptP 5tNKfXSRaStdJ1dHyAT8WY+SvlWwRtLM4ejvX+Lg478EH+fcQ7P4Egipxvjf4SLgg5+4 i2lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=mrczbXHiKVDr2VoMvA02uTWXUqyQCqzeMve3DjxP3Co=; b=FYSRmEvkOhC1HC1isavk6iq4qxzVwwgR63QqGBci0FD4rW2a6ApYmRpXfFA3Du8F12 MKkmwvKXdRVdonO8WTpHEZb4p7EhUsLZnUJ+znCarzBY/KNN22AeJ6qRBW3VIB/AKOkq /CLUuvwHp2AYsGFULBREQZxSlpI/V+efcG3QptJKuxwQRgPKu4XUG+4sErasFGkZMptd ZFy8978xweqQRbFtU7Vt7Ob5Rp+hB1zx7VNG+5jzXKBf/DBv6y/znuwK7mgJRDvwDFKk 0tB6oELqjtXJxxAG/Nif+Pjr3wwSXYoRpY7mYsUv8XSLNRREGw1CgX7nMlztmjE6kGzD e1GQ== X-Gm-Message-State: APjAAAVmdVn082be0x3eHZu9XRjKgNDZ7RKPxBBlgbK2iFnUWQT/N1Ti hiSynLJlEfx4j9nmK0F9rJXtPnur X-Google-Smtp-Source: APXvYqyop2sig5mGmbLGxa8vmbLnCOcIFXEXERZ3z8m/j/NA/uJC+iAluGLntq+S7bul00sCQcr+0Q== X-Received: by 2002:a63:e755:: with SMTP id j21mr57756274pgk.330.1582626912592; Tue, 25 Feb 2020 02:35:12 -0800 (PST) Received: from localhost.localdomain ([2400:4050:c8c2:de00:35bc:b9a3:f404:3cf2]) by smtp.gmail.com with ESMTPSA id a10sm15819987pgk.71.2020.02.25.02.35.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2020 02:35:12 -0800 (PST) From: Yasufumi Ogawa To: spp@dpdk.org, ferruh.yigit@intel.com, yasufum.o@gmail.com Date: Tue, 25 Feb 2020 19:34:29 +0900 Message-Id: <20200225103446.8243-13-yasufum.o@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200225103446.8243-1-yasufum.o@gmail.com> References: <20200225103446.8243-1-yasufum.o@gmail.com> Subject: [spp] [PATCH 12/29] tools/sppc: setup spp_pri opts in app_helper X-BeenThere: spp@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Soft Patch Panel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spp-bounces@dpdk.org Sender: "spp" Setup options for spp_primary is separated with other apps because name of devices are a bit different, although steps of building options are similar. It should be merged considering maintainability. This update is to add setup of spp_primary into `lib/app_helper.py` module to merge them. * Setup options of apps including spp_primary is done in add_sppc_args() in app_helper.py. * Add attaching TAP interfaces in the method, mainly for spp_primary. Signed-off-by: Yasufumi Ogawa --- tools/sppc/lib/app_helper.py | 119 +++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 32 deletions(-) diff --git a/tools/sppc/lib/app_helper.py b/tools/sppc/lib/app_helper.py index b918aeb..411b3f5 100644 --- a/tools/sppc/lib/app_helper.py +++ b/tools/sppc/lib/app_helper.py @@ -9,7 +9,10 @@ import sys # Supported vdev types of SPP Container. -VDEV_TYPES = ['vhost', 'memif'] +VDEV_TYPES = ['vhost', 'memif', 'tap'] + +# Prefix of tap interface which is named as 'spp_tap0', 'spp_tap1' or so. +TAP_PREFIX = 'spp_tap' def add_eal_args(parser, mem_size=1024, mem_channel=4): @@ -73,6 +76,10 @@ def add_sppc_args(parser): '--workdir', type=str, help="Path of directory in which the command is launched") + parser.add_argument( + '--name', + type=str, + help='Name of container') parser.add_argument( '-ci', '--container-image', type=str, @@ -99,10 +106,6 @@ def add_appc_args(parser): '-v', '--volume', nargs='*', type=str, help='Bind mount a volume (for docker)') - parser.add_argument( - '--name', - type=str, - help='Name of container') parser.add_argument( '-nq', '--nof-queues', type=int, @@ -128,7 +131,9 @@ def is_valid_dev_uids(dev_uids): return False for dev_uid in dev_uids.split(','): - if dev_uid.split(':')[0] not in VDEV_TYPES: + dtype = dev_uid.split(':')[0] + if dtype not in VDEV_TYPES: + print('Error: `{}` is not supported.'.format(dtype)) return False return True @@ -154,7 +159,8 @@ def get_mem_opt(args): return mem_opt -def setup_eal_opts(args, file_prefix, proc_type='auto', hugedir=None): +def setup_eal_opts(args, file_prefix, proc_type='auto', is_spp_pri=False, + hugedir=None): core_opt = get_core_opt(args) mem_opt = get_mem_opt(args) @@ -167,19 +173,44 @@ def setup_eal_opts(args, file_prefix, proc_type='auto', hugedir=None): if args.dev_uids is not None: dev_uids_list = args.dev_uids.split(',') - socks = sock_files(dev_uids_list) + socks = sock_files(dev_uids_list, is_spp_pri) # Configure '--vdev' options for i in range(len(dev_uids_list)): dev_uid = dev_uids_list[i].split(':') if dev_uid[0] == 'vhost': + if not is_spp_pri: + eal_opts += [ + '--vdev', + 'virtio_user{0:s},queues={1:d},path={2:s}'. + format(dev_uid[1], args.nof_queues, + socks[i]['guest']), + '\\'] + else: + # TODO(yasufum) Support `queues` option. + eal_opts += [ + '--vdev', + 'eth_vhost{0:s},iface={1:s}'. + format(dev_uid[1], socks[i]['guest']), + '\\'] + elif dev_uid[0] == 'memif': + if not is_spp_pri: + eal_opts += [ + '--vdev', + 'net_memif{0:s},id={0:s},socket={1:s}'. + format(dev_uid[1], socks[0]['guest']), + '\\'] + else: + eal_opts += [ + '--vdev', + 'net_memif{0:s},id={0:s},role={1:s},socket={2:s}'. + format(dev_uid[1], 'master', socks[0]['guest']), + '\\'] + elif dev_uid[0] == 'tap': eal_opts += [ - '--vdev', 'virtio_user{},queues={},path={}'.format( - dev_uid[1], args.nof_queues, socks[i]['guest']), '\\'] - elif dev_uid[0] == 'memif': # Only 'slave' role is supported. - eal_opts += [ - '--vdev', 'net_memif{0},id={0},socket={1}'.format( - dev_uid[1], socks[0]['guest']), '\\'] + '--vdev', + 'net_tap{0:s},iface={1:s}{0:s}'. + format(dev_uid[1], TAP_PREFIX), '\\'] if (args.pci_blacklist is not None) and (args.pci_whitelist is not None): common.error_exit("Cannot use both of '-b' and '-w' at once") @@ -200,7 +231,7 @@ def setup_eal_opts(args, file_prefix, proc_type='auto', hugedir=None): return eal_opts -def setup_docker_opts(args, container_image, sock_files, workdir=None): +def setup_docker_opts(args, container_image, socks, workdir=None): docker_opts = [] if args.foreground is True: @@ -217,8 +248,8 @@ def setup_docker_opts(args, container_image, sock_files, workdir=None): if args.no_privileged is not True: docker_opts += ['--privileged', '\\'] - if sock_files is not None: - for sock in sock_files: + if socks is not None: + for sock in socks: docker_opts += [ '-v', '%s:%s' % (sock['host'], sock['guest']), '\\'] @@ -251,12 +282,15 @@ def is_sufficient_ports(args): return False -def sock_files(dev_uids_list): +def sock_files(dev_uids_list, is_spp_pri=False): """Return list of socket files on host and containers. The name of socket files is defined with a conventional ones described in DPDK doc, though you can use any name actually. + For spp_primary, path of sock file is just bit different because it is + shared among other SPP processes. + Here is an example of two vhost devices. [vhost:0, vhost:1] => [ @@ -264,23 +298,44 @@ def sock_files(dev_uids_list): {'host': '/tmp/sock1, 'guest': '/var/run/usvhost1'} ] """ - socks = [] + + socks = { + 'vhost': { + 'host': '/tmp/sock{:s}', + 'guest': '/var/run/usvhost{:s}'}, + 'memif': { + 'host': '/tmp/spp-memif.sock', + 'guest': '/var/run/spp-memif.sock'}} + + res = [] + is_memif_added = False for dev_uid in dev_uids_list: dev_uid = dev_uid.split(':') - if dev_uid[0] == 'vhost': - socks.append({ - 'host': '/tmp/sock{}'.format(dev_uid[1]), - 'guest': '/var/run/usvhost{}'.format(dev_uid[1])}) - elif dev_uid[0] == 'memif': + + if (dev_uid[0] == 'memif') and (not is_memif_added): # Single sock file is enough for memif because it is just used for # negotiation between master and slaves processes. - socks.append({ - 'host': '/tmp/spp-memif.sock', - 'guest': '/var/run/spp-memif.sock'}) - break - else: - break - return socks + if is_spp_pri: + res.append({ + 'host': socks['memif']['host'], + 'guest': socks['memif']['host']}) + else: + res.append({ + 'host': socks['memif']['host'], + 'guest': socks['memif']['guest']}) + is_memif_added = True + + elif dev_uid[0] == 'vhost': + if is_spp_pri: + res.append({ + 'host': socks['vhost']['host'].format(dev_uid[1]), + 'guest': socks['vhost']['host'].format(dev_uid[1])}) + else: + res.append({ + 'host': socks['vhost']['host'].format(dev_uid[1]), + 'guest': socks['vhost']['guest'].format(dev_uid[1])}) + + return res def count_ports(port_mask): @@ -335,7 +390,7 @@ def cores_to_list(core_opt): def gen_sppc_file_prefix(app_name): """Generate a unique file prefix of DPDK for SPP Container app.""" - return 'sppc-{}-{}'.format(app_name, secrets.token_hex(8)) + return 'sppc-{:s}-{:s}'.format(app_name, secrets.token_hex(8)) def get_dpdk_ver_in_container(rte_sdk, c_image): -- 2.17.1