perfkitbenchmarker/linux_packages/dpdk_pktgen.py (32 lines of code) (raw):
# Copyright 2025 PerfKitBenchmarker Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Module containing dpdk-pktgen installation."""
DPDK_PKTGEN_GIT_REPO = 'https://github.com/pktgen/Pktgen-DPDK'
DPDK_PKTGEN_GIT_REPO_DIR = 'Pktgen-DPDK'
DPDK_PKTGEN_GIT_REPO_TAG = '0e3a9c50daedccc7a83597f187d96288264edac0'
def _Install(vm):
"""Installs dpdk-pktgen on the VM."""
vm.Install('dpdk')
vm.RobustRemoteCommand(f'git clone {DPDK_PKTGEN_GIT_REPO}')
vm.RobustRemoteCommand(
f'cd {DPDK_PKTGEN_GIT_REPO_DIR} && git checkout'
f' {DPDK_PKTGEN_GIT_REPO_TAG}'
)
# AWS ENA needs explicit IPv4/UDP checksum offloading validation.
# AWS ENA does not expose link rate, so hard-code PPS.
vm.PushDataFile(
'dpdk_pktgen/pktgen.patch',
f'{DPDK_PKTGEN_GIT_REPO_DIR}/pktgen.patch',
)
vm.RemoteCommand(
f'cd {DPDK_PKTGEN_GIT_REPO_DIR} && patch -l -p1 < pktgen.patch'
)
vm.RemoteCommand(f'cd {DPDK_PKTGEN_GIT_REPO_DIR} && make')
def AptInstall(vm):
"""Install dependencies on APT-based systems."""
vm.InstallPackages('libpcap-dev libbsd-dev')
_Install(vm)
def YumInstall(vm):
"""Install dependencies on YUM-based systems."""
vm.InstallPackages(
'make gcc kernel-devel elfutils-libelf-devel patch'
' libasan libpcap-devel libbsd-devel numactl-devel glibc-devel'
' readline-devel pciutils git gcc-c++ autoconf automake libtool wget'
' python ncurses-devel zlib-devel libjpeg-devel openssl-devel'
' sqlite-devel libcurl-devel libxml2-devel libidn-devel e2fsprogs-devel'
' pcre-devel speex-devel ldns-devel libedit-devel opus-devel libvpx-devel'
' unbound-devel libuuid-devel libsndfile-devel'
)
_Install(vm)