| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- #!/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 "$@"
|