You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							269 lines
						
					
					
						
							7.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							269 lines
						
					
					
						
							7.6 KiB
						
					
					
				| #!/bin/bash | |
|  | |
| # UCX Information and Testing Script | |
| # Provides detailed information about UCX configuration and capabilities | |
| 
 | |
| set -e | |
| 
 | |
| echo "📋 UCX (Unified Communication X) Information" | |
| echo "=============================================" | |
| 
 | |
| # Colors for output | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| BLUE='\033[0;34m' | |
| NC='\033[0m' # No Color | |
| 
 | |
| print_section() { | |
|     echo -e "\n${BLUE}📌 $1${NC}" | |
|     echo "----------------------------------------" | |
| } | |
| 
 | |
| print_info() { | |
|     echo -e "${GREEN}ℹ️  $1${NC}" | |
| } | |
| 
 | |
| print_warning() { | |
|     echo -e "${YELLOW}⚠️  $1${NC}" | |
| } | |
| 
 | |
| # Function to check UCX installation | |
| check_ucx_installation() { | |
|     print_section "UCX Installation Status" | |
|      | |
|     if command -v ucx_info >/dev/null 2>&1; then | |
|         print_info "UCX tools are installed" | |
|          | |
|         # Get UCX version | |
|         if ucx_info -v >/dev/null 2>&1; then | |
|             local version=$(ucx_info -v 2>/dev/null | head -1) | |
|             print_info "Version: $version" | |
|         fi | |
|     else | |
|         print_warning "UCX tools not found" | |
|         echo "Install with: apt-get install ucx-tools libucx-dev" | |
|         return 1 | |
|     fi | |
|      | |
|     # Check UCX libraries | |
|     local libs_found=0 | |
|     for lib in libucp.so libucs.so libuct.so; do | |
|         if ldconfig -p | grep -q "$lib"; then | |
|             libs_found=$((libs_found + 1)) | |
|         fi | |
|     done | |
|      | |
|     if [ "$libs_found" -eq 3 ]; then | |
|         print_info "All UCX libraries found (ucp, ucs, uct)" | |
|     else | |
|         print_warning "Some UCX libraries may be missing ($libs_found/3 found)" | |
|     fi | |
| } | |
| 
 | |
| # Function to show UCX device information | |
| show_ucx_devices() { | |
|     print_section "UCX Transport Devices" | |
|      | |
|     if command -v ucx_info >/dev/null 2>&1; then | |
|         echo "Available UCX transports and devices:" | |
|         ucx_info -d 2>/dev/null || { | |
|             print_warning "Failed to get UCX device information" | |
|             return 1 | |
|         } | |
|     else | |
|         print_warning "ucx_info command not available" | |
|         return 1 | |
|     fi | |
| } | |
| 
 | |
| # Function to show UCX configuration | |
| show_ucx_config() { | |
|     print_section "UCX Configuration" | |
|      | |
|     if command -v ucx_info >/dev/null 2>&1; then | |
|         echo "UCX configuration parameters:" | |
|         ucx_info -c 2>/dev/null | head -20 || { | |
|             print_warning "Failed to get UCX configuration" | |
|             return 1 | |
|         } | |
|          | |
|         echo "" | |
|         print_info "Key UCX environment variables:" | |
|         echo "  UCX_TLS - Transport layers to use" | |
|         echo "  UCX_NET_DEVICES - Network devices to use" | |
|         echo "  UCX_LOG_LEVEL - Logging level (error, warn, info, debug, trace)" | |
|         echo "  UCX_MEMTYPE_CACHE - Memory type caching (y/n)" | |
|     else | |
|         print_warning "ucx_info command not available" | |
|         return 1 | |
|     fi | |
| } | |
| 
 | |
| # Function to test UCX capabilities | |
| test_ucx_capabilities() { | |
|     print_section "UCX Capability Testing" | |
|      | |
|     if command -v ucx_info >/dev/null 2>&1; then | |
|         print_info "Testing UCX transport capabilities..." | |
|          | |
|         # Check for RDMA transports | |
|         local ucx_transports=$(ucx_info -d 2>/dev/null | grep -i "transport\|tl:" || true) | |
|          | |
|         if echo "$ucx_transports" | grep -q "rc\|dc\|ud"; then | |
|             print_info "✅ RDMA transports detected (RC/DC/UD)" | |
|         else | |
|             print_warning "No RDMA transports detected" | |
|         fi | |
|          | |
|         if echo "$ucx_transports" | grep -q "tcp"; then | |
|             print_info "✅ TCP transport available" | |
|         else | |
|             print_warning "TCP transport not detected" | |
|         fi | |
|          | |
|         if echo "$ucx_transports" | grep -q "shm\|posix"; then | |
|             print_info "✅ Shared memory transport available" | |
|         else | |
|             print_warning "Shared memory transport not detected" | |
|         fi | |
|          | |
|         # Memory types | |
|         print_info "Testing memory type support..." | |
|         local memory_info=$(ucx_info -d 2>/dev/null | grep -i "memory\|md:" || true) | |
|         if [ -n "$memory_info" ]; then | |
|             echo "$memory_info" | head -5 | |
|         fi | |
|          | |
|     else | |
|         print_warning "Cannot test UCX capabilities - ucx_info not available" | |
|         return 1 | |
|     fi | |
| } | |
| 
 | |
