diff --git a/multi_vms/run_all.sh b/multi_vms/run_all.sh index b0dd15248..3c16d27d8 100755 --- a/multi_vms/run_all.sh +++ b/multi_vms/run_all.sh @@ -5,16 +5,14 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" VIOMMU_MODES=("off" "nested" "nested-vFree") +# VIOMMU_MODES=("nested-vFree") # --- Experiment configurations --- # (num_vms, num_total_cores, num_active_cores, num_flows) # num_flows = num_active_cores per VM CONFIGS=( - "2 16 15 15" "2 16 16 16" - "4 8 7 7" "4 8 8 8" - "8 4 3 3" "8 4 4 4" ) diff --git a/multi_vms/run_vms.sh b/multi_vms/run_vms.sh index c6351153c..3f2568107 100755 --- a/multi_vms/run_vms.sh +++ b/multi_vms/run_vms.sh @@ -15,7 +15,7 @@ SKIP_RESET_HOST=0 # --- Hardcoded experiment config --- GIT_REPO="/home/schai/viommu" -GIT_BRANCH="many-vm-setup" +GIT_BRANCH="many-investigation" VM_SCRIPT="cd /home/schai/viommu/scripts/sosp24-experiments; ./many_vm_flows_exp.sh" # --- Host paths (this script runs ON the host) --- @@ -68,7 +68,7 @@ IP_BASE="192.168.122.100" VF_DRIVER="vfio-pci" # --- Timeouts --- -BOOT_TIMEOUT=120 # seconds to poll SSH +BOOT_TIMEOUT=240 # seconds to poll SSH NIC_WAIT=120 # seconds to wait for guest NIC # --- Guest NIC interface name (SR-IOV VF) --- diff --git a/scripts/many-vm-run-dctcp-tput-experiment.sh b/scripts/many-vm-run-dctcp-tput-experiment.sh index 87792b994..7bf95a466 100755 --- a/scripts/many-vm-run-dctcp-tput-experiment.sh +++ b/scripts/many-vm-run-dctcp-tput-experiment.sh @@ -28,6 +28,8 @@ CLIENT_SETUP_DIR_REL="utils" CLIENT_EXP_DIR_REL="utils/tcp" EBPF_GUEST_LOADER_REL="$GUEST_FandS_REL/tracing/guest_loader" +EBPF_HOST_LOADER="/home/lbalara/viommu/ManyVM-FandS/tracing/server_loader" #hardcoded for speed +HOST_SETUP_DIR="/home/lbalara/viommu/ManyVM-FandS/utils" # --- Remote Access (SSH) Configuration --- HOST_SSH_UNAME="lbalara" @@ -44,7 +46,8 @@ VM_ID="0" # Unique per-VM identifier for session names, ports, file prefixes NUM_RUNS=1 # Always 1 for multi-VM; coordination handled by host CORE_DURATION_S=20 # Duration for the main workload MLC_CORES="none" -EBPF_TRACING_ENABLED=0 +EBPF_TRACING_ENABLED=1 +EBPF_TRACING_HOST_ENABLED=0 COLLECT_MEM_STATS=0 # --- Guest (Server) Machine Configuration --- @@ -195,6 +198,12 @@ SCREEN_CLIENT_SESSION="client_session_vm${VM_ID}" SCREEN_CLIENT_LOGGING="logging_session_client_vm${VM_ID}" INIT_PORT=$((3000 + VM_ID * 100)) +# Only trace on vm0 +if [ "$VM_ID" -ne 0 ]; then + EBPF_TRACING_HOST_ENABLED=0 + EBPF_TRACING_ENABLED=0 +fi + GUEST_SETUP_DIR="${GUEST_HOME}/${GUEST_FandS_REL}/${GUEST_SETUP_DIR_REL}" GUEST_EXP_DIR="${GUEST_HOME}/${GUEST_FandS_REL}/${GUEST_EXP_DIR_REL}" GUEST_MLC_DIR="${GUEST_HOME}/${GUEST_MLC_DIR_REL}" @@ -320,6 +329,14 @@ cleanup() { sudo pkill -SIGINT -f "$guest_loader_basename" 2>/dev/null || true sudo pkill -9 -f "$guest_loader_basename" 2>/dev/null || true fi + if [ "$EBPF_TRACING_HOST_ENABLED" -eq 1 ]; then + local host_loader_basename + host_loader_basename=$(basename "$EBPF_HOST_LOADER") + $SSH_HOST_CMD \ + "sudo pkill -SIGINT -f '$host_loader_basename'; sleep 5; sudo pkill -9 -f '$host_loader_basename'; screen -S ebpf_host_tracer -X quit || true" + fi + sleep 5 + # Only kill THIS VM's screen sessions on the client (not other VMs') log_info "Terminating client screen sessions: $SCREEN_CLIENT_SESSION, $SCREEN_CLIENT_LOGGING" @@ -406,6 +423,7 @@ log_info "############################################################" # Files within the client dir also get vm prefix for safety in case the # caller passes a shared EXP_NAME. current_guest_reports_dir="${GUEST_SETUP_DIR}/reports/${EXP_NAME}-RUN-${j}" +host_reports_dir_remote="${HOST_SETUP_DIR}/reports/${EXP_NAME}-RUN-${j}" client_reports_dir_remote="${CLIENT_SETUP_DIR}/reports/${EXP_NAME}-RUN-${j}" perf_guest_data_file="${current_guest_reports_dir}/perf_guest_cpu.data" @@ -415,8 +433,10 @@ guest_server_app_log_file="${current_guest_reports_dir}/server_app.log" guest_mlc_log_file="${current_guest_reports_dir}/mlc.log" client_app_log_file="${current_guest_reports_dir}/client_app.log" client_app_log_file_remote="${client_reports_dir_remote}/client_app.log" +ebpf_host_stats="${host_reports_dir_remote}/ebpf_host_stats.csv" sudo mkdir -p "$current_guest_reports_dir" +$SSH_HOST_CMD "mkdir -p '$host_reports_dir_remote'" # --- Pre-run cleanup --- cleanup @@ -470,16 +490,25 @@ $SSH_CLIENT_CMD "screen -dmS $SCREEN_CLIENT_SESSION sudo bash -c \"$client_cmd\" # --- Warmup Phase --- log_info "Warming up experiment (120 seconds)..." -progress_bar 120 2 +progress_bar 116 2 + +if [ "$EBPF_TRACING_HOST_ENABLED" -eq 1 ]; then + log_info "Starting HOST eBPF tracer on $HOST_IP..." + host_loader_cmd="sudo taskset -c 33 $EBPF_HOST_LOADER -o $ebpf_host_stats" + $SSH_HOST_CMD "screen -dmS ebpf_host_tracer sudo bash -c \"$host_loader_cmd\"" +fi +sleep 4 # Allow eBPF loaders to initialize # --- Start Guest eBPF Tracers (if enabled) --- if [ "$EBPF_TRACING_ENABLED" -eq 1 ]; then log_info "Starting GUEST eBPF tracer..." echo "current_time: $(date) $(date +%s)" - sudo taskset -c 13 "$EBPF_GUEST_LOADER" -d "$CORE_DURATION_S" -o "$ebpf_guest_stats" & - sleep 2 + sudo taskset -c 0 "$EBPF_GUEST_LOADER" -d "$CORE_DURATION_S" -o "$ebpf_guest_stats" & fi +# Sleep outside so all VMs nearly in sync +sleep 2 + # --- Guest Ftrace Setup --- log_info "Configuring GUEST ftrace (Buffer: ${FTRACE_BUFFER_SIZE_KB}KB, Overwrite: ${FTRACE_OVERWRITE_ON_FULL})..." sudo sh -c "echo $FTRACE_BUFFER_SIZE_KB > /sys/kernel/debug/tracing/buffer_size_kb" @@ -532,6 +561,10 @@ if [ "$EBPF_TRACING_ENABLED" -eq 1 ]; then log_info "SIGINT sent to GUEST eBPF loader." || \ log_info "WARN: GUEST eBPF loader process not found or SIGINT failed." fi +if [ "$EBPF_TRACING_HOST_ENABLED" -eq 1 ]; then + host_loader_basename=$(basename "$EBPF_HOST_LOADER") + $SSH_HOST_CMD "sudo pkill -SIGINT -f '$host_loader_basename'" +fi # --- Transfer Report Files from Client --- # Files on the client are in a dir named after EXP_NAME (already VM-specific). diff --git a/scripts/sosp24-experiments/many_vm_flows_exp.sh b/scripts/sosp24-experiments/many_vm_flows_exp.sh index 84f57d696..01c61be00 100755 --- a/scripts/sosp24-experiments/many_vm_flows_exp.sh +++ b/scripts/sosp24-experiments/many_vm_flows_exp.sh @@ -165,6 +165,9 @@ for z in $run_list; do # --- SCP results back to host --- echo "Copying results to host..." local_report_dir="../utils/reports/$EXP_NAME" + local_run_dir="${local_report_dir}-RUN-0" + + sudo chmod -R a+rw $local_run_dir $SSH_HOST_CMD "mkdir -p ${HOST_RESULTS_DIR}/${EXP_NAME}" @@ -172,6 +175,10 @@ for z in $run_list; do "$local_report_dir"/* \ "${HOST_SSH_UNAME}@${HOST_IP}:${HOST_RESULTS_DIR}/${EXP_NAME}/" + $SCP_HOST_CMD -r \ + "$local_run_dir"/* \ + "${HOST_SSH_UNAME}@${HOST_IP}:${HOST_RESULTS_DIR}/${EXP_NAME}-RUN-0/" + echo "Results copied to ${HOST_SSH_UNAME}@${HOST_IP}:${HOST_RESULTS_DIR}/${EXP_NAME}/" done diff --git a/tracing/Makefile b/tracing/Makefile index 22f2e3970..01d79040c 100644 --- a/tracing/Makefile +++ b/tracing/Makefile @@ -104,9 +104,9 @@ reader: $(READER_APP) clean: @echo "Cleaning up generated files..." @rm -f $(HOST_BPF_OBJ) $(HOST_BPF_SKEL) \ - $(SERVER_BPF_OBJ) $(SERVER_BPF_SKEL) \ + $(SERVER_BPF_OBJ) $(SERVER_BPF_SKEL) \ $(GUEST_BPF_OBJ) $(GUEST_BPF_SKEL) \ - $(HOST_LOADER_APP) $(GUEST_LOADER_APP) \ + $(HOST_LOADER_APP) $(GUEST_LOADER_APP) $(SERVER_LOADER_APP)\ $(READER_APP) \ vmlinux.h diff --git a/tracing/guest_loader.c b/tracing/guest_loader.c index 8a7d2ab60..5c73a804f 100644 --- a/tracing/guest_loader.c +++ b/tracing/guest_loader.c @@ -104,8 +104,8 @@ probe_def_t probes_to_attach[] = { {"kprobe_cache_tag_flush_range_np", "cache_tag_flush_range_np", PROBE_TYPE_KPROBE, CACHE_TAG_FLUSH_RANGE_NP,NULL}, {"kretprobe_cache_tag_flush_range_np", "cache_tag_flush_range_np", PROBE_TYPE_KRETPROBE, CACHE_TAG_FLUSH_RANGE_NP,NULL}, // iommu_flush_write_buffer - {"kprobe_iommu_flush_write_buffer", "iommu_flush_write_buffer", PROBE_TYPE_KPROBE, IOMMU_FLUSH_WRITE_BUFFER,NULL}, - {"kretprobe_iommu_flush_write_buffer", "iommu_flush_write_buffer", PROBE_TYPE_KRETPROBE, IOMMU_FLUSH_WRITE_BUFFER,NULL}, + // {"kprobe_iommu_flush_write_buffer", "iommu_flush_write_buffer", PROBE_TYPE_KPROBE, IOMMU_FLUSH_WRITE_BUFFER,NULL}, + // {"kretprobe_iommu_flush_write_buffer", "iommu_flush_write_buffer", PROBE_TYPE_KRETPROBE, IOMMU_FLUSH_WRITE_BUFFER,NULL}, {"kprobe_iommu_unmap", "iommu_unmap", PROBE_TYPE_KPROBE, IOMMU_UNMAP,NULL}, {"kretprobe_iommu_unmap", "iommu_unmap", PROBE_TYPE_KRETPROBE, IOMMU_UNMAP,NULL}, {"kprobe___iommu_unmap", "__iommu_unmap", PROBE_TYPE_KPROBE, IOMMU_UNMAP_INTERNAL,NULL}, @@ -117,41 +117,41 @@ probe_def_t probes_to_attach[] = { {"kretprobe_cache_tag_flush_range", "cache_tag_flush_range", PROBE_TYPE_KRETPROBE, CACHE_TAG_FLUSH_RANGE,NULL}, {"kprobe_cache_tag_flush_range_call", "cache_tag_flush_range_call", PROBE_TYPE_KPROBE, CACHE_TAG_FLUSH_RANGE_CALL,NULL}, {"kretprobe_cache_tag_flush_range_call", "cache_tag_flush_range_call", PROBE_TYPE_KRETPROBE, CACHE_TAG_FLUSH_RANGE_CALL,NULL}, - {"kprobe_page_pool_alloc_netmem", "page_pool_alloc_netmem", PROBE_TYPE_KPROBE, PAGE_POOL_ALLOC,NULL}, - {"kretprobe_page_pool_alloc_netmem", "page_pool_alloc_netmem", PROBE_TYPE_KRETPROBE, PAGE_POOL_ALLOC,NULL}, - {"kprobe___page_pool_alloc_pages_slow", "__page_pool_alloc_pages_slow", PROBE_TYPE_KPROBE, PAGE_POOL_SLOW,NULL}, - {"kretprobe___page_pool_alloc_pages_slow", "__page_pool_alloc_pages_slow", PROBE_TYPE_KRETPROBE, PAGE_POOL_SLOW,NULL}, + // {"kprobe_page_pool_alloc_netmem", "page_pool_alloc_netmem", PROBE_TYPE_KPROBE, PAGE_POOL_ALLOC,NULL}, + // {"kretprobe_page_pool_alloc_netmem", "page_pool_alloc_netmem", PROBE_TYPE_KRETPROBE, PAGE_POOL_ALLOC,NULL}, + // {"kprobe___page_pool_alloc_pages_slow", "__page_pool_alloc_pages_slow", PROBE_TYPE_KPROBE, PAGE_POOL_SLOW,NULL}, + // {"kretprobe___page_pool_alloc_pages_slow", "__page_pool_alloc_pages_slow", PROBE_TYPE_KRETPROBE, PAGE_POOL_SLOW,NULL}, // qi_batch_flush_descs {"kprobe_qi_batch_flush_descs", "qi_batch_flush_descs", PROBE_TYPE_KPROBE, QI_BATCH_FLUSH_DESCS,NULL}, {"kretprobe_qi_batch_flush_descs", "qi_batch_flush_descs", PROBE_TYPE_KRETPROBE, QI_BATCH_FLUSH_DESCS,NULL}, {"kprobe_qi_submit_sync", "qi_submit_sync", PROBE_TYPE_KPROBE, QI_SUBMIT_SYNC,NULL}, {"kretprobe_qi_submit_sync", "qi_submit_sync", PROBE_TYPE_KRETPROBE, QI_SUBMIT_SYNC,NULL}, - {"kprobe_page_pool_dma_map", "page_pool_dma_map", PROBE_TYPE_KPROBE, PAGE_POOL_DMA_MAP,NULL}, - {"kretprobe_page_pool_dma_map", "page_pool_dma_map", PROBE_TYPE_KRETPROBE, PAGE_POOL_DMA_MAP,NULL}, - {"kprobe_trace_mlx5e_tx_dma_unmap_ktls_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_ktls_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_TX_DMA_UNMAP_KTLS_HOOK,"mlx5_core"}, - {"kretprobe_trace_mlx5e_tx_dma_unmap_ktls_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_ktls_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_TX_DMA_UNMAP_KTLS_HOOK,"mlx5_core"}, - {"kprobe_trace_mlx5e_dma_push_build_single_hook", "mlx5_core:trace_mlx5e_dma_push_build_single_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_BUILD_SINGLE_HOOK,"mlx5_core"}, - {"kretprobe_trace_mlx5e_dma_push_build_single_hook", "mlx5_core:trace_mlx5e_dma_push_build_single_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_BUILD_SINGLE_HOOK,"mlx5_core"}, - {"kprobe_trace_mlx5e_dma_push_xmit_single_hook", "mlx5_core:trace_mlx5e_dma_push_xmit_single_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_XMIT_SINGLE_HOOK,"mlx5_core"}, - {"kretprobe_trace_mlx5e_dma_push_xmit_single_hook", "mlx5_core:trace_mlx5e_dma_push_xmit_single_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_XMIT_SINGLE_HOOK,"mlx5_core"}, - {"kprobe_trace_mlx5e_dma_push_page_hook", "mlx5_core:trace_mlx5e_dma_push_page_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_PAGE_HOOK,"mlx5_core"}, - {"kretprobe_trace_mlx5e_dma_push_page_hook", "mlx5_core:trace_mlx5e_dma_push_page_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_PAGE_HOOK,"mlx5_core"}, - {"kprobe_trace_mlx5e_tx_dma_unmap_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_TX_DMA_UNMAP_HOOK,"mlx5_core"}, - {"kretprobe_trace_mlx5e_tx_dma_unmap_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_TX_DMA_UNMAP_HOOK,"mlx5_core"}, - {"kprobe_trace_qi_submit_sync_cs", "trace_qi_submit_sync_cs", PROBE_TYPE_KPROBE, TRACE_QI_SUBMIT_SYNC_CS,NULL}, - {"kretprobe_trace_qi_submit_sync_cs", "trace_qi_submit_sync_cs", PROBE_TYPE_KRETPROBE, TRACE_QI_SUBMIT_SYNC_CS,NULL}, - {"kprobe_trace_qi_submit_sync_lock_wrapper", "trace_qi_submit_sync_lock_wrapper", PROBE_TYPE_KPROBE, TRACE_QI_SUBMIT_SYNC_LOCK_WRAPPER,NULL}, - {"kretprobe_trace_qi_submit_sync_lock_wrapper", "trace_qi_submit_sync_lock_wrapper", PROBE_TYPE_KRETPROBE, TRACE_QI_SUBMIT_SYNC_LOCK_WRAPPER,NULL}, - {"kprobe_trace_iommu_flush_write_buffer_cs", "trace_iommu_flush_write_buffer_cs", PROBE_TYPE_KPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_CS,NULL}, - {"kretprobe_trace_iommu_flush_write_buffer_cs", "trace_iommu_flush_write_buffer_cs", PROBE_TYPE_KRETPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_CS,NULL}, - {"kprobe_trace_iommu_flush_write_buffer_lock_wrapper", "trace_iommu_flush_write_buffer_lock_wrapper", PROBE_TYPE_KPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_LOCK_WRAPPER,NULL}, - {"kretprobe_trace_iommu_flush_write_buffer_lock_wrapper", "trace_iommu_flush_write_buffer_lock_wrapper", PROBE_TYPE_KRETPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_LOCK_WRAPPER,NULL}, - {"kprobe_page_pool_return_page", "page_pool_return_page", PROBE_TYPE_KPROBE, PAGE_POOL_RETURN_PAGE,NULL}, - {"kretprobe_page_pool_return_page", "page_pool_return_page", PROBE_TYPE_KRETPROBE, PAGE_POOL_RETURN_PAGE,NULL}, - {"kprobe_page_pool_put_unrefed_netmem", "page_pool_put_unrefed_netmem", PROBE_TYPE_KPROBE, PAGE_POOL_PUT_NETMEM,NULL}, - {"kretprobe_page_pool_put_unrefed_netmem", "page_pool_put_unrefed_netmem", PROBE_TYPE_KRETPROBE, PAGE_POOL_PUT_NETMEM,NULL}, - {"kprobe_page_pool_put_unrefed_page", "page_pool_put_unrefed_page", PROBE_TYPE_KPROBE, PAGE_POOL_PUT_PAGE,NULL}, - {"kretprobe_page_pool_put_unrefed_page", "page_pool_put_unrefed_page", PROBE_TYPE_KRETPROBE, PAGE_POOL_PUT_PAGE,NULL}, + // {"kprobe_page_pool_dma_map", "page_pool_dma_map", PROBE_TYPE_KPROBE, PAGE_POOL_DMA_MAP,NULL}, + // {"kretprobe_page_pool_dma_map", "page_pool_dma_map", PROBE_TYPE_KRETPROBE, PAGE_POOL_DMA_MAP,NULL}, + // {"kprobe_trace_mlx5e_tx_dma_unmap_ktls_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_ktls_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_TX_DMA_UNMAP_KTLS_HOOK,"mlx5_core"}, + // {"kretprobe_trace_mlx5e_tx_dma_unmap_ktls_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_ktls_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_TX_DMA_UNMAP_KTLS_HOOK,"mlx5_core"}, + // {"kprobe_trace_mlx5e_dma_push_build_single_hook", "mlx5_core:trace_mlx5e_dma_push_build_single_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_BUILD_SINGLE_HOOK,"mlx5_core"}, + // {"kretprobe_trace_mlx5e_dma_push_build_single_hook", "mlx5_core:trace_mlx5e_dma_push_build_single_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_BUILD_SINGLE_HOOK,"mlx5_core"}, + // {"kprobe_trace_mlx5e_dma_push_xmit_single_hook", "mlx5_core:trace_mlx5e_dma_push_xmit_single_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_XMIT_SINGLE_HOOK,"mlx5_core"}, + // {"kretprobe_trace_mlx5e_dma_push_xmit_single_hook", "mlx5_core:trace_mlx5e_dma_push_xmit_single_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_XMIT_SINGLE_HOOK,"mlx5_core"}, + // {"kprobe_trace_mlx5e_dma_push_page_hook", "mlx5_core:trace_mlx5e_dma_push_page_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_DMA_PUSH_PAGE_HOOK,"mlx5_core"}, + // {"kretprobe_trace_mlx5e_dma_push_page_hook", "mlx5_core:trace_mlx5e_dma_push_page_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_DMA_PUSH_PAGE_HOOK,"mlx5_core"}, + // {"kprobe_trace_mlx5e_tx_dma_unmap_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_hook", PROBE_TYPE_KPROBE, TRACE_MLX5E_TX_DMA_UNMAP_HOOK,"mlx5_core"}, + // {"kretprobe_trace_mlx5e_tx_dma_unmap_hook", "mlx5_core:trace_mlx5e_tx_dma_unmap_hook", PROBE_TYPE_KRETPROBE, TRACE_MLX5E_TX_DMA_UNMAP_HOOK,"mlx5_core"}, + // {"kprobe_trace_qi_submit_sync_cs", "trace_qi_submit_sync_cs", PROBE_TYPE_KPROBE, TRACE_QI_SUBMIT_SYNC_CS,NULL}, + // {"kretprobe_trace_qi_submit_sync_cs", "trace_qi_submit_sync_cs", PROBE_TYPE_KRETPROBE, TRACE_QI_SUBMIT_SYNC_CS,NULL}, + // {"kprobe_trace_qi_submit_sync_lock_wrapper", "trace_qi_submit_sync_lock_wrapper", PROBE_TYPE_KPROBE, TRACE_QI_SUBMIT_SYNC_LOCK_WRAPPER,NULL}, + // {"kretprobe_trace_qi_submit_sync_lock_wrapper", "trace_qi_submit_sync_lock_wrapper", PROBE_TYPE_KRETPROBE, TRACE_QI_SUBMIT_SYNC_LOCK_WRAPPER,NULL}, + // {"kprobe_trace_iommu_flush_write_buffer_cs", "trace_iommu_flush_write_buffer_cs", PROBE_TYPE_KPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_CS,NULL}, + // {"kretprobe_trace_iommu_flush_write_buffer_cs", "trace_iommu_flush_write_buffer_cs", PROBE_TYPE_KRETPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_CS,NULL}, + // {"kprobe_trace_iommu_flush_write_buffer_lock_wrapper", "trace_iommu_flush_write_buffer_lock_wrapper", PROBE_TYPE_KPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_LOCK_WRAPPER,NULL}, + // {"kretprobe_trace_iommu_flush_write_buffer_lock_wrapper", "trace_iommu_flush_write_buffer_lock_wrapper", PROBE_TYPE_KRETPROBE, TRACE_IOMMU_FLUSH_WRITE_BUFFER_LOCK_WRAPPER,NULL}, + // {"kprobe_page_pool_return_page", "page_pool_return_page", PROBE_TYPE_KPROBE, PAGE_POOL_RETURN_PAGE,NULL}, + // {"kretprobe_page_pool_return_page", "page_pool_return_page", PROBE_TYPE_KRETPROBE, PAGE_POOL_RETURN_PAGE,NULL}, + // {"kprobe_page_pool_put_unrefed_netmem", "page_pool_put_unrefed_netmem", PROBE_TYPE_KPROBE, PAGE_POOL_PUT_NETMEM,NULL}, + // {"kretprobe_page_pool_put_unrefed_netmem", "page_pool_put_unrefed_netmem", PROBE_TYPE_KRETPROBE, PAGE_POOL_PUT_NETMEM,NULL}, + // {"kprobe_page_pool_put_unrefed_page", "page_pool_put_unrefed_page", PROBE_TYPE_KPROBE, PAGE_POOL_PUT_PAGE,NULL}, + // {"kretprobe_page_pool_put_unrefed_page", "page_pool_put_unrefed_page", PROBE_TYPE_KRETPROBE, PAGE_POOL_PUT_PAGE,NULL}, // {"kprobe_writel_wrapper", "writel_wrapper", PROBE_TYPE_KPROBE, WRITEL_WRAPPER,NULL}, // {"kretprobe_writel_wrapper", "writel_wrapper", PROBE_TYPE_KRETPROBE, WRITEL_WRAPPER,NULL}, // {"kprobe_after_writel_while_wrapper", "after_writel_while_wrapper", PROBE_TYPE_KPROBE, AFTER_WRITEL_WHILE_WRAPPER,NULL}, @@ -165,16 +165,18 @@ probe_def_t probes_to_attach[] = { {"kprobe___iommu_dma_unmap", "__iommu_dma_unmap", PROBE_TYPE_KPROBE, __IOMMU_DMA_UNMAP, NULL}, {"kretprobe___iommu_dma_unmap", "__iommu_dma_unmap", PROBE_TYPE_KRETPROBE, __IOMMU_DMA_UNMAP, NULL}, // --- Additions for count functions --- - {"kprobe_count_mlx5e_alloc_rx_mpwqe_perpage_hook", "mlx5_core:count_mlx5e_alloc_rx_mpwqe_perpage_hook", PROBE_TYPE_KPROBE, COUNT_MLX5E_RX_MPWQE_PER_PAGE,"mlx5_core"}, - {"kretprobe_count_mlx5e_alloc_rx_mpwqe_perpage_hook", "mlx5_core:count_mlx5e_alloc_rx_mpwqe_perpage_hook", PROBE_TYPE_KRETPROBE, COUNT_MLX5E_RX_MPWQE_PER_PAGE,"mlx5_core"}, - {"kprobe_count_page_pool_release_page_dma_hook", "count_page_pool_release_page_dma_hook", PROBE_TYPE_KPROBE, COUNT_PAGE_POOL_RELEASE, NULL}, - {"kretprobe_count_page_pool_release_page_dma_hook", "count_page_pool_release_page_dma_hook", PROBE_TYPE_KRETPROBE, COUNT_PAGE_POOL_RELEASE, NULL}, - {"kprobe_count_page_pool_recycle_in_cache_hook", "count_page_pool_recycle_in_cache_hook", PROBE_TYPE_KPROBE, COUNT_PAGE_POOL_RECYCLE, NULL}, - {"kretprobe_count_page_pool_recycle_in_cache_hook", "count_page_pool_recycle_in_cache_hook", PROBE_TYPE_KRETPROBE, COUNT_PAGE_POOL_RECYCLE, NULL}, + // {"kprobe_count_mlx5e_alloc_rx_mpwqe_perpage_hook", "mlx5_core:count_mlx5e_alloc_rx_mpwqe_perpage_hook", PROBE_TYPE_KPROBE, COUNT_MLX5E_RX_MPWQE_PER_PAGE,"mlx5_core"}, + // {"kretprobe_count_mlx5e_alloc_rx_mpwqe_perpage_hook", "mlx5_core:count_mlx5e_alloc_rx_mpwqe_perpage_hook", PROBE_TYPE_KRETPROBE, COUNT_MLX5E_RX_MPWQE_PER_PAGE,"mlx5_core"}, + // {"kprobe_count_page_pool_release_page_dma_hook", "count_page_pool_release_page_dma_hook", PROBE_TYPE_KPROBE, COUNT_PAGE_POOL_RELEASE, NULL}, + // {"kretprobe_count_page_pool_release_page_dma_hook", "count_page_pool_release_page_dma_hook", PROBE_TYPE_KRETPROBE, COUNT_PAGE_POOL_RELEASE, NULL}, + // {"kprobe_count_page_pool_recycle_in_cache_hook", "count_page_pool_recycle_in_cache_hook", PROBE_TYPE_KPROBE, COUNT_PAGE_POOL_RECYCLE, NULL}, + // {"kretprobe_count_page_pool_recycle_in_cache_hook", "count_page_pool_recycle_in_cache_hook", PROBE_TYPE_KRETPROBE, COUNT_PAGE_POOL_RECYCLE, NULL}, {"kprobe_sys_flush_handler", "sys_flush_handler", PROBE_TYPE_KPROBE, SYS_FLUSH_HANDLER, NULL}, {"kretprobe_sys_flush_handler", "sys_flush_handler", PROBE_TYPE_KRETPROBE, SYS_FLUSH_HANDLER, NULL}, {"kprobe___sys_flush_handler", "__sys_flush_handler", PROBE_TYPE_KPROBE, __SYS_FLUSH_HANDLER, NULL}, {"kretprobe___sys_flush_handler", "__sys_flush_handler", PROBE_TYPE_KRETPROBE, __SYS_FLUSH_HANDLER, NULL}, + {"kprobe_sk_stream_wait_memory", "sk_stream_wait_memory", PROBE_TYPE_KPROBE, SK_STREAM_WAIT_MEMORY, NULL}, + {"kretprobe_sk_stream_wait_memory", "sk_stream_wait_memory", PROBE_TYPE_KRETPROBE, SK_STREAM_WAIT_MEMORY, NULL}, }; const int num_probes_to_attach = sizeof(probes_to_attach) / sizeof(probes_to_attach[0]); struct bpf_link *attached_links[MAX_PROBES]; @@ -266,6 +268,8 @@ const char *func_name_to_string(enum FunctionName fn) return "sys_flush_handler"; case __SYS_FLUSH_HANDLER: return "__sys_flush_handler"; + case SK_STREAM_WAIT_MEMORY: + return "sk_stream_wait_memory"; default: return "UnknownFunction"; } diff --git a/tracing/guest_tracer.bpf.c b/tracing/guest_tracer.bpf.c index 465bf5a64..3876b592d 100644 --- a/tracing/guest_tracer.bpf.c +++ b/tracing/guest_tracer.bpf.c @@ -604,3 +604,15 @@ int BPF_KRETPROBE(kretprobe___sys_flush_handler, void *ret) { return _bpf_utils_trace_func_exit(ctx, GUEST, false); } + +SEC("kprobe/sk_stream_wait_memory") +int BPF_KPROBE(kprobe_sk_stream_wait_memory, void *ret) +{ + return _bpf_utils_trace_func_entry(ctx); +} + +SEC("kretprobe/sk_stream_wait_memory") +int BPF_KRETPROBE(kretprobe_sk_stream_wait_memory, void *ret) +{ + return _bpf_utils_trace_func_exit(ctx, GUEST, false); +} \ No newline at end of file diff --git a/tracing/server_loader b/tracing/server_loader deleted file mode 100755 index 1dd855f71..000000000 Binary files a/tracing/server_loader and /dev/null differ diff --git a/tracing/tracing_utils.h b/tracing/tracing_utils.h index 8467e14e9..c6c1a23e5 100644 --- a/tracing/tracing_utils.h +++ b/tracing/tracing_utils.h @@ -62,6 +62,7 @@ enum FunctionName IOMMU_DMA_FREE_IOVA_CALL, __IOMMU_DMA_UNMAP_CALL, __IOMMU_DMA_UNMAP, + SK_STREAM_WAIT_MEMORY, TRACE_FUNCS_END, // Marks the end of trace functions // --- Section for Simple Frequency Counting ---