summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docker/Dockerfile1
-rwxr-xr-xdocker/create-build-env.sh2
-rwxr-xr-xdocker/create-virtio-env.sh8
-rw-r--r--docker/mrglobal.conf23
-rw-r--r--service/src/core.c30
-rw-r--r--service/src/phydev.c42
6 files changed, 106 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..15a0e61
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1 @@
+FROM git.mesalab.cn:7443/mesa_platform/marsio-build-env:master
diff --git a/docker/create-build-env.sh b/docker/create-build-env.sh
new file mode 100755
index 0000000..550ad6d
--- /dev/null
+++ b/docker/create-build-env.sh
@@ -0,0 +1,2 @@
+docker build .
+docker run --name marsio-build-container -v $(pwd)/../:/marsio -it git.mesalab.cn:7443/mesa_platform/marsio-build-env:master /bin/bash
diff --git a/docker/create-virtio-env.sh b/docker/create-virtio-env.sh
new file mode 100755
index 0000000..d2b1d25
--- /dev/null
+++ b/docker/create-virtio-env.sh
@@ -0,0 +1,8 @@
+docker build .
+
+sudo sh -c "echo 16 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages"
+
+sudo mkdir -p /var/tmp/huge_1G
+sudo mount -t hugetlbfs nodev -o pagesize=1G /var/tmp/huge_1G
+
+docker run --name marsio-virtio-container --cpus=4 -v /tmp/sock0:/var/run/usvhost0 -v /var/tmp/huge_1G:/var/tmp/huge_1G -v $(pwd)/../:/marsio -it git.mesalab.cn:7443/mesa_platform/marsio-build-env:master /bin/bash
diff --git a/docker/mrglobal.conf b/docker/mrglobal.conf
new file mode 100644
index 0000000..419e260
--- /dev/null
+++ b/docker/mrglobal.conf
@@ -0,0 +1,23 @@
+[device]
+
+[service]
+# lcore id for i/o service, use comma to split
+iocore=12,13,14,15
+#distmode=0
+#hashmode=0
+
+[eal]
+virtaddr=0x7f40c4a00000
+loglevel=7
+
+[keepalive]
+check_spinlock=1
+
+#[ctrlzone]
+#ctrlzone0=janus,64
+
+[pool]
+create_mode=3
+sz_direct_pktmbuf=4194304
+sz_indirect_pktmbuf=8192
+sz_cache=256
diff --git a/service/src/core.c b/service/src/core.c
index 620e0d1..37b0503 100644
--- a/service/src/core.c
+++ b/service/src/core.c
@@ -328,6 +328,36 @@ static void sc_eal_init(struct sc_main * sc, const char * cmd)
WRITE_ARG("--no-huge");
}
+ unsigned int en_no_pci = 0;
+ MESA_load_profile_uint_def(sc->local_cfgfile, "eal", "nopci", &en_no_pci, 0);
+
+ if (en_no_pci > 0)
+ {
+ WRITE_ARG("--no-pci");
+ }
+
+ unsigned int mem = 0;
+ ret = MESA_load_profile_uint_nodef(sc->local_cfgfile, "eal", "mem", &mem);
+
+ char str_mem[MR_STRING_MAX];
+ snprintf(str_mem, sizeof(str_mem), "%u", mem);
+
+ if(ret >= 0)
+ {
+ WRITE_ARG("-m");
+ WRITE_ARG(str_mem);
+ }
+
+ char str_file_prefix[MR_STRING_MAX];
+ ret = MESA_load_profile_string_nodef(sc->local_cfgfile, "eal", "file-prefix",
+ str_file_prefix, sizeof(str_file_prefix));
+
+ if (ret >= 0)
+ {
+ WRITE_ARG("--file-prefix");
+ WRITE_ARG(str_file_prefix);
+ }
+
// DPDK和SYSTEMD的日志级别差1
unsigned int loglevel = g_logger_level + 1;
MESA_load_profile_uint_def(sc->local_cfgfile, "eal", "loglevel", &loglevel, loglevel);
diff --git a/service/src/phydev.c b/service/src/phydev.c
index 350ffca..720b32d 100644
--- a/service/src/phydev.c
+++ b/service/src/phydev.c
@@ -670,6 +670,42 @@ static int phydev_scan_raw_socket(struct sc_main * sc, struct phydev_main * phyd
return RT_SUCCESS;
}
+/* VIRTIO Devices */
+static int phydev_scan_virtio_user(struct sc_main * sc, struct phydev_main * phydev_main)
+{
+ char virtio_syms[MR_SYMBOL_MAX][MR_PHYDEV_MAX] = {{0}};
+ unsigned int nr_virtio_syms = 0;
+ phydev_query_device_list(sc, "virtio_user", virtio_syms, &nr_virtio_syms);
+
+ if(nr_virtio_syms < 0)
+ {
+ return RT_SUCCESS;
+ }
+
+ for(int i = 0; i < nr_virtio_syms; i++)
+ {
+ uint16_t port_id;
+ char str_attach_args[MR_STRING_MAX];
+
+ snprintf(str_attach_args, sizeof(str_attach_args),
+ "virtio_user%d,queues=%d,path=/var/run/usvhost%d", i, sc->nr_serv_thread, i);
+
+ int ret = rte_eth_dev_attach(str_attach_args, &port_id);
+ if (ret < 0)
+ {
+ MR_ERROR("Attaching virtio-user device %s failed, Errno = %d", virtio_syms[i], ret);
+ return RT_ERR;
+ }
+
+ struct phydev * phydev = phydev_alloc(phydev_main, port_id);
+ snprintf(phydev->symbol, sizeof(phydev->symbol), "%s", virtio_syms[i]);
+ snprintf(phydev->info.symbol, sizeof(phydev->info.symbol), "%s", virtio_syms[i]);
+ phydev->port_id = port_id;
+ }
+
+ return RT_SUCCESS;
+}
+
/* 设备扫描,根据目前的设备启用情况修正物理设备链 */
static int phydev_scan_uio(struct phydev_main * phydev_main)
{
@@ -806,6 +842,12 @@ int phydev_init(struct sc_main * sc)
return RT_ERR;
}
+ if (phydev_scan_virtio_user(sc, sc->phydev_main) < 0)
+ {
+ MR_ERROR("Physical device in virtio-user scan failed.");
+ return RT_ERR;
+ }
+
struct phydev * phydev_iter;
TAILQ_FOREACH(phydev_iter, &sc->phydev_main->device_list, next)
{