| # Function to show recommended UCX settings for RDMA | |
| show_rdma_settings() { | |
|     print_section "Recommended UCX Settings for RDMA" | |
|      | |
|     print_info "For optimal RDMA performance with SeaweedFS:" | |
|     echo "" | |
|     echo "Environment Variables:" | |
|     echo "  export UCX_TLS=rc_verbs,ud_verbs,rc_mlx5_dv,dc_mlx5_dv" | |
|     echo "  export UCX_NET_DEVICES=all" | |
|     echo "  export UCX_LOG_LEVEL=info" | |
|     echo "  export UCX_RNDV_SCHEME=put_zcopy" | |
|     echo "  export UCX_RNDV_THRESH=8192" | |
|     echo "" | |
|      | |
|     print_info "For development/debugging:" | |
|     echo "  export UCX_LOG_LEVEL=debug" | |
|     echo "  export UCX_LOG_FILE=/tmp/ucx.log" | |
|     echo "" | |
|      | |
|     print_info "For Soft-RoCE (RXE) specifically:" | |
|     echo "  export UCX_TLS=rc_verbs,ud_verbs" | |
|     echo "  export UCX_IB_DEVICE_SPECS=rxe0:1"   | |
|     echo "" | |
| } | |
| 
 | |
| # Function to test basic UCX functionality | |
| test_ucx_basic() { | |
|     print_section "Basic UCX Functionality Test" | |
|      | |
|     if command -v ucx_hello_world >/dev/null 2>&1; then | |
|         print_info "UCX hello_world test available" | |
|         echo "You can test UCX with:" | |
|         echo "  Server: UCX_TLS=tcp ucx_hello_world -l" | |
|         echo "  Client: UCX_TLS=tcp ucx_hello_world <server_ip>" | |
|     else | |
|         print_warning "UCX hello_world test not available" | |
|     fi | |
|      | |
|     # Check for other UCX test utilities | |
|     local test_tools=0 | |
|     for tool in ucx_perftest ucp_hello_world; do | |
|         if command -v "$tool" >/dev/null 2>&1; then | |
|             test_tools=$((test_tools + 1)) | |
|             print_info "UCX test tool available: $tool" | |
|         fi | |
|     done | |
|      | |
|     if [ "$test_tools" -eq 0 ]; then | |
|         print_warning "No UCX test tools found" | |
|         echo "Consider installing: ucx-tools package" | |
|     fi | |
| } | |
| 
 | |
| # Function to generate UCX summary | |
| generate_summary() { | |
|     print_section "UCX Status Summary" | |
|      | |
|     local ucx_ok=0 | |
|     local devices_ok=0 | |
|     local rdma_ok=0 | |
|      | |
|     # Check UCX availability | |
|     if command -v ucx_info >/dev/null 2>&1; then | |
|         ucx_ok=1 | |
|     fi | |
|      | |
|     # Check devices | |
|     if command -v ucx_info >/dev/null 2>&1 && ucx_info -d >/dev/null 2>&1; then | |
|         devices_ok=1 | |
|          | |
|         # Check for RDMA | |
|         if ucx_info -d 2>/dev/null | grep -q "rc\|dc\|ud"; then | |
|             rdma_ok=1 | |
|         fi | |
|     fi | |
|      | |
|     echo "📊 UCX Status:" | |
|     [ "$ucx_ok" -eq 1 ] && print_info "✅ UCX Installation: OK" || print_warning "❌ UCX Installation: Missing" | |
|     [ "$devices_ok" -eq 1 ] && print_info "✅ UCX Devices: Detected" || print_warning "❌ UCX Devices: Not detected" | |
|     [ "$rdma_ok" -eq 1 ] && print_info "✅ RDMA Support: Available" || print_warning "⚠️  RDMA Support: Limited/Missing" | |
|      | |
|     echo "" | |
|     if [ "$ucx_ok" -eq 1 ] && [ "$devices_ok" -eq 1 ]; then | |
|         print_info "🎉 UCX is ready for SeaweedFS RDMA integration!" | |
|          | |
|         if [ "$rdma_ok" -eq 1 ]; then | |
|             print_info "🚀 Real RDMA acceleration is available" | |
|         else | |
|             print_warning "💡 Only TCP/shared memory transports available" | |
|         fi | |
|     else | |
|         print_warning "🔧 UCX setup needs attention for optimal performance" | |
|     fi | |
| } | |
| 
 | |
| # Main execution | |
| main() { | |
|     check_ucx_installation | |
|     echo "" | |
|      | |
|     show_ucx_devices | |
|     echo "" | |
|      | |
|     show_ucx_config | |
|     echo "" | |
|      | |
|     test_ucx_capabilities   | |
|     echo "" | |
|      | |
|     show_rdma_settings | |
|     echo "" | |
|      | |
|     test_ucx_basic | |
|     echo "" | |
|      | |
|     generate_summary | |
|      | |
|     echo "" | |
|     print_info "For SeaweedFS RDMA engine integration:" | |
|     echo "  1. Use UCX with your Rust engine" | |
|     echo "  2. Configure appropriate transport layers" | |
|     echo "  3. Test with SeaweedFS RDMA sidecar" | |
|     echo "  4. Monitor performance and adjust settings" | |
| } | |
| 
 | |
| # Execute main function | |
| main "$@"
 |