diff --git a/.github/workflows/test-links.yml b/.github/workflows/test-links.yml new file mode 100644 index 00000000..49a08b66 --- /dev/null +++ b/.github/workflows/test-links.yml @@ -0,0 +1,23 @@ +name: Test links + +on: + workflow_dispatch: + pull_request: + branches: + - main + - "release-3.*" + # Review gh actions docs if you want to further define triggers, paths, etc + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on + +jobs: + check-links: + name: runner / linkspector + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run linkspector + uses: umbrelladocs/action-linkspector@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-review + fail_level: any diff --git a/.linkspector.yml b/.linkspector.yml new file mode 100644 index 00000000..77b9dd16 --- /dev/null +++ b/.linkspector.yml @@ -0,0 +1,6 @@ +dirs: + - asciidoc/edge-book +fileExtensions: + - adoc +useGitIgnore: true +modifiedFilesOnly: false diff --git a/README.md b/README.md index 1d0e8e5b..1fc10c44 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ pack build edge-docs --path asciidoc --builder registry.opensuse.org/home/atgrac podman run -d -p 8080:8080 edge-docs ``` -With [Epinio](epinio.io): +With [Epinio](https://epinio.io/): ```bash epinio push -n docs --builder-image registry.opensuse.org/home/atgracey/cnbp/containers/builder:latest -e BP_DC_FILE=DC-edge ``` diff --git a/blog/2023-05-28-welcome-blog.md b/blog/2023-05-28-welcome-blog.md deleted file mode 100644 index 9509a5a1..00000000 --- a/blog/2023-05-28-welcome-blog.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -slug: welcome -title: Welcome to SUSE Edge -authors: - name: Jimmy Martin - title: Field Product Manager - url: https://github.com/jimmyrmartin - image_url: https://github.com/jimmyrmartin.png -tags: [edge, team, announcement] ---- - -Thank you for visiting our SUSE Engineering Page. - -There are many things we aim to accomplish with this website. - diff --git a/blog/2023-07-28-flexran.md b/blog/2023-07-28-flexran.md deleted file mode 100644 index 14f81597..00000000 --- a/blog/2023-07-28-flexran.md +++ /dev/null @@ -1,1383 +0,0 @@ ---- -slug: Flexran -title: Deploying Intel FlexRan on the SUSE Adaptive Telco Infrastructure Platform -authors: - name: Alberto Morgante Medina - title: Sr. Edge Telco Engineer - url: https://github.com/alknopfler - image_url: https://github.com/alknopfler.png -tags: [edge, telco, flexran] ---- - -## Introduction - -Intel® FlexRAN is a reference implementation for a virtualized 4G and 5G RAN stack. It's main purpose is to illustrate how to achieve real-time performance of a virtualized 4G or 5G PHY and MAC layer on an Intel-based hardware architecture, using Intel® Xeon® Scalable processors, the Intel® Advanced Vector Extensions 512 `Intel® AVX 512` instruction set and a number of other hardware acceleration features and technologies found in modern Intel Xeon family processors. While some vendors of CloudRAN and in particular O-RAN software merely use it as inspiration, some vendors adopt Intel FlexRAN directly as part of their product. -This article describes how to deploy FlexRAN on the SUSE Adaptive Telco Infrastructure Platform (ATIP) running on bare-metal infrastructure as a Containerized Network Function (CNF). In the ATIP architecture, the runtime stack consists of [SUSE Linux Enterprise Micro](https://www.suse.com/products/micro/) and Rancher Kubernetes Engine v2 (RKE2) and we are using [Rancher](https://www.rancher.com/) to perform cluster and application provisioning, life cycle management, application resource management and collection of telemetry data with role-based access control. -The example RAN deployment option considered here is the [ORAN Alliance 7-2x lower-level split](https://www.o-ran.org/blog/20-new-o-ran-specifications-have-been-released-since-june-2020), which in a nutshell means that the lower layer PHY processing for uplink and downlink (such as Cyclic Prefix addition/removal, iFFT/FFT, calculation of beamforming coefficients and PRACH pre-filtering) is performed in the Radio Unit (RU), and upper layer PHY processing as well as all MAC layer processing is performed in the Distributed Unit (DU). When DU and RU are deployed in different Kubernetes pods, this constitutes an excellent test for a telco cloud platform, as it requires near-realtime processing and transmission of fronthaul traffic over physical network interfaces, which is only possible with careful orchestration of a number of telco-grade platform features, as we will detail further below. - -With this cloud-native setup, we can identify the appropriate configuration of the `SUSE Edge ATIP` (Adaptive Telco Infrastructure Platform) stack. Also, it demostrates that telecom containerised applications like DU/CU can be run on RKE2 cluster on top of the SLE Micro RT OS taking advantage of the accelerator cards. In addition, we show that we are applying the full power and potential of the accelerator card and CPU. - -> For more information about Intel FlexRan, see the official [Intel FlexRan website](https://www.intel.com/content/www/us/en/developer/topic-technology/edge-5g/tools/flexran.html) -> -> For more information about SUSE ATIP, see the official [SUSE Edge ATIP documentation](https://suse-edge.github.io/docs/product/atip/introduction) - - -## Architecture - -The architecture is based on the following components: - -- Rancher Management Cluster: This component will be used to manage the lifecycle of the RKE2 clusters hosting the FlexRAN solution, as well as the monitoring platform based on the Rancher monitoring stack (Grafana and Prometheus installed on the downstream cluster). This cluster is based on a single-node RKE2 cluster on top of SLE Micro. -- Edge Cluster 1: This cluster will be used to deploy the `FlexRan Timer Mode tests`. This cluster is based on a single-node RKE2 cluster on top of SLE Micro RT Operating System. -- Edge Cluster 2: This cluster will be used to deploy the `FlexRan Xran Mode tests`. This cluster is based on a single-node RKE2 cluster on top of SLE Micro RT Operating System. - -> Note: The FlexRan tests could be deployed on the same edge cluster, but just for clarity and simplicity in the article, we will deploy them on different clusters. - -![img.png](2023-07-29-flexran-images/architecture-components.png) - - - -## Hardware and Software components - -### Hardware -The hardware used for this article is based on the following components: - -- Dell PowerEdge XR11 servers -- Intel XEON Gold 6338N 2.2G -- 8 x 32GB RDIMM 3200MT/S -- 2 x 480GB SSD SATA Disk -- Intel E810-CQDA2 Dual Port 100GbE QSFP28 -- ACC100 FEC Accelerator card - -### Software -The software used for this article is based on the following components: - -- Operating system: `SLE Micro 5.4` -- Kernel Real Time: `5.14.21-150400.15.11-rt` -- RKE2 version: `v1.25.9+rke2r1` -- CNI plugins: `Multus 0.3.1` and `Calico v3.25.0` -- Rancher release: `rancher-stable v2.7.5` -- Dpdk version: `22.11` -- SRIOV upstream `v3.5.1` - -### Flexran -The FlexRan deployment used for this article is based on the following components: - -- FlexRAN version: `22.07` using [pre-defined containers](https://hub.docker.com/r/intel/flexran_vdu) from Intel. -- Intel OneAPI Base Toolkit: `2022.1.2.146` - -## Rancher Management Cluster - -In our case, the Rancher management cluster will be used to manage the lifecycle of the RKE2 edge clusters deployed for the FlexRAN solution, as well as the monitoring platform based on Grafana and Prometheus. - -![img.png](2023-07-29-flexran-images/mgmt-component.png) - -> The operating system installation steps have been omitted for the sake of brevity. There are no special performance-related configuration settings required for the OS on the management cluster. -> For more information about how to install the Operating System, see the next [link](https://suse-edge.github.io/docs/product/atip/management-cluster) - -### RKE2 Cluster Installation on the Management Server - -Once you have the Operating System installed, you can proceed with the Rancher installation. First, we will install a RKE2 cluster and then, the Rancher Helm chart to install the Rancher management cluster. - -1. Run the RKE2 installer: - -`curl -sfL https://get.rke2.io | sh -` - -if you want to install a particular version, the `INSTALL_RKE2_VERSION` variable can be used as: - -`curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION="v1.25.9+rke2r1" sh -` - -> For more information about the installation, please refer to the documentation: https://docs.rke2.io/install/install_options/ - -2. Enable and start the rke2-server service: - -`systemctl enable --now rke2-server.service` - -In case you want to run the RKE2 agent (in case you need to add more nodes designated to run your apps and services), you can follow the next steps: - -1. Run the RKE2 installer: - -`curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -` - -2. Configure the config.yaml file located in `/etc/rancher/rke2/` with the following content: -```yaml -server: https://:9345 -token: -``` - -3. Enable and start the service: - -`systemctl enable --now rke2-agent.service` - -### Rancher Manager Install - -Rancher is installed using the Helm package manager for Kubernetes. -Helm charts provide templating syntax for Kubernetes YAML manifest documents. With Helm, we can create configurable deployments instead of just using static files. - -> This section covers the deployment of Rancher on the management cluster. -> -> For more information about the Rancher manager installation, please refer to the documentation: https://ranchermanager.docs.rancher.com/v2.7/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster - -1. Add the Helm repository - -There are three Rancher manager releases available to be added as a Helm repository for Rancher. In our case, we will use the `rancher-stable` because it's the release recommended for production environments, but you could use `rancher-latest` or `rancher-alpha` if you want. Also, there is a `rancher primer` release that is the enterprise version of Rancher. - -`helm repo add rancher-stable https://releases.rancher.com/server-charts/stable` - -> If you don't have `helm` installed previously, you could install it using the following command: -> -> `curl -fsSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 |bash` -> - -2. Choose your SSL Configuration - -The Rancher management server is designed to be secure by default and requires SSL/TLS configuration. - -There are three recommended options for SSL/TLS configuration: -- Rancher-generated TLS certificate -- Let's Encrypt -- Bring your own certificate - -> For more information about the SSL/TLS configuration, please refer to the documentation: https://ranchermanager.docs.rancher.com/v2.7/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster/#3-choose-your-ssl-configuration - -In our case we will use the Rancher-generated TLS certificate. This requires `cert-manager` to be deployed in the cluster as:: - -```shell -helm repo add jetstack https://charts.jetstack.io -helm repo update -helm install cert-manager jetstack/cert-manager \ - --namespace cert-manager \ - --create-namespace \ - --set installCRDs=true \ - --version v1.11.1 -``` - -Once you've installed cert-manager, you can verify the pods are running: -`kubectl get pods --namespace cert-manager` - - -3. Install Rancher with Helm using the following command modifying the `` and `` values to fit your environment: - -```shell -helm install rancher rancher-stable/rancher \ - --namespace cattle-system \ - --create-namespace \ - --set hostname= \ - --set bootstrapPassword= \ - --set replicas=1 \ - --set global.cattle.psp.enabled=false -``` - -4. Verify the Rancher installation - -You should wait a few minutes for Rancher to be rolled out: - -`kubectl -n cattle-system rollout status deploy/rancher` - -## Edge Cluster deployment - -This section covers the bare-metal provisioning and installation of the edge cluster nodes in order to deploy the FlexRan tests. In our case, we will deploy two edge clusters, one for the FlexRan Timer Mode tests and another one for the FlexRan Xran Mode tests. -The configuration of the edge cluster nodes is based on the following components, and it will be the same for the two edge clusters: - -![img.png](2023-07-29-flexran-images/edge.png) - -### BIOS Configuration for Dell PowerEdge XR11 - -The BIOS and NIC configuration used for this article based on the [hardware](./2023-07-28-flexran.md#hardware) shown above, could be imported directly using the [Dell PowerEdge XR11 BIOS Exported Configuration File](2023-07-29-flexran-images/system-config.xml). -In order to import the configuration file, you need to do it using the idrac web interface: - -![img.png](2023-07-29-flexran-images/import-bios.png) - -> *Note*: This configuration depends on the hardware vendor, so please, check with your hardware vendor the best configuration to be used. - -Pay special attention to the parameters suggested here as some of them could dramatically increase or decrease the performance of the tests being executed. -The next table shows the recommended configuration as a reference for the most common hardware vendors: - -| Option | Value | Description | -|------------------------------------------------|------------------| ----------- | -| Workload Profile | Telco Optimized | Telco profile to optimize the performance in the hardware. | -| Boot Performance Mode | Max. Performance | Maximize the performance in the boot process. | -| Hyper- Threading (Logical Proccesor) | Enable | This option enables Intel® Hyper-Threading Technology for logical processor enabling and converting processor cores (pCores) to logical cores (lCores). | -| Virtualization Technology (XAPIC) | Enable | This option is for Extended Advanced Programmable Interrupt Controller (xAPIC) support for the Intel® Virtualization Technology for Directed I/O (Intel® VT-d) feature. | -| uncore frequency scaling | Disable | If enabled, Uncore Frequency Scaling (UFS) allows the uncore to operate at a lower frequency when the Power Control Unit (PCU) has detected low utilization. Conversely, UFS allows the uncore to operate at a higher frequency when the PCU has detected high utilization.| -| CPU P-State Control (EIST PSD Function | HW_ALL | optimization of the voltage and CPU fequency during operation| -| CPU C-State Control | Disable | This option is for the CPU C-State Control feature, which provides power savings by placing the processor into lower power states when the processor is idle. | -| CPU C1E Support | Disable | This option is for the CPU Enhanced Halt (C1E) feature, which provides power savings by placing the processor into a low power state when the processor is idle. | -| AVX License Pre-Grant | Enable | If enabled, this option enables the pre-grant license level selection based on workload with the AVX ICCP Pre-Grant Level option.| -| AVX ICCP Pre- Grant Level | Level 5 | This option selects a workload level for the Intel® Advanced Vector Extensions (Intel® AVX): Intel® AVX-512 Heavy | -| AVX P1 | Level 2 |This option serves a dual purpose: 1 -Specifies the base P1 ratio for Intel® Streaming SIMD Extensions (Intel® SSE) or Intel® AVX workloads. 2- Pre-grants a license level based on the workload level.| -| Energy Efficient Turbo | Disable | This option allows entry into the Intel® Turbo Boost Technology frequency when the Power Control Unit (PCU) has detected high utilization.| -| Turbo Mode | Enable | Enabling this Intel® Turbo Boost Technology mode setting allows the CPU cores to operate at higher than the rated frequency.| -| GPSS timer | 0us | This option allows the reduction of the Global P-State Selection (GPSS) timer to be set from: 0 μs to 500 μs| -| LLC prefetch | Enable | This option enables Last Level Cache (LLC) hardware prefetch logic. | -| Frequency Prioritization (RAPL Prioritization) | Disable | This setting controls whether the Running Average Power Limit (RAPL) balancer is enabled. If enabled, it activates per core power budgeting.| -| Hardware P-States | Native with no Legacy Support | When enabled, this option allows the hardware to choose a Performance State (P-State) based on an OS request (that is, a legacy P-State).| -| EPP enable3 | Disable|When this option is enabled, the system uses the energy performance bias register for the Energy Performance Preference (EPP) input to make decision on Performance State (P-State) or Processor Core Idle State (C-State) transitions.| -| APS Rocketing | Disable | Rocketing mechanism in the HWP p-state selection for pcode algorithm. Rocketing enables the core ratio to jump to max turbo instantaneously as opposed to a smooth ramp| -| Scalability | Disable | Core Performance to frequency scalability based on optimizations in the CPU.| -| Native ASPM | Disable | ASPM off not controlled by BIOS or OS.| -| Power Performance Tuning | OS Controls EPB | This option selects the BIOS or OS that controls the Energy Performance Bias (EPB) functionality.| -| Workload Configuration | I/O sensitive | This option allows the system power and performance profile to be set to favor compute intensive workload or I/O sensitive workload.| -| Dynamic L1 | Disable | This option applies only to the package-level setting to allow dynamically entering the lower power link state L1.| -| Set Fan Profile |Performance | This option allows the fan profile to be set to Performance, Balanced, or Quiet.| -| Cooling Configuration - Fan Speed Offset | Medium| This option allows the fan speed offset to be set to Low, Medium, or High.| - - -### OS Installation - -For this example, we will assume the SLE Micro RT 5.4 operating system has been already installed on the bare-metal host used to deploy the edge clusters. To verify the `Real Time Kernel` version used, you can use the following command (pay attention to the `-rt` suffix): - -```shell -uname -r -5.14.21-150400.15.11-rt -``` - ->If you want to download the SLE Micro RT 5.4 ISO, you can use the following link paying special attention to the `-RT` in the image name, once you've logged in with your SUSE credentials: [Download SLE Micro RT from SUSE Customer Center](https://www.suse.com/download/sle-micro/) - -> For more information about how to install the operating system SLE Micro RT, see the following [link](https://suse-edge.github.io/docs/product/atip/management-cluster#os-install) - - -### OS Configuration and Tuning - -Once you have the Operating System installed, you can proceed with the Operating System configuration. For this article, we will configure the Operating System using the following steps: - -1. CPU Tuned Configuration - -The first thing is to create a profile for the CPU cores we want to isolate. In this case, we will isolate the cores 1-30 and 33-62 to be used by FlexRan, keeping also some cores available for the system. - -```shell -echo "export tuned_params" >> /etc/grub.d/00_tuned - -echo "isolated_cores=1-30,33-62" >> /etc/tuned/cpu-partitioning-variables.conf - -systemctl enable tuned; systemctl start tuned - -tuned-adm profile cpu-partitioning -``` - -2. Grub Configuration - -We need to modify some grub options to be able to do the CPU isolation as well as another important parameters for the CPU performance on this scenario. - -The following options have to be customized: - -| parameter | value | description | -|-----------|-------|------------------------------------------------------------------------------------------------------| -| isolcpu| 1-30,33-62| Isolate the cores 1-30 and 33-62 | -| skew_tick| 1 | Allows the kernel to skew the timer interrupts across the isolated CPUs. | -| nohz| on | Allows the kernel to run the timer tick on a single CPU when the system is idle. | -| nohz_full| 1-30,33-62 | kernel boot parameter is the current main interface to configure full dynticks along with CPU Isolation. | -| rcu_nocbs| 1-30,33-62 | Allows the kernel to run the RCU callbacks on a single CPU when the system is idle. | -| kthread_cpus| 0,31,32,63 | Allows the kernel to run the kthreads on a single CPU when the system is idle. | -| irqaffinity| 0,31,32,63 | Allows the kernel to run the interrupts on a single CPU when the system is idle. | -|processor.max_cstate| 1 | Prevents the CPU from dropping into a sleep state when idle | -|intel_idle.max_cstate| 0 | Disables the intel_idle driver and allows acpi_idle to be used | -| iommu | pt | Allows to use vfio for the dpdk interfaces | -| intel_iommu | on | Enables to use vfio for VFs. | -| hugepagesz | 1G | Allows to set the size of huge pages to 1G | -| hugepages | 40 | Number of hugepages defined before | -| default_hugepagesz| 1G | Default value to enable huge pages | - -> For mor information about theses parameters, please refer to the following [link](https://suse-edge.github.io/docs/product/atip/features) - -With the values showed above, we are isolating 60 cores, and we are using 4 cores for the OS. - -We can modify the grub config as follows: - -```shell -vi /etc/default/grub - GRUB_CMDLINE_LINUX="intel_iommu=on intel_pstate=passive processor.max_cstate=1 intel_idle.max_cstate=0 iommu=pt usbcore.autosuspend=-1 selinux=0 enforcing=0 nmi_watchdog=0 crashkernel=auto softlockup_panic=0 audit=0 mce=off hugepagesz=1G hugepages=40 hugepagesz=2M hugepages=0 default_hugepagesz=1G kthread_cpus=0,31,32,63 irqaffinity=0,31,32,63 isolcpu=1-30,33-62 skew_tick=1 nohz_full=1-30,33-62 rcu_nocbs=1-30,33-62 rcu_nocb_poll" - -transactional-update grub.cfg -``` - -To validate that the parameters are applied after reboot, you could check: - -```shell -cat /proc/cmdline -``` - -3. Compile the DPDK drivers - -In order to use the `igb_uio` driver, which is necessary for the ACC100 acceleration card, we need to compile the DPDK drivers for the SLE Micro RT kernel. -The process to build the `igb_uio` driver will be explained in this section, but if you don't want to deal with the compilation, you can also download the compiled driver for `SLE Micro RT 5.4` rpm files from [here](2023-07-29-flexran-images/dependencies.tar.gz). - -To do that, we will use an auxiliary virtual machine (only to compile and generate the rpm files) with `SLE-RT 15 SP4 kernel` that you can download from [here](https://www.suse.com/download/sle-rt/). - -Once you have available your virtual machine with the SLE 15 SP4 installed you need to verify `-rt` in the kernel to ensure we will compile for a real time kernel. - -```shell -uname -r -5.14.21-150400.15.53-rt -``` - -The first thing you have to do to compile the driver is to download the `dpdk` source code from the [DPDK repository](http://dpdk.org/git/dpdk-kmods). -```shell -git clone http://dpdk.org/git/dpdk-kmods -``` - -Once you have the source code, you can compile the driver using the following commands: -```shell -cd dpdk-kmods/igb_uio -make -C /lib/modules/`uname -r`/build M=`pwd` modules -``` - -With this command you will get the `igb_uio.ko` driver compiled. But in our case, we will create a rpm package to be able to install it in the SLE Micro RT kernel. - -- First create an x509.genkey setup to define the type of key we need: -```shell -echo -e "[ req ] \n\ -default_bits = 4096 \n\ -distinguished_name = req_distinguished_name \n\ -prompt = no \n\ -x509_extensions = myexts \n\ - -[ req_distinguished_name ] \n\ -CN = Modules \n\ -\n\ -[ myexts ] \n\ -basicConstraints=critical,CA:FALSE \n\ -keyUsage=digitalSignature \n\ -subjectKeyIdentifier=hash \n\ -authorityKeyIdentifier=keyid" > x509.genkey -``` - -- Then create the certificates based on these: -```shell -openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.priv -``` - -> Note: The signing key instruction are only used for testing, please create "proper" certificates for production usage. - -- Install `build`, `kernel-rt` and `kernel-devel-rt` to create the rpm package: -```shell -zypper in build kernel-rt kernel-devel-rt -``` - -- Modify the config file to adapt it for the RT kernel: - -```shell -cp /usr/lib/build/configs/sle15.4.conf /usr/lib/build/configs/sle15.4-rt.conf -sed -e 's/kernel-default/kernel-rt/g' -i /usr/lib/build/configs/sle15.4-rt.conf -echo "Prefer: wicked" >> /usr/lib/build/configs/sle15.4-rt.conf -``` - -- Prepare the spec file: - -```shell -cat << EOF >> igb_uio.spec -# -# spec file for package igb_uio kmp -# -# Copyright (c) 2023 SUSE LINUX GmbH, Nuernberg, Germany. -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# - - -# norootforbuild - -Name: igb_uio -Version: 1.0 -Release: 0 -Summary: Kernel Module Package for igb_uio module -License: GPL-2.0 -Group: System/Kernel -URL: https://www.suse.com -#Git-Clone: http://dpdk.org/git/dpdk-kmods -Source0: %{name}-%{version}.tar.gz -# Required to sign modules: Include certificate named “signing_key.x509” -# Build structure should also include a private key named “signing_key.priv” -# Private key should not be listed as a source file -Source1: signing_key.x509 -BuildRequires: %kernel_module_package_buildreqs -BuildRequires: kernel-rt -BuildRequires: kernel-rt-devel -#BuildRequires: bash-sh -#BuildRequires: libelf-devel -#BuildRequires: systemd -#BuildRequires: pam-config -#BuildRequires: libffi7 -#BuildRequires: ghc-bootstrap -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -# Required to sign modules: The -c option tells the macro to generate a -# suse-hello-ueficert subpackage that enrolls the certificate -%suse_kernel_module_package -c %_sourcedir/signing_key.x509 - -%description -This package contains the igb_uio.ko module. - -%prep -%setup -# Required to sign modules: Copy the signing key to the build area -cp %_sourcedir/signing_key.* . -set -- * -mkdir source -mv "$@" source/ -mkdir obj - -%build -for flavor in %flavors_to_build; do - rm -rf obj/$flavor - cp -r source obj/$flavor - make -C %{kernel_source $flavor} modules M=$PWD/obj/$flavor -done - -%install -export INSTALL_MOD_PATH=$RPM_BUILD_ROOT -export INSTALL_MOD_DIR=updates -for flavor in %flavors_to_build; do - make -C %{kernel_source $flavor} modules_install M=$PWD/obj/$flavor - # Required to sign modules: Invoke kernel-sign-file to sign each module - for x in $(find $INSTALL_MOD_PATH/lib/modules/*-$flavor/ -name '*.ko'); do - /usr/lib/rpm/pesign/kernel-sign-file -i pkcs7 sha256 $PWD/obj/$flavor/signing_key.priv $PWD/obj/$flavor/signing_key.x509 $x - done -done - -%changelog -* Fri Jun 9 2023 Rhys Oxenham - 1.0 -- Initial spec file as base -EOF - -cat << EOF >> Kbuild -ccflags-y := $(MODULE_CFLAGS) -obj-m := igb_uio.o -EOF - - -``` - -- Create the rpm packages: - -```shell -build --dist /usr/lib/build/configs/sle15.4-rt.conf -``` - -- After creating the rpm files, the packages will be located here: `/var/tmp/build-root/home/abuild/rpmbuild/RPMS/x86_64` - - -4. Install the dependencies. - -```shell -transactional-update shell - -cat > /etc/zypp/repos.d/flexran-dependencies.repo << EOF -[home_amorgante_branches_home_dpitchumani] -name=Branch project for package DPDK-22.11 (15.4) -type=rpm-md -baseurl=https://download.opensuse.org/repositories/home:/amorgante:/branches:/home:/dpitchumani/15.4/ -gpgcheck=1 -gpgkey=https://download.opensuse.org/repositories/home:/amorgante:/branches:/home:/dpitchumani/15.4/repodata/repomd.xml.key -enabled=1 - -[home_amorgante] -name=home:amorgante (15.4) -type=rpm-md -baseurl=https://download.opensuse.org/repositories/home:/amorgante/15.4/ -gpgcheck=1 -gpgkey=https://download.opensuse.org/repositories/home:/amorgante/15.4/repodata/repomd.xml.key -enabled=1 -EOF -``` - -Now, we can install the dependencies (*.rpm files) with the igb_uio driver compiled previously (or downloaded from [here](2023-07-29-flexran-images/dependencies.tar.gz)): -```shell - -```shell -suseconnect -p PackageHub/15.4/x86_64 -zypper in *.rpm -zypper in dpdk dpdk-tools pf-bb-config pciutils - -exit -``` - -5. CPU Performance - -Further improve the deterministic and power efficiency: - -`cpupower frequency-set -g performance` - -Set cpu core frequency to 2.6Ghz which is the maximum allowed in our case (based on the hardware): - -`cpupower frequency-set -u 2500000` - -`cpupower frequency-set -d 2500000` - -Set cpu uncore to fixed – maximum allowed. Disable c6 and c1e in order to disable the powersaving features in your system (only if enabled): - -`cpupower idle-set -d 3` - -`cpupower idle-set -d 2` - -> In case you've got the following message `Idlestate 3 not available on CPU x` you can ignore it, because that's means that the idle state is already disabled. - - -6. Check the CPU performance - -You should see the driver intel_cpufreq and the governor performance with a frequency range between 2.5 and 2.6Ghz: -```shell -cpupower frequency-info -... -analyzing CPU 0: - driver: intel_cpufreq - CPUs which run at the same hardware frequency: 0 - CPUs which need to have their frequency coordinated by software: 0 - maximum transition latency: 20.0 us - hardware limits: 800 MHz - 3.50 GHz - available cpufreq governors: ondemand performance schedutil - current policy: frequency should be within 800 MHz and 3.50 GHz. - The governor "performance" may decide which speed to use - within this range. - current CPU frequency: Unable to call hardware - current CPU frequency: 2.60 GHz (asserted by call to kernel) - boost state support: - Supported: yes - Active: yes -... -``` - -### RKE2 Cluster Installation - -The RKE2 installation could be done creating a new cluster from the Rancher UI or importing an existing RKE2 cluster to Rancher. -In our case, for brevity we will install a new RKE2 Cluster from scratch importing it after that directly into Rancher. - -> If you want to install the RKE2 cluster from the Rancher UI you can follow [this document](https://suse-edge.github.io/docs/product/atip/edge-site#edge-site-definition) - -1. Run the RKE2 installer: - -In this scenario we use the `v1.25.9+rke2r1` version as: -``` -curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION="v1.25.9+rke2r1" sh - -``` - -2. Create the `/etc/rancher/rke2/config.yaml` file (and the rancher/rke2 directory) with the following content to enable `Multus + Calico` CNI plugins: - -```yaml -cni: - - multus - - calico -``` - -3. Start rke2-server service: -```shell -systemctl daemon-reload && systemctl enable --now rke2-server -``` - -4. Check the installation - -Make sure the calico and multus pods are running: -```shell -$ kubectl get pods -A -NAMESPACE NAME READY STATUS RESTARTS AGE -calico-system calico-kube-controllers-687bc88ddf-6dp4r 1/1 Running 0 3m13s -calico-system calico-node-jkhx9 1/1 Running 0 3m13s -calico-system calico-typha-869bd9756d-ft4bs 1/1 Running 0 3m13s -kube-system cloud-controller-manager-xr11-2 1/1 Running 0 3m49s -kube-system etcd-xr11-2 1/1 Running 0 3m47s -kube-system helm-install-rke2-calico-crd-q2cp2 0/1 Completed 0 3m36s -kube-system helm-install-rke2-calico-nv4rn 0/1 Completed 1 3m36s -kube-system helm-install-rke2-coredns-55k9x 0/1 Completed 0 3m36s -kube-system helm-install-rke2-ingress-nginx-fvmp4 0/1 Completed 0 3m36s -kube-system helm-install-rke2-metrics-server-d2dhz 0/1 Completed 0 3m36s -kube-system helm-install-rke2-multus-mm59z 0/1 Completed 0 3m36s -kube-system helm-install-rke2-snapshot-controller-crd-vbcjb 0/1 Completed 0 3m36s -kube-system helm-install-rke2-snapshot-controller-jw6pk 0/1 Completed 0 3m36s -kube-system helm-install-rke2-snapshot-validation-webhook-w5sj2 0/1 Completed 0 3m36s -kube-system kube-apiserver-xr11-2 1/1 Running 0 3m53s -kube-system kube-controller-manager-xr11-2 1/1 Running 0 3m51s -kube-system kube-proxy-xr11-2 1/1 Running 0 3m48s -kube-system kube-scheduler-xr11-2 1/1 Running 0 3m51s -kube-system rke2-coredns-rke2-coredns-6b9548f79f-bc54n 1/1 Running 0 3m26s -kube-system rke2-coredns-rke2-coredns-autoscaler-57647bc7cf-bfggl 1/1 Running 0 3m26s -kube-system rke2-ingress-nginx-controller-6vsgf 1/1 Running 0 2m18s -kube-system rke2-metrics-server-7d58bbc9c6-qjkvr 1/1 Running 0 2m33s -kube-system rke2-multus-ds-4zsqr 1/1 Running 0 3m26s -kube-system rke2-snapshot-controller-7b5b4f946c-rhtxn 1/1 Running 0 2m32s -kube-system rke2-snapshot-validation-webhook-7748dbf6ff-cfmpm 1/1 Running 0 2m1s -tigera-operator tigera-operator-7bd6b54cb8-2jm92 1/1 Running 0 3m23s -``` - - -### ACC100 Configuration - -The ACC100 accelerator card is a PCIe card that provides hardware acceleration for the Forward Error Correction (FEC) algorithm. This card is used by the FlexRan library to improve the performance of the DU/CU components. - -1. Load the `igb_uio` kernel module - -> During the OS configuration section we have installed the `igb` driver, `dpdk` as well as the `pf-bb-config` tool [requirements](#os-configuration-and-tunning) - -We will start configuring the Accelerator Card by loading the `ibg_uio` and the `vfio-pci` module. - -```shell -modprobe igb_uio -modprobe vfio-pci -``` - -2. Get the interface ACC100 PCI address: - -```shell -/sbin/lspci | grep -i acc -8a:00.0 Processing accelerators: Intel Corporation Device 0d5c -``` - - -3. Bind the Physical Function (PF) with the `igb_uio` driver: - - -```shell -dpdk-devbind.py -b igb_uio 0000:8a:00.0 -``` - -4. Create 2 Virtual Functions (vfs) from the PF and bind them with `vfio-pci` driver: - -```shell -echo 2 > /sys/bus/pci/devices/0000:8a:00.0/max_vfs -dpdk-devbind.py -b vfio-pci 0000:8b:00.0 -``` - -5. Configure acc100 using the `pf-bb-config` tool: -The Physical Function (PF) Baseband Device (BBDEV) Configuration Application (`pf_bb_config`) provides a means to configure a baseband device at the host level. The program accesses the configuration space and sets various parameters through memory-mapped I/O (MMIO) reads and writes. -The parameters are parsed from a given configuration file (with .cfg extensions) that is specific to a particular baseband device, although they follow same format. - -> For more information about the pf-bb-config tool, please refer to the [documentation](https://github.com/intel/pf-bb-config) - -```shell -pf_bb_config ACC100 -c /opt/pf-bb-config/acc100_config_vf_5g.cfg - -Tue Jun 6 10:49:20 2023:INFO:Queue Groups: 2 5GUL, 2 5GDL, 2 4GUL, 2 4GDL -Tue Jun 6 10:49:20 2023:INFO:Configuration in VF mode -Tue Jun 6 10:49:21 2023:INFO: ROM version MM 99AD92 -Tue Jun 6 10:49:21 2023:WARN:* Note: Not on DDR PRQ version 1302020 != 10092020 -Tue Jun 6 10:49:21 2023:INFO:PF ACC100 configuration complete -Tue Jun 6 10:49:21 2023:INFO:ACC100 PF [0000:8a:00.0] configuration complete! -``` - -6. Check the new VFs created are available and ready to be used by the FlexRan library: - -```shell -dpdk-devbind.py -s -... -Baseband devices using DPDK-compatible driver -============================================= -0000:8a:00.0 'Device 0d5c' drv=igb_uio unused=vfio-pci -0000:8b:00.0 'Device 0d5d' drv=vfio-pci unused=igb_uio - -Other Baseband devices -====================== -0000:8b:00.1 'Device 0d5d' unused=igb_uio,vfio-pci -... -``` - - -### DPDK Configuration - -The Data Plane Development Kit (DPDK) is a set of data plane libraries and network interface controller drivers for fast packet processing. It is designed to run on any processors. In our case, we will use the DPDK libraries to accelerate the performance of the FlexRan library. -Let's start to create some VFs to be available for the FlexRan workloads: - -1. Create the VF PCI addresses in the node: - -In this section we will create 4 VFs for each PF (2 PFs in total for the dual port E810 100G interface) binding to the vfio driver, and then, we will assign a MAC address to each VF. -The MAC address is used by the FlexRan library to identify the VFs. This is not a mandatory step, but then, you will need to modify the FlexRan Docker entrypoint script in order to adapt the MAC addresses to the VFs created. We will talk more about the docker entrypoint script in the next section. - -```shell -echo 4 > /sys/bus/pci/devices/0000:51:00.0/sriov_numvfs -ip link set p2p1 vf 0 mac 00:11:22:33:00:00 -ip link set p2p1 vf 1 mac 00:11:22:33:00:10 -ip link set p2p1 vf 2 mac 00:11:22:33:00:20 -ip link set p2p1 vf 3 mac 00:11:22:33:00:30 -echo 4 > /sys/bus/pci/devices/0000:51:00.1/sriov_numvfs -ip link set p2p2 vf 0 mac 00:11:22:33:00:01 -ip link set p2p2 vf 1 mac 00:11:22:33:00:11 -ip link set p2p2 vf 2 mac 00:11:22:33:00:21 -ip link set p2p2 vf 3 mac 00:11:22:33:00:31 -dpdk-devbind.py -b vfio-pci 0000:51:01.0 0000:51:01.1 0000:51:01.2 0000:51:01.3 0000:51:11.0 0000:51:11.1 0000:51:11.2 0000:51:11.3 -``` - -2. Review the configuration: - -```shell -dpdk-devbind.py -s - -Network devices using DPDK-compatible driver -============================================ -0000:51:01.0 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:01.1 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:01.2 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:01.3 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:01.0 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:11.1 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:21.2 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio -0000:51:31.3 'Ethernet Adaptive Virtual Function 1889' drv=vfio-pci unused=iavf,igb_uio - -Network devices using kernel driver -=================================== -0000:19:00.0 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em1 drv=bnxt_en unused=igb_uio,vfio-pci *Active* -0000:19:00.1 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em2 drv=bnxt_en unused=igb_uio,vfio-pci -0000:19:00.2 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em3 drv=bnxt_en unused=igb_uio,vfio-pci -0000:19:00.3 'BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 1751' if=em4 drv=bnxt_en unused=igb_uio,vfio-pci -0000:51:00.0 'Ethernet Controller E810-C for QSFP 1592' if=eth13 drv=ice unused=igb_uio,vfio-pci -0000:51:00.1 'Ethernet Controller E810-C for QSFP 1592' if=rename8 drv=ice unused=igb_uio,vfio-pci - -Baseband devices using DPDK-compatible driver -============================================= -0000:8a:00.0 'Device 0d5c' drv=igb_uio unused=vfio-pci -0000:8b:00.0 'Device 0d5d' drv=vfio-pci unused=igb_uio - -Other Baseband devices -====================== -0000:8b:00.1 'Device 0d5d' unused=igb_uio,vfio-pci - -``` - -### SRIOV Configuration - -The Single Root I/O Virtualization `SR-IOV` is a specification that allows a PCIe device to appear to be multiple separate physical PCIe devices. -The SR-IOV network device plugin is Kubernetes device plugin for discovering and advertising networking resources such as: - -- SR-IOV virtual functions `VFs` -- PCI physical functions `PFs` -- Auxiliary network devices, in particular Subfunctions `SFs` - -To deploy workloads with SR-IOV VF, Auxiliary network devices or PCI PF, this plugin needs to work together with the following two CNI components: - -- Any CNI meta plugin supporting Device Plugin based network provisioning. In our case will be `Multus` -- A CNI capable of consuming the network device allocated to the Pod - -> For more information about the SR-IOV CNI, please refer to the [documentation](https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin/tree/master) - -1. Prepare the config map for the device plugin: - -You could get the information to fill the config map from the `lspci` command. In our case we will have the following 3 types of devices: -- FEC acceleartor card VF: `0d5d`. -This is the first VF created on the ACC100 card and should match with the first VF created on the previous section. - -- ODU interface: `1889`, `8086` and `p2p1` as a filter. -This is the first port of the E810 interface and should match with the 4 first VFs created on the previous section. - -- ORU interface: `1889`, `8086` and `p2p2` as a filter. -This is the second port of the E810 interface and should match with the 4 last VFs created on the previous section. - - - -```yaml -cat < For more information about the daemonset, please refer to the [documentation](https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin/blob/master/deployments/sriovdp-daemonset.yaml) - -```yaml -cat < Important Note: If you don't get the resources available here, does not make sense continue with the flexran demo tests. Please, review the previous steps to ensure you have the VFs created and the SRIOV CNI plugin working properly. - - - - - -## FlexRan tests - -### References - -For this article, we will use the following references to deploy the Intel FlexRan reference implementation on top of the ATIP edge cluster: - -- We will use the pre-defined containers from Intel: [FlexRan pre-defined containers](https://hub.docker.com/r/intel/flexran_vdu) -- You will also need to download the FlexRan-22.07 tarball from Intel to run the tests and mount the downloaded `tests` folder into the pre-defined containers because it's not included into the pre-defined containers. -> In order to download those files, it is required to have access to the Intel website (you can ask your Intel representative). - - FlexRAN-22.07-L1.tar.gz_part00 - - FlexRAN-22.07-L1.tar.gz_part01 -- Container Entrypoint script (Just in case you need to change anything else like the MAC addresses for the VFs) - -### Prepare the files downloaded from Intel - -Once you have the tarball files downloaded from Intel, you can join the files and extract the content: - -```shell -mkdir flexran; -cp FlexRAN-22.07-L1.tar.gz_part* flexran; -cd flexran -cat FlexRAN-22.07-L1.tar.gz_part* | tar -xzvf - -``` - -Now, we need to execute the `extract.sh` script to get the `tests` folder available to be mounted into the containers. Also, we will copy the docker entrypoint script to be modified if needed. - -> During this process manual intervention is required to accept the license agreement - -```shell -./extract.sh -mkdir /home/tmp_flexran -cp -R tests/ /home/tmp_flexran/ -cp build/docker/docker_entry.sh /home/tmp_flexran/ -``` - -The `/home/tmp_flexran will be the folder to be mounted into the containers on the next section. - -Before deploying the FlexRan containers, let's review the next steps: - -- Interfaces to be used in the flexran pods yaml files, should be referenced by their resource names. You could get those as: `kubectl get nodes -o json | jq '.items[].status.allocatable'` as explained in the previous [section](#sriov-configuration) -- The container entrypoint script contains the tests files customization for this specific environment. It will modify some parameters such as MAC addresses, `VF` information and the `dpdk` info into the `tests`. It will be explained in the next section. -- Tests should be mounted in `/home/tmp_flexran/tests` and exposed in `/home/flexran/tests` - -### Container entrypoint - -The FlexRan containers run a script when the container is started. -The script will modify the configuration files of the FlexRan tests applications to adapt the tests to our environment. - -The modifications done in this file will be: - -- `PCIDEVICE_INTEL_COM_INTEL_FEC_5G=$(env|grep PCIDEVICE_INTEL_COM_INTEL_FEC_5G= |awk -F '=' '{print $2}')` in order to select the right PCI device for the FEC ACC100 card used for the 5G acceleration. - -- `export INTEL_COM_INTEL_CPULIST=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus)` to get the CPU list of the host machine. - -Also, we need to change the CPU cores as well as the MAC addresses into the RU section because there isn't any substitution in the entrypoint script. We need to change the following lines: - -```shell - sed -i "s/ioCore=2/ioCore=62/g" config_file_o_ru.dat - sed -i "s/duMac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac0=00:11:22:33:00:00/g" config_file_o_ru.dat - sed -i "s/duMac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac1=00:11:22:33:00:10/g" config_file_o_ru.dat - sed -i "s/ruMac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac0=00:11:22:33:00:01/g" config_file_o_ru.dat - sed -i "s/ruMac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac1=00:11:22:33:00:11/g" config_file_o_ru.dat - - sed -i "s/duMac2=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac2=00:11:22:33:00:20/g" config_file_o_ru.dat - sed -i "s/duMac3=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac3=00:11:22:33:00:30/g" config_file_o_ru.dat - sed -i "s/ruMac2=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac2=00:11:22:33:00:21/g" config_file_o_ru.dat - sed -i "s/ruMac3=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac3=00:11:22:33:00:31/g" config_file_o_ru.dat -``` -Then, we need to remove (or comment with the hashtag `#` sign) the tests not covered by the flexran container version we are using (the test files are not present in the FlexRan tests suite used so the script will fail): - -- flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/gnb/ -- flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/gnb/ -- flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/gnb/ -- flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/gnb/ -- flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/oru/ -- flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/oru/ -- flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/oru/ - -For instance, you will have the next block commented (or removed): - -```shell -#cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/gnb/ -#sed -i "s/2, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml -#sed -i "s/0, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml -#sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml -#sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml -#sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml -``` - -An example of docker entrypoint script is available [here](./2023-07-29-flexran-images/flexran-dockerentrypoint.sh) - -### FlexRan Timer Mode - -FlexRAN Timer Mode use case does not use fronthaul. RF IQ samples are read from files and write to files. The test pod is configured with two containers. One container is for `L1APP`, and another one is for `TestMAC`. -Smaller storage is built in pod as Kubernetes resources, but the storage is not enough for the test case. The test case requires 20GB storage for tests files, so it will be mounted from the host using the `tests` volume mount path. -The test case is a setup for one peak cell and two average cells. 8 cores with HT enabled are pinned for `L1APP`, the average core utilization is between 45-65%. The below figure shows the threading model for this test case. - -![img.png](2023-07-29-flexran-images/timer3.png) - -To deploy the Test Timer Mode, we will use the following yaml file: - -```yaml -cat <0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - #sed -i "s/0000:1a:02.0/$PCIaddr1/g;s/0000:1a:02.1/$PCIaddr2/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuEthLinkSpeed>25/oRuEthLinkSpeed>100/g" xrancfg_sub6_oru.xml - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_4x4/gnb/ - #sed -i "s/0000:18:00.0/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_xran.xml - sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - #sed -i "s/0000:1a:02.0/$PCIaddr1/g;s/0000:1a:02.1/$PCIaddr2/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuEthLinkSpeed>25/oRuEthLinkSpeed>100/g" xrancfg_sub6_oru.xml - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/gnb/ - ##sed -i "s/0000:19:00.0/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_xran.xml - #sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - #sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - ##sed -i "s/0000:1a:02.0/$PCIaddr1/g;s/0000:1a:02.1/$PCIaddr2/g" xrancfg_sub6_oru.xml - ##sed -i "s/0000:1a:02.2/$PCIaddr3/g;s/0000:1a:02.3/$PCIaddr4/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/gnb/ - ##sed -i "s/0000:19:00.0/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_xran.xml - #sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - #sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - ##sed -i "s/0000:1a:02.0/$PCIaddr1/g;s/0000:1a:02.1/$PCIaddr2/g" xrancfg_sub6_oru.xml - ##sed -i "s/0000:1a:02.2/$PCIaddr3/g;s/0000:1a:02.3/$PCIaddr4/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub6_mu1_100mhz_4x4/gnb/ - #sed -i "s/0000:17:00.0/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_xran.xml - sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - #sed -i "s/0000:1a:02.0/$PCIaddr1/g;s/0000:1a:02.1/$PCIaddr2/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - sed -i "s/oRuEthLinkSpeed>25/oRuEthLinkSpeed>100/g" xrancfg_sub6_oru.xml - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/gnb/ - ##sed -i "s/0000:8b:00.0/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_xran.xml - #sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_xran.xml - #sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_xran.xml - ##sed -i "s/0000:51:01.0/$PCIaddr1/g;s/0000:51:09.0/$PCIaddr2/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf0/PciBusAddoRu0Vf0>$PCIaddr1<\/PciBusAddoRu0Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu0Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu0Vf1/PciBusAddoRu0Vf1>$PCIaddr2<\/PciBusAddoRu0Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf0>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf0/PciBusAddoRu1Vf0>$PCIaddr3<\/PciBusAddoRu1Vf0/g" xrancfg_sub6_oru.xml - #sed -i "s/PciBusAddoRu1Vf1>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/PciBusAddoRu1Vf1/PciBusAddoRu1Vf1>$PCIaddr4<\/PciBusAddoRu1Vf1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac0/oRuRem0Mac0>00:11:22:33:00:01<\/oRuRem0Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem0Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem0Mac1/oRuRem0Mac1>00:11:22:33:00:11<\/oRuRem0Mac1/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac0>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac0/oRuRem1Mac0>00:11:22:33:00:21<\/oRuRem1Mac0/g" xrancfg_sub6_oru.xml - #sed -i "s/oRuRem1Mac1>[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]<\/oRuRem1Mac1/oRuRem1Mac1>00:11:22:33:00:31<\/oRuRem1Mac1/g" xrancfg_sub6_oru.xml - cd /home/flexran/bin/nr5g/gnb/testmac/ - cp ../l1/orancfg/sub3_mu0_10mhz_4x4/gnb/testmac_clxsp_mu0_10mhz_hton_oru.cfg ./ - cp ../l1/orancfg/sub3_mu0_20mhz_4x4/gnb/testmac_clxsp_mu0_20mhz_hton_oru.cfg ./ - #cp ../l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/gnb/testmac_clxsp_multi_numerology_oru.cfg ./ - #cp ../l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/gnb/testmac_clxsp_multi_numerology_oru.cfg ./testmac_clxsp_multi_numerology_oru_sub6.cfg - cp ../l1/orancfg/sub6_mu1_100mhz_4x4/gnb/testmac_clxsp_mu1_100mhz_hton_oru.cfg ./ - #cp ../l1/orancfg/mmwave_mu3_100mhz_2x2/gnb/testmac_icxsp_mu3_100mhz_hton_oru.cfg ./ - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" ./testmac_cfg.xml - sed -i "s/1<\/PhyCoreCheck>/0<\/PhyCoreCheck>/g" ./testmac_cfg.xml - #open core pining - cpulist=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus) - startd=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "1p") - twod=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "2p") - if [ -z $startd ] ; then - echo "cpuset is empty" - exit 0 - fi - startd_f=$(echo $startd|awk -F '-' '{print $1}') - startd_e=$(echo $startd|awk -F '-' '{print $2}') - #echo "startd_f:$startd_f,start_e:$startd_e" - start_n=$(expr $startd_e - $startd_f) - if [ $start_n -gt 20 ] ; then - exit 0 - fi - - twod_f=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "1p") - twod_e=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "2p") - #start_n=`expr $startd_e - $startd_f` - twod_n=`expr $twod_e - $twod_f` - - systemthread=$twod_f - timerThread=$(expr $twod_f + 1) - FpgaDriverCpuInfo=$(expr $twod_f + 2) - FrontHaulCpuInfo=$(expr $twod_f + 2) - radioDpdkMaster=$(expr $twod_f + 1) - xRANThread=$(expr $twod_f + 3) - wlsRxThread=$(expr $twod_f + 4) - runThread=$(expr $twod_f + 5) - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_10mhz_4x4/gnb/ - sed -i "s/0, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - sed -i "s/2, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml - - sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_4x4/gnb/ - sed -i "s/2, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - sed -i "s/0, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml - - sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/gnb/ - #sed -i "s/2, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - #sed -i "s/0, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - #sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml -# - #sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml -# - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/gnb/ - #sed -i "s/2, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - #sed -i "s/0, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - #sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml -# - #sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml -# - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub6_mu1_100mhz_4x4/gnb/ - sed -i "s/2, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - sed -i "s/0, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml - - sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/gnb/ - #sed -i "s/0, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" phycfg_xran.xml - #sed -i "s/2, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" phycfg_xran.xml - #sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" phycfg_xran.xml - #sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" phycfg_xran.xml -# - #sed -i "s/18, 96, 0<\/xRANThread>/$xRANThread, 96, 0<\/xRANThread>/g" xrancfg_sub6_oru.xml - - cd /home/flexran/bin/nr5g/gnb/testmac - sed -i "s/0, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" testmac_cfg.xml - sed -i "s/1, 90, 0<\/wlsRxThread>/$wlsRxThread, 90, 0<\/wlsRxThread>/g" testmac_cfg.xml - sed -i "s/0, 89, 0<\/runThread>/$runThread, 89, 0<\/runThread>/g" testmac_cfg.xml - - dec2hex(){ - printf "%x" $1 - } - #a=$(dec2hex 55) - #a=`echo "ibase=10;obase=16;8"` - startd_f1=$(expr $startd_f + 1) - startd_f2=$(expr $startd_f + 2) - startd_f3=$(expr $startd_f + 3) - startd_f4=$(expr $startd_f + 4) - startd_f5=$(expr $startd_f + 5) - startd_f6=$(expr $startd_f + 6) - startd_f7=$(expr $startd_f + 7) - startd_f8=$(expr $startd_f + 8) - startd_f9=$(expr $startd_f + 9) - startd_f10=$(expr $startd_f + 10) - startd_f11=$(expr $startd_f + 11) - startd_f12=$(expr $startd_f + 12) - startd_f13=$(expr $startd_f + 13) - startd_f14=$(expr $startd_f + 14) - startd_f15=$(expr $startd_f + 15) - if [ $start_n -lt 15 ] ; then - echo "configure cpu failed, Please modify the parameters manually" - exit 0 - fi - - a6=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5)) - b6=$(dec2hex $a6) - a2=$((1<<$startd_f | 1 << $startd_f1)) - b2=$(dec2hex $a2) - - a3=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2)) - b3=$(dec2hex $a3) - a5=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 )) - b5=$(dec2hex $a5) - a4=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3)) - b4=$(dec2hex $a4) - a12=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 |1 << $startd_f9 | 1<<$startd_f10 | 1<<$startd_f11 )) - b12=$(dec2hex $a12) - - a8=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7)) - b8=$(dec2hex $a8) - a16=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 |1 << $startd_f9 | 1<<$startd_f10 | 1<<$startd_f11 | 1<<$startd_f12 | 1<<$startd_f13 | 1<<$startd_f14 | 1<<$startd_f15)) - b16=$(dec2hex $a16) - a14=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 |1 << $startd_f9 | 1<<$startd_f10 | 1<<$startd_f11 | 1<<$startd_f12 | 1<<$startd_f13 )) - b14=$(dec2hex $a14) - a10=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 |1 << $startd_f9 | 1<<$startd_f10 )) - b10=$(dec2hex $a10) - a9=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 )) - b9=$(dec2hex $a9) - - #echo "0x$b" - sed -i "s/3f0003f0/$b12/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_clxsp_mu0_10mhz_hton_oru.cfg - sed -i "s/ff000ff0/$b16/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_clxsp_mu0_20mhz_hton_oru.cfg - sed -i "s/7F0007F0/$b14/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_clxsp_mu1_100mhz_hton_oru.cfg - sed -i "s/1f0001f0/$b10/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_clxsp_multi_numerology_oru.cfg - sed -i "s/ff000ff0/$b16/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_clxsp_multi_numerology_oru_sub6.cfg - sed -i "s/7000000070/$b9/g" /home/flexran/bin/nr5g/gnb/testmac/testmac_icxsp_mu3_100mhz_hton_oru.cfg - fi - if [ -z "$PCIDEVICE_INTEL_COM_INTEL_FEC_5G" ]; then - PCIaddr1=$(echo $PCIDEVICE_INTEL_COM_INTEL_SRIOV_ORU | sed "s/,/\n/g" | sort | sed -n "1p") - PCIaddr2=$(echo $PCIDEVICE_INTEL_COM_INTEL_SRIOV_ORU | sed "s/,/\n/g" | sort | sed -n "2p") - PCIaddr3=$(echo $PCIDEVICE_INTEL_COM_INTEL_SRIOV_ORU | sed "s/,/\n/g" | sort | sed -n "3p") - PCIaddr4=$(echo $PCIDEVICE_INTEL_COM_INTEL_SRIOV_ORU | sed "s/,/\n/g" | sort | sed -n "4p") - - - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_10mhz_4x4/oru/ - #sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg - echo "iovaMode=1" >> usecase_ru.cfg - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_4x4/oru/ - #sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg - - echo "iovaMode=1" >> usecase_ru.cfg - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/oru/ - ##sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - ##sed -i "s/0000:21:02.2/$PCIaddr3/g;s/0000:21:02.3/$PCIaddr4/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - #sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - #sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg - #echo "iovaMode=1" >> usecase_ru.cfg -# - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/oru/ - ##sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - ##sed -i "s/0000:21:02.2/$PCIaddr3/g;s/0000:21:02.3/$PCIaddr4/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - #sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - #sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg -# - #echo "iovaMode=1" >> usecase_ru.cfg - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub6_mu1_100mhz_4x4/oru/ - #sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg - sed -i "s/ioCore=2/ioCore=62/g" usecase_ru.cfg - sed -i "s/oXuEthLinkSpeed=25/oXuEthLinkSpeed=100/g" usecase_ru.cfg - echo "iovaMode=1" >> usecase_ru.cfg - - - sed -i "s/ioCore=2/ioCore=62/g" config_file_o_ru.dat - sed -i "s/duMac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac0=00:11:22:33:00:00/g" config_file_o_ru.dat - sed -i "s/duMac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac1=00:11:22:33:00:10/g" config_file_o_ru.dat - sed -i "s/ruMac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac0=00:11:22:33:00:01/g" config_file_o_ru.dat - sed -i "s/ruMac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac1=00:11:22:33:00:11/g" config_file_o_ru.dat - - sed -i "s/duMac2=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac2=00:11:22:33:00:20/g" config_file_o_ru.dat - sed -i "s/duMac3=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/duMac3=00:11:22:33:00:30/g" config_file_o_ru.dat - sed -i "s/ruMac2=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac2=00:11:22:33:00:21/g" config_file_o_ru.dat - sed -i "s/ruMac3=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/ruMac3=00:11:22:33:00:31/g" config_file_o_ru.dat - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/oru/ - ##sed -i "s/0000:21:02.0/$PCIaddr1/g;s/0000:21:02.1/$PCIaddr2/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_a \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_a \"$PCIaddr1,$PCIaddr2\"/g" run_o_ru.sh - #sed -i "s/vf_addr_o_xu_b \"0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9],0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]\"/vf_addr_o_xu_b \"$PCIaddr3,$PCIaddr4\"/g" run_o_ru.sh - #sed -i "s/oXuRem0Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac0=00:11:22:33:00:00/g" usecase_ru.cfg - #sed -i "s/oXuRem0Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem0Mac1=00:11:22:33:00:10/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac0=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac0=00:11:22:33:00:20/g" usecase_ru.cfg - #sed -i "s/oXuRem1Mac1=[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z]/oXuRem1Mac1=00:11:22:33:00:30/g" usecase_ru.cfg - - #echo "iovaMode=1" >> usecase_ru.cfg - #open core pining - cpulist=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus) - startd=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "1p") - twod=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "2p") - if [ -z $startd ] ; then - echo "cpuset is empty" - exit 0 - fi - startd_f=$(echo $startd|awk -F '-' '{print $1}') - startd_e=$(echo $startd|awk -F '-' '{print $2}') - #echo "startd_f:$startd_f,start_e:$startd_e" - start_n=$(expr $startd_e - $startd_f) - if [ $start_n -gt 20 ] ; then - exit 0 - fi - - twod_f=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "1p") - twod_e=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "2p") - #start_n=`expr $startd_e - $startd_f` - twod_n=$(expr $twod_e - $twod_f) - - systemcore=$twod_f - maincore=$(expr $twod_f + 1) - iocore=$(expr $twod_f + 2) - ioworkcore=$(expr $twod_f + 3) - - dec2hex(){ - printf "%x" $1 - } - a1=$((1<<$ioworkcore)) - b1=$(dec2hex $a1) - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_10mhz_4x4/oru/ - sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - echo "mainCore=$maincore" >> usecase_ru.cfg - echo "systemCore=$systemcore" >> usecase_ru.cfg - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_4x4/oru/ - sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - echo "mainCore=$maincore" >> usecase_ru.cfg - echo "systemCore=$systemcore" >> usecase_ru.cfg - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub3_mu1_20mhz_4x4/oru/ - #sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - #sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - #echo "mainCore=$maincore" >> usecase_ru.cfg - #echo "systemCore=$systemcore" >> usecase_ru.cfg -# - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub3_mu0_20mhz_sub6_mu1_100mhz_4x4/oru/ - #sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - #sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - #echo "mainCore=$maincore" >> usecase_ru.cfg - #echo "systemCore=$systemcore" >> usecase_ru.cfg - - cd /home/flexran/bin/nr5g/gnb/l1/orancfg/sub6_mu1_100mhz_4x4/oru/ - sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - echo "mainCore=$maincore" >> usecase_ru.cfg - echo "systemCore=$systemcore" >> usecase_ru.cfg - - #cd /home/flexran/bin/nr5g/gnb/l1/orancfg/mmwave_mu3_100mhz_2x2/oru/ - #sed -i "s/ioWorker=0x8/ioWorker=0x$b1/g" usecase_ru.cfg - #sed -i "s/ioCore=2/ioCore=$iocore/g" usecase_ru.cfg - #echo "mainCore=$maincore" >> usecase_ru.cfg - #echo "systemCore=$systemcore" >> usecase_ru.cfg - fi -fi - -if [ $test_mode = "timer" ]; then - if [ -n "$PCIDEVICE_INTEL_COM_INTEL_FEC_5G" ]; then - cd /home/flexran/bin/nr5g/gnb/l1/ - #sed -i "s/0000:1f:00.1/$PCIDEVICE_INTEL_COM_INTEL_FEC_5G/g" phycfg_timer.xml - sed -i "s/dpdkBasebandDevice>0000:[0-9,a-z][0-9,a-z]:[0-9,a-z][0-9,a-z].[0-9]<\/dpdkBasebandDevice/dpdkBasebandDevice>$PCIDEVICE_INTEL_COM_INTEL_FEC_5G<\/dpdkBasebandDevice/g" phycfg_timer.xml - sed -i "s/0<\/dpdkBasebandFecMode>/1<\/dpdkBasebandFecMode>/g" phycfg_timer.xml - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" phycfg_timer.xml - cpulist=`cat /sys/fs/cgroup/cpuset/cpuset.cpus` - - echo "$cpulist" > /home/flexran/tests/cpulist.txt - - startd=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "1p") - twod=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "2p") - if [ -z $startd ] ; then - echo "cpuset is empty" - exit 0 - fi - startd_f=$(echo $startd|awk -F '-' '{print $1}') - startd_e=$(echo $startd|awk -F '-' '{print $2}') - #echo "startd_f:$startd_f,start_e:$startd_e" - start_n=$(expr $startd_e - $startd_f) - if [ $start_n -gt 20 ] ; then - exit 0 - fi - - twod_f=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "1p") - twod_e=$(echo $twod|sed "s/-/\n/g" | sort | sed -n "2p") - #start_n=`expr $startd_e - $startd_f` - twod_n=$(expr $twod_e - $twod_f) - - systemthread=$twod_f - timerThread=$(expr $twod_f + 1) - FpgaDriverCpuInfo=$(expr $twod_f + 2) - FrontHaulCpuInfo=$(expr $twod_f + 2) - radioDpdkMaster=$(expr $twod_f + 1) - - file=/home/flexran/bin/nr5g/gnb/l1/phycfg_timer.xml - sed -i "s/0, 0, 0<\/systemThread>/$systemthread, 0, 0<\/systemThread>/g" $file - sed -i "s/2, 96, 0<\/timerThread>/$timerThread, 96, 0<\/timerThread>/g" $file - sed -i "s/3, 96, 0<\/FpgaDriverCpuInfo>/$FpgaDriverCpuInfo, 96, 0<\/FpgaDriverCpuInfo>/g" $file - sed -i "s/3, 96, 0<\/FrontHaulCpuInfo>/$FrontHaulCpuInfo, 96, 0<\/FrontHaulCpuInfo>/g" $file - sed -i "s/2, 99, 0<\/radioDpdkMaster>/$radioDpdkMaster, 99, 0<\/radioDpdkMaster>/g" $file - - fi - - if [ -z "$PCIDEVICE_INTEL_COM_INTEL_FEC_5G" ]; then - testmaccfg_file=/home/flexran/bin/nr5g/gnb/testmac/testmac_cfg.xml - sed -i "s/0<\/dpdkIovaMode>/1<\/dpdkIovaMode>/g" $testmaccfg_file - sed -i "s/1<\/PhyCoreCheck>/0<\/PhyCoreCheck>/g" $testmaccfg_file - sed -i "s/1000000010/11000000110/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - sed -i "s/1f8000001f0/ff0000f0/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - - cd /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/ - cat icxsp_mu0_10mhz_4x4_hton.cfg > icxsp.cfg - cat icxsp_mu0_20mhz_4x4_hton.cfg >> icxsp.cfg - cat icxsp_mu1_100mhz_4x4_hton.cfg >> icxsp.cfg - - cpulist=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus) - start_f=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "1p") - end_f=$(echo $cpulist|sed "s/,/\n/g" | sort | sed -n "2p") - if [ -z $cpulist ] ; then - echo "cpuset is empty" - exit 0 - fi - #echo "start:$start_f,end:$end_f" - if [ -z $end_f ]; then - start_f=$(echo $cpulist|sed "s/-/\n/g" | sort | sed -n "1p") - end_f=$(echo $cpulist|sed "s/-/\n/g" | sort | sed -n "2p") - init_list=$(expr $end_f - $start_f) - if [ $init_list -gt 20 ] ; then - exit 0 - fi - fi - #testmaccfg_file=/home/flexran/bin/nr5g/gnb/testmac/testmac_cfg.xml - sed -i "s/0, 0, 0<\/systemThread>/$start_f, 0, 0<\/systemThread>/g" $testmaccfg_file - sed -i "s/0, 89, 0<\/runThread>/$start_f, 89, 0<\/runThread>/g" $testmaccfg_file - sed -i "s/1, 90, 0<\/wlsRxThread>/$end_f, 90, 0<\/wlsRxThread>/g" $testmaccfg_file - - work_cpulist=$(cat /home/flexran/tests/cpulist.txt) - startd=$(echo $work_cpulist|sed "s/,/\n/g" | sort | sed -n "1p") - startd2=$(echo $work_cpulist|sed "s/,/\n/g" | sort | sed -n "2p") - startd_f=$(echo $startd|awk -F '-' '{print $1}') - startd_e=$(echo $startd|awk -F '-' '{print $2}') - startd2_f=$(echo $startd2|awk -F '-' '{print $1}') - startd2_e=$(echo $startd2|awk -F '-' '{print $2}') - #startd_e=`echo $startd|sed "s/-/\n/g" | sort | sed -n "2p"` - start_n=$(expr $startd_e - $startd_f) - - dec2hex(){ - printf "%x" $1 - } - #a=$(dec2hex 55) - #a=`echo "ibase=10;obase=16;8"` - startd_f1=$(expr $startd_f + 1) - startd_f2=$(expr $startd_f + 2) - startd_f3=$(expr $startd_f + 3) - startd_f4=$(expr $startd_f + 4) - startd_f5=$(expr $startd_f + 5) - startd_f6=$(expr $startd_f + 6) - startd_f7=$(expr $startd_f + 7) - startd_f8=$(expr $startd_f + 8) - startd_f9=$(expr $startd_f + 9) - startd_f10=$(expr $startd_f + 10) - startd_f11=$(expr $startd_f + 11) - - #startd2_f1=`expr $startd2_f + 4` - #startd2_f2=`expr $startd2_f + 5` - #startd2_f3=`expr $startd2_f + 6` - - if [ $start_n -lt 8 ] ; then - echo "configure cpu failed, Please modify the parameters manually" - exit 0 - fi - - a6=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5)) - b6=$(dec2hex $a6) - a2=$((1<<$startd_f | 1 << $startd_f1)) - b2=$(dec2hex $a2) - - a3=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2)) - b3=$(dec2hex $a3) - a5=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 )) - b5=$(dec2hex $a5) - a4=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3)) - b4=$(dec2hex $a4) - a12=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7 | 1<<$startd_f8 |1 << $startd_f9 | 1<<$startd_f10 | 1<<$startd_f11 )) - b12=$(dec2hex $a12) - - #aa=$((1<< $startd2_f1 | 1<<$startd2_f2 | 1<<$startd2_f3)) - #bb=$(dec2hex $aa) - #ll=`echo "$b12"|wc -L` - #len=`expr 16 - $ll` - #key="" - #for ((i=1;i<=$len;i++)) - #do - # key="${key}0" - #done - #keyd="$bb$key$b12" - #echo "keyd:$keyd" - - - a8=$((1<<$startd_f | 1 << $startd_f1 | 1 << $startd_f2 | 1 << $startd_f3 | 1<<$startd_f4 | 1<<$startd_f5 | 1 << $startd_f6 | 1<<$startd_f7)) - b8=$(dec2hex $a8) - #echo "0x$b" - testmacfile=/home/flexran/bin/nr5g/gnb/testmac/cascade_lake-sp/clxsp_mu0_10mhz_4x4_hton.cfg - sed -i "s/3f0003f0/$b6/g" $testmacfile - sed -i "s/f0000000f0/$b6/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu0_10mhz_4x4_hton.cfg - sed -i "s/1000000010/$b2/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu0_20mhz_4x4_hton.cfg - sed -i "s/3800000030/$b5/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu0_20mhz_4x4_hton.cfg - sed -i "s/3000000030/$b4/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu0_20mhz_4x4_hton.cfg - sed -i "s/3f0000003f0/$b12/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu0_20mhz_4x4_hton.cfg - - sed -i "s/11000000110/$b4/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - sed -i "s/3800000030/$b5/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - sed -i "s/1800000010/$b3/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - sed -i "s/ff0000f0/$b12/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - sed -i "s/07000000070/$b6/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu1_100mhz_4x4_hton.cfg - - sed -i "s/1000000010/$b2/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu3_100mhz_2x2_hton.cfg - sed -i "s/3000000030/$b4/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu3_100mhz_2x2_hton.cfg - sed -i "s/7000000070/$b6/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu3_100mhz_2x2_hton.cfg - sed -i "s/f0000000f0/$b8/g" /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/icxsp_mu3_100mhz_2x2_hton.cfg - - cd /home/flexran/bin/nr5g/gnb/testmac/icelake-sp/ - cat icxsp_mu0_10mhz_4x4_hton.cfg > icxsp.cfg - cat icxsp_mu0_20mhz_4x4_hton.cfg >> icxsp.cfg - cat icxsp_mu1_100mhz_4x4_hton.cfg >> icxsp.cfg - - fi - -fi - diff --git a/blog/2023-07-29-flexran-images/graftimer.png b/blog/2023-07-29-flexran-images/graftimer.png deleted file mode 100644 index d218e34a..00000000 Binary files a/blog/2023-07-29-flexran-images/graftimer.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/import-bios.png b/blog/2023-07-29-flexran-images/import-bios.png deleted file mode 100644 index f303ed60..00000000 Binary files a/blog/2023-07-29-flexran-images/import-bios.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/mgmt-component.png b/blog/2023-07-29-flexran-images/mgmt-component.png deleted file mode 100644 index 12702fc7..00000000 Binary files a/blog/2023-07-29-flexran-images/mgmt-component.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/system-config.xml b/blog/2023-07-29-flexran-images/system-config.xml deleted file mode 100644 index 85e1a8c5..00000000 --- a/blog/2023-07-29-flexran-images/system-config.xml +++ /dev/null @@ -1,3785 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - Ignore - False - None - Local Key Management and Secure Enterprise Key Manager Capable - Yes - - - - Automatic - Enabled - Automatic - Normal - On - Disabled - Disabled - 30 - 30 - 30 - 30 - - - - - False - - - - - False - - - False - - - False - Ignore - Not Capable - No - - Update - None - - - - - - - - - - - - - - - - - - - - - - - - Disabled - 0 - - Enabled - NONE - AutoDetect - Disabled - Broadcom_SetupKeyCtrlS - 5 - Disabled - Disabled - - NoRetry - Disabled - SRIOV - - 8 - 8 - 74 - Disabled - 0 - AutoNeg - Disabled - Disabled - Enabled - Enabled - Broadcom_ANProtocolIEEEandConsortium - Enabled - VEB - Disabled - Disabled - Enabled - 16M - Default - - - Disabled - 0 - - Enabled - NONE - AutoDetect - Disabled - Broadcom_SetupKeyCtrlS - 5 - Disabled - Disabled - - NoRetry - Disabled - SRIOV - - 8 - 8 - 74 - Disabled - 0 - AutoNeg - Disabled - Disabled - Enabled - Enabled - Broadcom_ANProtocolIEEEandConsortium - Enabled - VEB - Disabled - Disabled - Enabled - 16M - Default - - - Disabled - 0 - - Enabled - NONE - AutoDetect - Disabled - Broadcom_SetupKeyCtrlS - 5 - Disabled - Disabled - - NoRetry - Disabled - SRIOV - - 8 - 8 - 74 - Disabled - 0 - AutoNeg - Disabled - Disabled - Enabled - Enabled - Broadcom_ANProtocolIEEEandConsortium - Enabled - VEB - Disabled - Disabled - Enabled - 16M - Default - - - Disabled - 0 - - Enabled - NONE - AutoDetect - Disabled - Broadcom_SetupKeyCtrlS - 5 - Disabled - Disabled - - NoRetry - Disabled - SRIOV - - 8 - 8 - 74 - Disabled - 0 - AutoNeg - Disabled - Disabled - Enabled - Enabled - Broadcom_ANProtocolIEEEandConsortium - Enabled - VEB - Disabled - Disabled - Enabled - 16M - Default - - - 0 - - Disabled - Disabled - Enabled - SRIOV - 0 - NONE - - - Disabled - Auto - - - 0 - - Disabled - Disabled - Enabled - SRIOV - NONE - - - Disabled - Auto - - - - Disabled - Administrator - 0000000000000000000000000000000000000000 - public - Disabled - root - - 511 - Administrator - Administrator - Enabled - Enabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - - - 0 - No Access - No Access - Disabled - Disabled - Disabled - SHA - AES - - - - - Disabled - Disabled - - Disabled - - Disabled - - - Disabled - 0 - Enabled - 0.0.0.0 - - Disabled - - - Disabled - - - Disabled - - - Disabled - - - Enabled - 22 - 1800 - - Enabled - 80 - 443 - 1800 - Enabled - Enabled - 128-Bit or higher - TLS 1.1 and Higher - Auto - - - Disabled - Enabled - - Disabled - Enabled - Enabled - Enabled - eHTML5 - 6 - 5900 - 1800 - Deny Access - Auto-attach - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - 60 - Enabled - ^\ - Enabled - 115200 - Administrator - 10 - 255 - Enabled - public - SNMPv1 - All - 161 - 162 - Enabled - - AutoAttach - Disabled - Disabled - Disabled - Enabled - Enabled - Disabled - 192.168.1.1 - 255.255.255.0 - Enabled - 3 - 60 - 60 - Disabled - 192.168.1.1 - 255.255.255.0 - Disabled - 192.168.1.1 - 255.255.255.0 - Disabled - 192.168.1.1 - 255.255.255.0 - Disabled - 192.168.1.1 - 255.255.255.0 - Disabled - Disabled - 0 - 0 - CST6CDT - - - - - - US - - 2048 - - Disabled - Disabled - 0 - Disabled - Weak Protection - - Disabled - - - 120 - Extended Schema - - - - - - - Disabled - Disabled - Disabled - - - Enabled - Disabled - Disabled - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disabled - Disabled - Disabled - Disabled - 514 - - - - Disabled - 5 - Disabled - Anonymous - - 6514 - Disabled - - 636 - - - - Enabled - - - - Enabled - Disabled - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - 0.0.0.0 - 25 - Disabled - - - - - STARTTLS - chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com - ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519 - curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256 - umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512 - Auto Attach - - - - Enabled - Done - Yes - Auto Attach - - - - Enabled - Done - Yes - Enabled - 0.0.0.0 - usb-p2p - 169.254.1.1 - fde1:53ba:e9a0:de11::1 - Enabled - Enabled - Dedicated - None - Enabled - 1000 - Full - 1500 - - Disabled - Disabled - 0 - 1 - Disabled - 5 - 30 - Disabled - Both - Disabled - Disabled - 0 - - Enabled - Enabled - Enabled - Enabled - Enabled - StablePrivacy - - Enabled - - 255.255.255.0 - 192.168.0.1 - 0.0.0.0 - 0.0.0.0 - Enabled - - :: - 64 - :: - :: - Enabled - - Disabled - - - Disabled - - - Disabled - - - Disabled - - - Disabled - - - Disabled - - - Disabled - - - Disabled - - Enabled - Disabled - - - - 16 - Disabled - Disabled - Disabled - 1 - 1 - 1 - - - - Enabled - Disabled - Circular - Disabled - 60 - Disabled - - - - - Enabled - Enabled - Disabled - 480 - None - Disabled - Disabled - Enabled - Enabled - Disabled - Disabled - Enabled - Enabled - Enabled - Disabled - Disabled - Disabled - - 5901 - Disabled - 300 - Disabled - 2 - False - Enabled - By accessing this computer, you confirm that such access complies with your organization's security policy. - Disabled - 1 - 0 - Normal - Enabled - Enabled while server has default credential settings only - Enabled - - Enabled - Disabled - Disabled - Disabled - No - CIFS - - - - - - Yes - English - 0 - No - - - - Enabled - Enabled - Disabled - 3 - 5 - Yes - Enabled - Enabled - - - - - - - - - - - - - - - Disabled - Enabled - - Enabled - 1 day - Enabled - Enabled - Enabled - Disabled - Disabled - Disabled - - 514 - - 514 - Disabled - Disabled - 40 - FALSE - - Disabled - 0 - FALSE - IERRCriticalTrigger - Disabled - 60 - FALSE - CPUCriticalTrigger, CPUWarnTrigger, TMPCpuCriticalTrigger, TMPCpuWarnTrigger - Disabled - 60 - FALSE - FANCriticalTrigger, FANWarnTrigger - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 600 - FALSE - - Disabled - 60 - FALSE - MEMCriticalTrigger, MEMWarnTrigger - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 3600 - FALSE - NVMeCriticalTrigger, NVMeWarnTrigger - Disabled - 60 - FALSE - TMPCpuCriticalTrigger, TMPCpuWarnTrigger - Disabled - 0 - FALSE - - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - VLTCriticalTrigger - Disabled - 60 - FALSE - - Disabled - 3600 - FALSE - PDRCriticalTrigger, PDRWarnTrigger - Disabled - 60 - FALSE - - Disabled - 60 - FALSE - TMPCriticalTrigger, TMPWarnTrigger - Disabled - 60 - FALSE - TMPDiskCriticalTrigger, TMPDiskWarnTrigger, TMPCriticalTrigger, TMPWarnTrigger - 15 - 4 - 24 - Do not use the cached key - No Caching - Disabled - Enabled - Enabled - DefaultIDEVID - Disabled - Enabled - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Service Tag - - Enabled - Watts - C - 0 - unhide - SEL - Full-Access - No-License-Msg - DIsabled - 30 - 30 - 10 - 10 - Maximum Performance - Medium - 255 - Disabled - Disabled - NO LIMIT - 55 - Default - 0 - 0 - - - - Disabled - - - - Disabled - - - - Disabled - - - - Disabled - - - - Disabled - - - - Disabled - - - - Disabled - - - - Disabled - 0 - 0 - 0 - - - - No - - - 0 - Months - 0 - 0 - - - - No - 0 - 0 - - 0 - - - - - - - 0 - - 0 - - Owned - - - No - - - No - Network - - - - - - 0 - Days - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 - 240 - 80 - Disabled - - A/B Grid Redundant - Enabled - PSU1 - - - - - - EIA_310 - - - 0 - Automatic - 0 - Automatic - 0 - Automatic - None - Not Applicable - - 0 - 60 - - - - Enabled - Apply Always - Match firmware of replaced part - - Off - - - False - Disabled - - - 80 - - - HTTP - On - - - - - - ****** - - - - - - - - - - - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Enabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - - Enabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - No Action - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Enabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - No Action - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - No Action - - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Disabled - Disabled - Enabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Disabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Enabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Enabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Enabled - Enabled - Disabled - Enabled - Enabled - - - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Disabled - Enabled - Disabled - - Enabled - Enabled - Enabled - Disabled - Enabled - Disabled - - Enabled - Enabled - Enabled - Disabled - Enabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Enabled - Disabled - Enabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - Disabled - No Action - - - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Enabled - Disabled - Disabled - Disabled - - Enabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Disabled - Enabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Enabled - Disabled - Enabled - - Disabled - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Disabled - Disabled - - Enabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - Disabled - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Enabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Enabled - Enabled - Enabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Enabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - No Action - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Enabled - No Action - - Disabled - Disabled - - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - Disabled - Enabled - Disabled - Enabled - Disabled - Disabled - - Disabled - Disabled - Enabled - - Disabled - Disabled - - Enabled - Disabled - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Enabled - Disabled - Enabled - - Disabled - Disabled - - Disabled - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - Disabled - Disabled - - - - Disabled - Disabled - - - - TelcoOptimizedProfile - Enabled - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - Enabled - Disabled - RoundRobin - Enabled - Disabled - Enabled - Disabled - Disabled - Level2 - Disabled - Disabled - Enabled - Enabled - IccpHeavy512 - All - Enabled - Disabled - - - Auto - AhciMode - Enabled - Disabled - - - - - - - - - - DellQualifiedDrives - Uefi - Enabled - - Disabled - Disabled - None - AHCI.Integrated.1-2,NIC.PxeDevice.1-1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Enabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - Disabled - - Disabled - NIC.Embedded.1-1-1 - IPv4 - Disabled - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disabled - Disabled - Con1Con2 - NIC.Embedded.1-1-1 - IPv4 - Disabled - 1 - 0 - 3 - 10000 - Disabled - - - - Disabled - - - 3260 - 0 - - None - OneWay - - - - - NIC.Embedded.1-1-1 - IPv4 - Disabled - 1 - 0 - 3 - 10000 - Disabled - - - - Disabled - - - 3260 - 0 - - None - OneWay - - - - - AllOn - On - On - Enabled - Disabled - Enabled - Roll2KCycles - Enabled - Disabled - Disabled - Enabled - 56TB - PlatformDefault - - - - Enabled - Enabled - Enabled - OnConRedirAuto - Serial1Com2Serial2Com1 - Serial1 - 115200 - Vt100Vt220 - Enabled - Custom - OsDbpm - MaxPerf - Enabled - Disabled - Disabled - Disabled - 1x - MaxUFS - MaxPower - Enabled - Enabled - Disabled - OsCxC2 - 0us - Disabled - Disabled - IoSensitive - Disabled - Disabled - Disabled - Disabled - - - - - Unlocked - Off - - - Disabled - - Enabled - Last - Immediate - 120 - Standard - Enabled - Disabled - Disabled - Standard - DeployedMode - - - - None - - - Disabled - OptimizerMode - - MemoryTrainingFast - Enabled - Disabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - Enabled - - On - Enabled - Disabled - Enabled - - - - - - - - \ No newline at end of file diff --git a/blog/2023-07-29-flexran-images/timer1.png b/blog/2023-07-29-flexran-images/timer1.png deleted file mode 100644 index 9e572e85..00000000 Binary files a/blog/2023-07-29-flexran-images/timer1.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/timer2.png b/blog/2023-07-29-flexran-images/timer2.png deleted file mode 100644 index 157846fd..00000000 Binary files a/blog/2023-07-29-flexran-images/timer2.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/timer3.png b/blog/2023-07-29-flexran-images/timer3.png deleted file mode 100644 index 3344ae86..00000000 Binary files a/blog/2023-07-29-flexran-images/timer3.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/xran1.png b/blog/2023-07-29-flexran-images/xran1.png deleted file mode 100644 index 2f05580a..00000000 Binary files a/blog/2023-07-29-flexran-images/xran1.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/xran2.png b/blog/2023-07-29-flexran-images/xran2.png deleted file mode 100644 index 8fa10788..00000000 Binary files a/blog/2023-07-29-flexran-images/xran2.png and /dev/null differ diff --git a/blog/2023-07-29-flexran-images/xran3.png b/blog/2023-07-29-flexran-images/xran3.png deleted file mode 100644 index 8ce48ebd..00000000 Binary files a/blog/2023-07-29-flexran-images/xran3.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Edge-Computing.png b/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Edge-Computing.png deleted file mode 100644 index 42f06cbd..00000000 Binary files a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Edge-Computing.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-1.png b/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-1.png deleted file mode 100644 index c4a7004e..00000000 Binary files a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-1.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-2.png b/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-2.png deleted file mode 100644 index 8005e854..00000000 Binary files a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-2.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Linkerd-architecture.png b/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Linkerd-architecture.png deleted file mode 100644 index fcf454c5..00000000 Binary files a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Linkerd-architecture.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-logo.png b/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-logo.png deleted file mode 100644 index 8e2ebef0..00000000 Binary files a/blog/2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-logo.png and /dev/null differ diff --git a/blog/2023-10-26-edge-computing-reference-architecture-with-rancher-and-linkerd.md b/blog/2023-10-26-edge-computing-reference-architecture-with-rancher-and-linkerd.md deleted file mode 100644 index 2dd32397..00000000 --- a/blog/2023-10-26-edge-computing-reference-architecture-with-rancher-and-linkerd.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -slug: Linkerd -title: Edge Computing Reference Architecture with Rancher and Linkerd -authors: - name: Vince Matev - title: Partner Alliance Manager - url: https://github.com/vmatev - image_url: github.com/vmatev.png -tags: [edge, linkerd, rancher] ---- - -# Edge Computing Reference Architecture with Rancher and Linkerd - -With the exponential growth of connected devices, Edge computing is becoming a game changer. Edge computing is a model that processes data near the network edge where data is generated. It addresses the issues of latency, bandwidth, and data privacy more effectively than centralized cloud architectures. However, managing and orchestrating applications and services at the Edge is no easy task. Robust, lightweight, and reliable tools are needed — a challenge some open source tools are prepared to tackle. By combining Rancher Prime, Buoyant’s Linkerd, RKE2, and K3s, users get a state-of-the-art, highly secure, highly performant solution for unique edge requirements. - -![](./2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-logo.png) - - -## Introducing the architecture - -Before we get into the "how," let's introduce the edge computing stack and examine why these tools work so well together for an edge computing scenario. If you are running Rancher, we recommend combining Rancher Prime, Buoyant's Linkerd, RKE2, and K3s (for an overview of what each piece does, please refer to the table below). - -![](./2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Edge-Computing.png) - -Why this stack for edge computing? First and foremost, they integrate seamlessly, which will save you a lot of headaches. Additionally, Linkerd and RKE2 significantly improve security, while Linkerd provides an additional layer of reliability. This stack is lightweight and resource efficient, making it ideal for resource-constrained environments. And lastly, all these tools focus on operational simplicity. And when it comes to edge computing, that is incredibly important. With multiple disparate devices, you need a unified way to operate them all. - -|Project Name|What it is|Why for the edge?| -|---|---|---| -|[Buoyant’s Linkerd](https://buoyant.io/cloud)|Open-source, security-first service mesh for Kubernetes|Provides security, reliability, and observability without any code changes. Is ultra-lightweight and easy to install with a small runtime footprint (this is key in edge computing where managing communication must be efficient)| -|[Rancher Prime](https://www.rancher.com/products/rancher)|Open-source multi-cluster Kubernetes orchestration platform|Flexible and compatible with any CNCF Kubernetes distribution, including K3s and RKE2, Rancher Prime proactively monitors cluster health and performance.| -|[RKE2](https://docs.rke2.io/)|CNCF-certified Kubernetes distribution optimized for air-gapped, offline, or edge environments deployed at the core or near the edge.|Fully CNCF-certified, RKE2 improves security and simplicity of your Kubernetes deployment. It is designed to be secure, reliable, and lightweight, ideal for general-purpose computing and near-edge use cases.| -|[K3s](https://docs.rke2.io/)|CNCF-certified ultra-lightweight Kubernetes distribution providing the best choice for clusters running at the edge.|Ideal for edge applications, allowing for simple deployment and management while still fully CNCF-certified. It is ultra-lightweight and optimized for resource-constrained environments and functions even in remote and disconnected areas.| - -Security, reliability, and observability are all critical concerns for edge computing, and it’s therefore important to choose an architecture that helps, rather than hinders, accomplishing these goals. An effective architecture will be simple to deploy and operate, using technologies in ways that play to their strengths, as described above. With Rancher and Linkerd, we can adopt an extremely simple architecture that nevertheless brings an enormous amount of functionality to the table: - -![](./2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-1.png) - -Here, our instruments (on the left of the diagram) are connected to IoT “gateway” systems running Linux. By deploying k3s clusters with Linkerd all the way out on the edge gateways, we can use Linkerd’s secure multicluster capabilities to extend the secure service mesh all the way from the central cluster (shown on the right, running RKE) to the edge gateways themselves. - -These tools all integrate seamlessly, providing a secure, reliable, observable edge platform that is lightweight and resource efficient. Now let's explore why we believe these technologies are a perfect match for the edge. - -## Why Rancher and Buoyant's Linkerd? - -### Seamless Integration -One of the most significant advantages of combining Rancher Prime, Linkerd, RKE2, and K3s is their compatibility. These tools are designed to work hand-in-hand, providing a seamless experience. Rancher provides the overarching platform to manage your Kubernetes clusters, including RKE2, K3s, EKS, AKS, GKE, etc. And Linkerd easily integrates with any Kubernetes distribution, adding a service mesh layer to your Rancher-managed clusters. - -### Reliability and Robustness -Linkerd adds a layer of reliability and robustness to your Kubernetes clusters by providing traffic splitting, retries, and timeouts capabilities for your applications. With its fault-tolerance feature, Linkerd ensures your applications continue running smoothly, even in the event of a network failure. - -RKE2 takes Kubernetes security to the next level. It includes several enhancements like CIS benchmark compliance, security by default, and defense in depth. These features, along with Linkerd's ability to automate mutual TLS for all service-to-service communication, provide a secure environment for your Edge computing needs. - -### Lightweight and Resource Efficient -Edge environments often have limited resources. K3s is designed explicitly for such situations. It is a fully compliant Kubernetes distribution with a significantly smaller footprint, consuming less than half the memory of a typical Kubernetes installation. This lightweight nature extends to Linkerd as well, which maintains a small runtime footprint, making it an ideal service mesh for Edge environments. - -### Comprehensive Observability -With numerous devices and applications running in various locations, clearly understanding their performance and issues is vital. The Rancher Prime, Linkerd, RKE2, and K3s stack addresses that by providing comprehensive observability capabilities. - -**Rancher** enables users to monitor and manage clusters from a unified interface, regardless of where they are deployed. With built-in monitoring and alerting tools, users get detailed insight into cluster health, allowing for quick identification and resolution of potential issues. **Linkerd** provides deep real-time data into your applications' performance and includes features such as request volume, success rates, and latency distributions for all meshed services. Users get a more granular level of observability into microservices communication, which is crucial in Edge computing scenarios where the network is notorious for being unstable and latency-sensitive. Linkerd also automatically adds mTLS to all service-to-service communication, adding security with no code changes, which is particularly valuable in Edge computing. - -### Operational Simplicity -When it comes to Edge computing, operational simplicity is key. Edge environments involve managing numerous devices, often spread across multiple geographical locations, making traditional management methods impractical. Rancher simplifies Kubernetes cluster management with an intuitive user interface and robust API. **Rancher** allows users to manage all their Kubernetes clusters from a single control point, whether in the cloud, data center, or Edge environments. This unified approach simplifies operations and reduces the complexity of managing multiple clusters. - -The **Linkerd** service mesh requires minimal configuration and comes with zero-config features such as load balancing, retries, timeouts, and more. With no time-consuming setup, developers have more time to build business logic. That being said, edge devices will require some initial setup work and configuration. Due to their resource limitations, these devices typically require deployment optimization to ensure they run efficiently. - -**Linkerd Architecture:** - -![](./2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Linkerd-architecture.png) - -The Linkerd architecture is fairly simple. The Linkerd control plane manages Linkerd’s operation; it also has a CLI that the user can use to configure, and examine, the mesh. Application Pods that are part of the mesh have the ultra-fast, ultra-lightweight Linkerd proxy, purpose-built in Rust, injected into them as a sidecar container. Once the proxy is injected, all application communication goes through the proxy, which manages mTLS, workload authentication and authorization, retries, circuit breaking, metrics collection, and much more. Having these critical features uniformly applied across the entire application at the platform level eliminates the need to change the application itself, meaning that the application developers are free to focus on the business needs of the application rather than on the complexities of the network. - -## Edge computing use case examples - -Industries such as manufacturing, healthcare, transportation, retail, and energy are all increasingly taking advantage of edge computing to optimize their operations. Let's look at some examples. But keep in mind that the stack is vertical agnostic. The role of Rancher, Linkerd, K3s, and RKE2 is always the same. The examples below put them in industry-specific context. - -|Industry Use Case|Retail Industry - Point of Sale (POS) Systems|Manufacturing - Predictive Maintenance|Healthcare - Remote Patient Monitoring|Transportation - Fleet Management|Summing it up| -|---|---|---|---|---|---| -|**Specific challenge**|In retail environments the people setting up and maintaining the physical devices are more likely to be store managers than technicians. This leads to fragile physical systems.|Predictive maintenance is often critical. Manufacturing equipment sensors send data to the central system that predicts potential equipment failures.|In remote patient monitoring scenarios, patient health data is often collected by various devices and sent to a central system for analysis and monitoring.|Modern fleet management uses real-time vehicle data for route optimization, improved fuel efficiency, and predictive maintenance.|Edge devices must process and analyze data in real-time to ensure business continuity (manufacturing, transportation), save lives (healthcare), or save money (retail).| -|**Rancher**|Multi-cluster management enables easy containerized app deployment and management across stores in various geo locations​​.|Manages edge deployments, providing a central point of control for all the clusters running on the factory floor.|Helps manage the deployment of these applications across various devices and locations, ensuring uniformity and ease of management.|Manages edge deployments across various vehicles, providing a central point of control for all the clusters.|Centralized management of distributed containerized apps on the edge.| -|**Linkerd**|Guarantees secure, reliable communication between store POS systems and cloud-based central inventory management systems. Provides real-time inventory updates and transaction processing. Seamlessly merges multiple clusters into a single secure mesh.|Guarantees secure, reliable communication between sensors and the applications processing the data. Seamlessly merges multiple clusters into a single secure mesh.|Guarantees secure and reliable communication between patient devices and central health monitoring system. Seamlessly merges multiple clusters into a single secure mesh.|Guarantees secure and reliable communication between the onboard devices and the central fleet management system. Seamlessly merges multiple clusters into a single secure mesh.|Guarantees secure and reliable communication from the edge to the central processing and analysis system.| -|**RKE2**|For store backend systems, ensuring reliable and secure operation of the POS system.|Provides secure, reliable Kubernetes runtime for the central systems processing and analyzing the sensor data.|Provides secure, reliable Kubernetes runtime for central health monitoring systems, so patient data is processed accurately and securely.|Provides secure, reliable Kubernetes runtime for central fleet management systems, ensuring real-time fleet data is processed accurately and securely.|Provides secure, reliable Kubernetes runtime for the central system.| -|**K3s**|Efficiently deploy and manage containerized apps across multiple stores.|Run data processing apps at the edge, close to data source, reducing latency and network load​​.|Efficiently processes data at the edge, reducing latency and ensuring timely alerts in case of any health anomalies​.|Processes data at the edge, providing real-time insights and reducing network load​​.|Efficiently processes data at the edge.| - -**Edge Computing stack:** - -![](./2023-10-26-edge-computing-ref-architecture-linkerd/Buoyant-SUSE-Joint-reference-architecture-2.png) - -## Accelerate time-to-value with the Rancher and Buoyant teams - -As Edge computing use cases rapidly expand, the Rancher Prime, Linkerd, RKE2, and K3s toolkit offers a state-of-the-art, highly secure, and highly performant to these unique challenges. It provides organizations and developers with the tools and strategies they need to deliver fast, reliable performance and robust, secure communication between microservices and applications, all while efficiently managing and orchestrating Kubernetes clusters. - -Practical use cases showcase how these open source tools synergize to create robust, efficient, and flexible Edge computing solutions. From Retail industry POS systems to remote patient healthcare monitoring, this stack has clear advantages. An easy integration streamlines your Edge computing implementation, and enables you to process data at the Edge, while ensuring reliable and secure data transfer, reducing latency, and providing scalability and flexibility. - -As with any implementation, there are some challenges, however. The initial setup and configuration on the edge can be complex. A deep understanding of these tools and Kubernetes is required. If you need help and want to accelerate your time-to-value, the Buoyant and SUSE teams can help. Reach out, and let's chat! - -Contact the Buoyant team at: https://buoyant.io/contact - -Contact the SUSE team at: https://www.suse.com/contact/ - -To sum it up, combining **Rancher Prime**, **Linkerd**, **RKE2**, and **K3s** delivers a robust, observable, and easy-to-manage Edge computing solution. Organizations gain a powerful set of capabilities to improve edge computing performance and tackle the complexities and challenges of managing edge environments. As edge computing applications across industries continue to proliferate, these tools will play an increasingly critical role in shaping the future of how we process, manage, and utilize data in an increasingly decentralized world. diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index 19a91c90..00000000 --- a/blog/authors.yml +++ /dev/null @@ -1,23 +0,0 @@ -jimmy: - name: Jimmy Martin - title: Field Product Manager - url: https://github.com/jimmyrmartin - image_url: github.com/jimmyrmartin.png - -edu: - name: Eduardo Minguez - title: Sr. Edge Engineer - url: https://github.com/e-minquez - image_url: github.com/e-minguez.png - -alberto: - name: Alberto Morgante Medina - title: Sr. Edge Telco Engineer - url: https://github.com/alknopfler - image_url: github.com/alknopfler.png - -vince: - name: Vince Matev - title: Partner Alliance Manager - url: https://github.com/vmatev - image_url: github.com/vmatev.png \ No newline at end of file