a137d012a0
Add the support for new traffic pattern aware power control power management API. Example: ./l3fwd-power -l xxx -n 4 -w 0000:xx:00.0 -w 0000:xx:00.1 -- -p 0x3 -P --config="(0,0,xx),(1,0,xx)" --empty-poll="0,0,0" -l 14 -m 9 -h 1 Please Reference l3fwd-power document for full parameter usage The option "l", "m", "h" are used to set the power index for LOW, MED, HIGH power state. Only is useful after enable empty-poll --empty-poll="training_flag, med_threshold, high_threshold" The option training_flag is used to enable/disable training mode. The option med_threshold is used to indicate the empty poll threshold of modest state which is customized by user. The option high_threshold is used to indicate the empty poll threshold of busy state which is customized by user. Above three option default value is all 0. Once enable empty-poll. System will apply the default parameter if no other command line options are provided. If training mode is enabled, the user should ensure that no traffic is allowed to pass through the system. When training phase complete, the application transfer to normal operation System will start running with the modest power mode. If the traffic goes above 70%, then system will move to High power state. If the traffic drops below 30%, the system will fallback to the modest power state. Example code use master thread to monitoring worker thread busyness. The default timer resolution is 10ms. Signed-off-by: Liang Ma <liang.j.ma@intel.com> Reviewed-by: Lei Yao <lei.a.yao@intel.com> Acked-by: David Hunt <david.hunt@intel.com>
72 lines
1.8 KiB
Makefile
72 lines
1.8 KiB
Makefile
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright(c) 2010-2018 Intel Corporation
|
|
|
|
# binary name
|
|
APP = l3fwd-power
|
|
|
|
# all source are stored in SRCS-y
|
|
SRCS-y := main.c perf_core.c
|
|
|
|
# Build using pkg-config variables if possible
|
|
$(shell pkg-config --exists libdpdk)
|
|
ifeq ($(.SHELLSTATUS),0)
|
|
|
|
all: shared
|
|
.PHONY: shared static
|
|
shared: build/$(APP)-shared
|
|
ln -sf $(APP)-shared build/$(APP)
|
|
static: build/$(APP)-static
|
|
ln -sf $(APP)-static build/$(APP)
|
|
|
|
PC_FILE := $(shell pkg-config --path libdpdk)
|
|
CFLAGS += -O3 $(shell pkg-config --cflags libdpdk)
|
|
LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk)
|
|
LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
|
|
|
|
CFLAGS += -DALLOW_EXPERIMENTAL_API
|
|
|
|
build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
|
|
$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
|
|
|
|
build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build
|
|
$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC)
|
|
|
|
build:
|
|
@mkdir -p $@
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -f build/$(APP) build/$(APP)-static build/$(APP)-shared
|
|
rmdir --ignore-fail-on-non-empty build
|
|
|
|
else # Build using legacy build system
|
|
|
|
ifeq ($(RTE_SDK),)
|
|
$(error "Please define RTE_SDK environment variable")
|
|
endif
|
|
|
|
# Default target, can be overridden by command line or environment
|
|
RTE_TARGET ?= x86_64-native-linuxapp-gcc
|
|
|
|
include $(RTE_SDK)/mk/rte.vars.mk
|
|
|
|
ifneq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
|
|
$(info This application can only operate in a linuxapp environment, \
|
|
please change the definition of the RTE_TARGET environment variable)
|
|
all:
|
|
else
|
|
|
|
CFLAGS += -DALLOW_EXPERIMENTAL_API
|
|
CFLAGS += -O3
|
|
CFLAGS += $(WERROR_FLAGS)
|
|
|
|
# workaround for a gcc bug with noreturn attribute
|
|
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603
|
|
ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
|
|
CFLAGS_main.o += -Wno-return-type
|
|
endif
|
|
|
|
include $(RTE_SDK)/mk/rte.extapp.mk
|
|
endif
|
|
endif
|