aboutsummaryrefslogtreecommitdiff
path: root/seaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh
diff options
context:
space:
mode:
Diffstat (limited to 'seaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh')
-rwxr-xr-xseaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh253
1 files changed, 253 insertions, 0 deletions
diff --git a/seaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh b/seaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh
new file mode 100755
index 000000000..91e60ca7f
--- /dev/null
+++ b/seaweedfs-rdma-sidecar/docker/scripts/test-rdma.sh
@@ -0,0 +1,253 @@
+#!/bin/bash
+
+# Test RDMA functionality in simulation environment
+# This script validates that RDMA devices and libraries are working
+
+set -e
+
+echo "๐Ÿงช Testing RDMA simulation environment..."
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Function to print colored output
+print_status() {
+ local status="$1"
+ local message="$2"
+
+ case "$status" in
+ "success")
+ echo -e "${GREEN}โœ… $message${NC}"
+ ;;
+ "warning")
+ echo -e "${YELLOW}โš ๏ธ $message${NC}"
+ ;;
+ "error")
+ echo -e "${RED}โŒ $message${NC}"
+ ;;
+ "info")
+ echo -e "${BLUE}๐Ÿ“‹ $message${NC}"
+ ;;
+ esac
+}
+
+# Function to test RDMA devices
+test_rdma_devices() {
+ print_status "info" "Testing RDMA devices..."
+
+ # Check for InfiniBand/RDMA devices
+ if [ -d /sys/class/infiniband ]; then
+ local device_count=$(ls /sys/class/infiniband/ 2>/dev/null | wc -l)
+ if [ "$device_count" -gt 0 ]; then
+ print_status "success" "Found $device_count RDMA device(s)"
+
+ # List devices
+ for device in /sys/class/infiniband/*; do
+ if [ -d "$device" ]; then
+ local dev_name=$(basename "$device")
+ print_status "info" "Device: $dev_name"
+ fi
+ done
+ return 0
+ else
+ print_status "error" "No RDMA devices found"
+ return 1
+ fi
+ else
+ print_status "error" "/sys/class/infiniband directory not found"
+ return 1
+ fi
+}
+
+# Function to test libibverbs
+test_libibverbs() {
+ print_status "info" "Testing libibverbs..."
+
+ if command -v ibv_devinfo >/dev/null 2>&1; then
+ # Get device info
+ local device_info=$(ibv_devinfo 2>/dev/null)
+ if [ -n "$device_info" ]; then
+ print_status "success" "libibverbs working - devices detected"
+
+ # Show basic info
+ echo "$device_info" | head -5
+
+ # Test device capabilities
+ if echo "$device_info" | grep -q "transport.*InfiniBand\|transport.*Ethernet"; then
+ print_status "success" "RDMA transport layer detected"
+ else
+ print_status "warning" "Transport layer information unclear"
+ fi
+
+ return 0
+ else
+ print_status "error" "ibv_devinfo found no devices"
+ return 1
+ fi
+ else
+ print_status "error" "ibv_devinfo command not found"
+ return 1
+ fi
+}
+
+# Function to test UCX
+test_ucx() {
+ print_status "info" "Testing UCX..."
+
+ if command -v ucx_info >/dev/null 2>&1; then
+ # Test UCX device detection
+ local ucx_output=$(ucx_info -d 2>/dev/null)
+ if [ -n "$ucx_output" ]; then
+ print_status "success" "UCX detecting devices"
+
+ # Show UCX device info
+ echo "$ucx_output" | head -10
+
+ # Check for RDMA transports
+ if echo "$ucx_output" | grep -q "rc\|ud\|dc"; then
+ print_status "success" "UCX RDMA transports available"
+ else
+ print_status "warning" "UCX RDMA transports not detected"
+ fi
+
+ return 0
+ else
+ print_status "warning" "UCX not detecting devices"
+ return 1
+ fi
+ else
+ print_status "warning" "UCX tools not available"
+ return 1
+ fi
+}
+
+# Function to test RDMA CM (Connection Manager)
+test_rdma_cm() {
+ print_status "info" "Testing RDMA Connection Manager..."
+
+ # Check for RDMA CM device
+ if [ -e /dev/infiniband/rdma_cm ]; then
+ print_status "success" "RDMA CM device found"
+ return 0
+ else
+ print_status "warning" "RDMA CM device not found"
+ return 1
+ fi
+}
+
+# Function to test basic RDMA operations
+test_rdma_operations() {
+ print_status "info" "Testing basic RDMA operations..."
+
+ # Try to run a simple RDMA test if tools are available
+ if command -v ibv_rc_pingpong >/dev/null 2>&1; then
+ # This would need a client/server setup, so just check if binary exists
+ print_status "success" "RDMA test tools available (ibv_rc_pingpong)"
+ else
+ print_status "warning" "RDMA test tools not available"
+ fi
+
+ # Check for other useful RDMA utilities
+ local tools_found=0
+ for tool in ibv_asyncwatch ibv_read_lat ibv_write_lat; do
+ if command -v "$tool" >/dev/null 2>&1; then
+ tools_found=$((tools_found + 1))
+ fi
+ done
+
+ if [ "$tools_found" -gt 0 ]; then
+ print_status "success" "Found $tools_found additional RDMA test tools"
+ else
+ print_status "warning" "No additional RDMA test tools found"
+ fi
+}
+
+# Function to generate test summary
+generate_summary() {
+ echo ""
+ print_status "info" "RDMA Simulation Test Summary"
+ echo "======================================"
+
+ # Re-run key tests for summary
+ local devices_ok=0
+ local libibverbs_ok=0
+ local ucx_ok=0
+
+ if [ -d /sys/class/infiniband ] && [ "$(ls /sys/class/infiniband/ 2>/dev/null | wc -l)" -gt 0 ]; then
+ devices_ok=1
+ fi
+
+ if command -v ibv_devinfo >/dev/null 2>&1 && ibv_devinfo >/dev/null 2>&1; then
+ libibverbs_ok=1
+ fi
+
+ if command -v ucx_info >/dev/null 2>&1 && ucx_info -d >/dev/null 2>&1; then
+ ucx_ok=1
+ fi
+
+ echo "๐Ÿ“Š Test Results:"
+ [ "$devices_ok" -eq 1 ] && print_status "success" "RDMA Devices: PASS" || print_status "error" "RDMA Devices: FAIL"
+ [ "$libibverbs_ok" -eq 1 ] && print_status "success" "libibverbs: PASS" || print_status "error" "libibverbs: FAIL"
+ [ "$ucx_ok" -eq 1 ] && print_status "success" "UCX: PASS" || print_status "warning" "UCX: FAIL/WARNING"
+
+ echo ""
+ if [ "$devices_ok" -eq 1 ] && [ "$libibverbs_ok" -eq 1 ]; then
+ print_status "success" "RDMA simulation environment is ready! ๐ŸŽ‰"
+ echo ""
+ print_status "info" "You can now:"
+ echo " - Run RDMA applications"
+ echo " - Test SeaweedFS RDMA engine with real RDMA"
+ echo " - Use UCX for high-performance transfers"
+ return 0
+ else
+ print_status "error" "RDMA simulation setup needs attention"
+ echo ""
+ print_status "info" "Troubleshooting:"
+ echo " - Run setup script: sudo /opt/rdma-sim/setup-soft-roce.sh"
+ echo " - Check container privileges (--privileged flag)"
+ echo " - Verify kernel RDMA support"
+ return 1
+ fi
+}
+
+# Main test execution
+main() {
+ echo "๐Ÿš€ RDMA Simulation Test Suite"
+ echo "======================================"
+
+ # Run tests
+ test_rdma_devices || true
+ echo ""
+
+ test_libibverbs || true
+ echo ""
+
+ test_ucx || true
+ echo ""
+
+ test_rdma_cm || true
+ echo ""
+
+ test_rdma_operations || true
+ echo ""
+
+ # Generate summary
+ generate_summary
+}
+
+# Health check mode (for Docker healthcheck)
+if [ "$1" = "healthcheck" ]; then
+ # Quick health check - just verify devices exist
+ if [ -d /sys/class/infiniband ] && [ "$(ls /sys/class/infiniband/ 2>/dev/null | wc -l)" -gt 0 ]; then
+ exit 0
+ else
+ exit 1
+ fi
+fi
+
+# Execute main function
+main "$@"