diff --git a/.gitignore b/.gitignore index cda2cc3029..c3b5513cff 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ docs/_doxygen/ # misc __pycache__/ +authentication/CA/ diff --git a/CHANGELOG.md b/CHANGELOG.md index b0ca3c274b..15e88ad6b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ Full documentation for RDC is available at [ROCm DataCenter Tool User Guide](https://rocm.docs.amd.com/projects/rdc/en/latest/). +## RDC for ROCm 6.2.0 + +- Added [rocprofiler](https://github.com/ROCm/rocprofiler) dmon metrics +- Added new ECC metrics +- Added [ROCmValidationSuite](https://github.com/ROCm/ROCmValidationSuite) diagnostic command +- Fully migrated to [AMDSMI](https://github.com/ROCm/amdsmi) + - Removed RASLIB dependency and blobs + - Removed [rocm_smi_lib](https://github.com/ROCm/rocm_smi_lib) dependency + ## RDC for ROCm 6.1.0 - Added `--address` flag to rdcd diff --git a/CMakeLists.txt b/CMakeLists.txt index d9652d2728..2260390001 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,9 +26,18 @@ cmake_minimum_required(VERSION 3.15) set(RDC "rdc" CACHE INTERNAL "") set(RDC_PACKAGE ${RDC} CACHE STRING "") +# ROCM_DIR should be passed in via command line +set(ROCM_DIR "/opt/rocm" CACHE PATH "ROCm directory.") +if(DEFINED ROCM_PATH) + message(WARNING "ROCM_PATH is not used by the build process! Did you mean to set ROCM_DIR instead?") +endif() + # Default libdir to "lib", this skips GNUInstallDirs from trying to take a guess if it's unset: set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "Library install directory") +# Usually ROCM tools are installed into /opt/rocm +set(CMAKE_INSTALL_PREFIX ${ROCM_DIR} CACHE PATH "Default installation directory.") + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/" CACHE INTERNAL "Default module path.") # Include common cmake modules include(utils) @@ -69,9 +78,6 @@ if(DEFINED ENV{ADDRESS_SANITIZER}) endif() option(ADDRESS_SANITIZER "Enable address sanitizer" ${ADDRESS_SANITIZER_DEFAULT}) -# File reorganization enable/disable -option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" OFF) - option(CMAKE_VERBOSE_MAKEFILE "Enable verbose output" OFF) option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile commands for linters and autocompleters" ON) @@ -88,20 +94,13 @@ project(${RDC} # this must go after project() include(GNUInstallDirs) -# ROCM_DIR should be passed in via command line; it will be used -# in sub-projects. Override with -DROCM_DIR= -set(ROCM_DIR "/opt/rocm" CACHE PATH "ROCm directory.") -set(ROCM_PATH "${ROCM_DIR}" CACHE PATH "ROCm directory.") - set(COMMON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/common") set(GRPC_ROOT_DEFAULT "/usr") -set(GRPC_ROOT ${GRPC_ROOT_DEFAULT} CACHE STRING "GRPC installation directory.") +set(GRPC_ROOT ${GRPC_ROOT_DEFAULT} CACHE PATH "GRPC installation directory.") set(GRPC_DESIRED_VERSION 1.61.0 CACHE STRING "GRPC desired package version.") set(RDC_SHARE_INSTALL_PREFIX "share/${RDC}" CACHE INTERNAL "Tests and Example install directory") -set(CMAKE_INSTALL_PREFIX ${ROCM_DIR} CACHE STRING "Default installation directory.") - # add package search paths list(APPEND CMAKE_PREFIX_PATH ${GRPC_ROOT} @@ -120,7 +119,7 @@ set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc." CACHE STRING "") set(CPACK_PACKAGE_CONTACT "RDC Support " CACHE STRING "") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Radeon Data Center Tools" CACHE STRING "") set(CPACK_PACKAGE_DESCRIPTION "This package contains the AMD ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}." CACHE STRING "") -set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Default packaging prefix.") +set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Default packaging prefix.") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" CACHE INTERNAL "") set(CPACK_RPM_PACKAGE_LICENSE "MIT" CACHE INTERNAL "") set(CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators.") @@ -375,25 +374,6 @@ configure_file( configure_file( "${PROJECT_SOURCE_DIR}/src/RPM_postun.in" "${PROJECT_SOURCE_DIR}/RPM/rpm_postun" FILE_PERMISSIONS ${INST_SCR_PERM}) -#backward compatibility for file reorganization -if(FILE_REORG_BACKWARD_COMPATIBILITY) -# To enable/disable #error in wrapper header files - if(NOT DEFINED ROCM_HEADER_WRAPPER_WERROR) - if(DEFINED ENV{ROCM_HEADER_WRAPPER_WERROR}) - set(ROCM_HEADER_WRAPPER_WERROR "$ENV{ROCM_HEADER_WRAPPER_WERROR}" - CACHE STRING "Header wrapper warnings as errors.") - else() - set(ROCM_HEADER_WRAPPER_WERROR "OFF" CACHE STRING "Header wrapper warnings as errors.") - endif() - endif() - if(ROCM_HEADER_WRAPPER_WERROR) - set(deprecated_error 1) - else() - set(deprecated_error 0) - endif() - - include(rdc-backward-compat) -endif() if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}") message("Using CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}") diff --git a/README.md b/README.md index 1e3cc2fcca..435786564e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,11 @@ The ROCmâ„¢ Data Center Tool simplifies the administration and addresses key inf For up-to-date document and how to start using RDC from pre-built packages, please refer to the [**ROCm DataCenter Tool User Guide**](https://rocm.docs.amd.com/projects/rdc/en/latest/) -For certificate generation, please refer to [**RDC Developer Handbook**#generate-files-for-authentication](https://rocm.docs.amd.com/projects/rdc/en/latest/install/handbook.html#generate-files-for-authentication) +## Certificate generation + +For certificate generation, please refer to +[**RDC Developer Handbook**#generate-files-for-authentication](https://rocm.docs.amd.com/projects/rdc/en/latest/install/handbook.html#generate-files-for-authentication) +Or read the concise guide under authentication/readme.txt ## Supported platforms @@ -45,9 +49,9 @@ The following tools are required for gRPC build & installation ### Download and build gRPC -By default (without using CMAKE_INSTALL_PREFIX option), gRPC will install to /usr/local lib, include and bin directories. +By default (without using CMAKE_INSTALL_PREFIX option), gRPC will install to `/usr/local` lib, include and bin directories. It is highly recommended to install gRPC into a unique directory. -Below example installs gRPC into /opt/grpc +Below example installs gRPC into `/opt/grpc` git clone -b v1.61.0 https://github.com/grpc/grpc --depth=1 --shallow-submodules --recurse-submodules cd grpc @@ -69,9 +73,13 @@ Clone the RDC source code from GitHub and use CMake to build and install git clone https://github.com/ROCm/rdc cd rdc - mkdir -p build # default installation location is /opt/rocm, specify with -DROCM_DIR or -DCMAKE_INSTALL_PREFIX cmake -B build -DGRPC_ROOT="$GRPC_ROOT" + # enable rocprofiler (optional) + cmake -B build -DBUILD_PROFILER=ON + # enable RVS (optional) + cmake -B build -DBUILD_RVS=ON + # build and install make -C build -j $(nproc) make -C build install @@ -89,10 +97,10 @@ The user can choose to not build RDC diagnostic ROCM Run time. This will elimina ## Update System Library Path - RDC_LIB_DIR=/opt/rocm/rdc/lib - GRPC_LIB_DIR=/opt/grpc/lib - echo -e "${GRPC_LIB_DIR}\n${GRPC_LIB_DIR}64" | sudo tee /etc/ld.so.conf.d/x86_64-librdc_client.conf - echo -e "${RDC_LIB_DIR}\n${RDC_LIB_DIR}64" | sudo tee -a /etc/ld.so.conf.d/x86_64-librdc_client.conf + RDC_LIB_DIR=/opt/rocm/lib/rdc + GRPC_LIB_DIR="${RDC_LIB_DIR}/grpc/lib\n/opt/grpc/lib" + echo -e "${RDC_LIB_DIR}" | sudo tee /etc/ld.so.conf.d/x86_64-librdc_client.conf + echo -e "${GRPC_LIB_DIR}" | sudo tee -a /etc/ld.so.conf.d/x86_64-librdc_client.conf ldconfig ## Running RDC @@ -111,26 +119,37 @@ When *rdcd* is started from a command-line the *capabilities* are determined by ## NOTE: Replace /opt/rocm with specific rocm version if needed ## To run with authentication. Ensure SSL keys are setup properly - ## version will be the version number(ex:3.10.0) of ROCm where RDC was packaged with - /opt/rocm/rdc/bin/rdcd ## rdcd is started with monitor-only capabilities - sudo /opt/rocm/rdc/bin/rdcd ## rdcd is started will full-capabilities + /opt/rocm/bin/rdcd ## rdcd is started with monitor-only capabilities + sudo /opt/rocm/bin/rdcd ## rdcd is started will full-capabilities ## To run without authentication. SSL key & certificates are not required. - ## version will be the version number(ex:3.10.0) of ROCm where RDC was packaged with - /opt/rocm/rdc/bin/rdcd -u ## rdcd is started with monitor-only capabilities - sudo /opt/rocm/rdc/bin/rdcd -u ## rdcd is started will full-capabilities + /opt/rocm/bin/rdcd -u ## rdcd is started with monitor-only capabilities + sudo /opt/rocm/bin/rdcd -u ## rdcd is started will full-capabilities ### Start RDCD using systemd -*rdcd* can be started by using the systemctl command. You can copy /opt/rocm/rdc/lib/rdc.service, which is installed with RDC, to the systemd folder. This file has 2 lines that control what *capabilities* with which *rdcd* will run. If left uncommented, rdcd will run with full-capabilities. +*rdcd* can be started by using the systemctl command. You can copy `/opt/rocm/libexec/rdc/rdc.service`, which is installed with RDC, to the systemd folder. This file has 2 lines that control what *capabilities* with which *rdcd* will run. If left uncommented, rdcd will run with full-capabilities. - ## file: /opt/rocm/rdc/lib/rdc.service + ## file: /opt/rocm/libexec/rdc/rdc.service ## Comment the following two lines to run with monitor-only capabilities CapabilityBoundingSet=CAP_DAC_OVERRIDE AmbientCapabilities=CAP_DAC_OVERRIDE systemctl start rdc ## start rdc as systemd service +Additional options can be passed to *rdcd* by modifying `/opt/rocm/etc/rdc_options` + + ## file: /opt/rocm/etc/rdc_options + # Append 'rdc' daemon parameters here + RDC_OPTS="-p 50051 -u -d" + +Example above does the following: + +- Use port 50051 +- Use unauthenticated mode +- Enable debug messages +- **NOTE:** You must add `-u` flag to `rdci` calls as well + ## Invoke RDC using ROCmâ„¢ Data Center Interface (RDCI) RDCI provides command-line interface to all RDC features. This CLI can be run locally or remotely. Refer to [**user guide**](https://rocm.docs.amd.com/projects/rdc/en/latest/how-to/features.html) for the current list of features. @@ -140,7 +159,7 @@ RDCI provides command-line interface to all RDC features. This CLI can be run lo ## NOTE: option -u (for unauthenticated) is required if rdcd was started in this mode ## Assuming that rdc is installed into /opt/rocm - cd /opt/rocm/rdc/bin + cd /opt/rocm/bin ./rdci discovery -l <-u> ## list available GPUs in localhost ./rdci discovery -l <-u> ## list available GPUs in host machine ./rdci dmon <-u> -l ## list most GPU counters @@ -160,8 +179,10 @@ If rdcd was started as a systemd service, then use journalctl to view rdcd logs To run rdcd with debug log from command-line use version will be the version number(ex:3.10.0) of ROCm where RDC was packaged with - RDC_LOG=DEBUG /opt/rocm/rdc/bin/rdcd + RDC_LOG=DEBUG /opt/rocm/bin/rdcd RDC_LOG=DEBUG also works on rdci ERROR, INFO, DEBUG logging levels are supported + +Additional logging messages can be enabled with `RSMI_LOGGING=3` diff --git a/authentication/readme.txt b/authentication/readme.txt new file mode 100644 index 0000000000..3200d69cf4 --- /dev/null +++ b/authentication/readme.txt @@ -0,0 +1,11 @@ +# How-to generate authentication files + +1. Modify openssl.cnf to match your company info +2. ./01gen_root_cert.sh +3. ./02gen_ssl_artifacts.sh +4. cd CA/artifacts +5. sudo ./install_client.sh /etc/rdc +6. sudo ./install_server.sh /etc/rdc + +For a full guide refer to: +https://rocm.docs.amd.com/projects/rdc/en/latest/install/handbook.html#generate-files-for-authentication diff --git a/cmake_modules/rdc-backward-compat.cmake b/cmake_modules/rdc-backward-compat.cmake deleted file mode 100644 index f0af2f00ba..0000000000 --- a/cmake_modules/rdc-backward-compat.cmake +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright (c) 2022 Advanced Micro Devices, Inc. All Rights Reserved. -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -cmake_minimum_required(VERSION 3.16.8) - -set(RDC_WRAPPER_DIR ${CMAKE_CURRENT_BINARY_DIR}/wrapper_dir) -set(RDC_WRAPPER_INC_DIR ${RDC_WRAPPER_DIR}/include/rdc) -set(RDC_WRAPPER_LIB_DIR ${RDC_WRAPPER_DIR}/lib) -set(RDC_WRAPPER_BIN_DIR ${RDC_WRAPPER_DIR}/bin) -set(RDC_SRC_INC_DIR ${PROJECT_SOURCE_DIR}/include/rdc) - -#use header template file and generate wrapper header files -function(generate_wrapper_header) - file(MAKE_DIRECTORY ${RDC_WRAPPER_INC_DIR}) - #Only rdc.h header file used in packaging - # set include guard - set(include_guard "RDC_WRAPPER_INCLUDE_RDC_H") - #set #include statement - set(file_name "rdc.h") - set(header_name ${file_name}) - set(include_statements "#include \"../../../${CMAKE_INSTALL_INCLUDEDIR}/rdc/${file_name}\"\n") - configure_file(${PROJECT_SOURCE_DIR}/src/header_template.hpp.in ${RDC_WRAPPER_INC_DIR}/${file_name}) -endfunction() - -# function to create symlink to libraries -function(create_library_symlink) - file(MAKE_DIRECTORY ${RDC_WRAPPER_LIB_DIR}) - set(LIB_RDC "librdc.so") - set(LIB_RDC_BOOTSTRAP "librdc_bootstrap.so") - set(LIB_RDC_CLIENT "librdc_client.so") - set(MAJ_VERSION "${VERSION_MAJOR}") - set(SO_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}") - set(library_files "${LIB_RDC}" "${LIB_RDC}.${MAJ_VERSION}" "${LIB_RDC}.${SO_VERSION}") - set(library_files "${library_files}" "${LIB_RDC_BOOTSTRAP}" "${LIB_RDC_BOOTSTRAP}.${MAJ_VERSION}" "${LIB_RDC_BOOTSTRAP}.${SO_VERSION}" ) - set(library_files "${library_files}" "${LIB_RDC_CLIENT}" "${LIB_RDC_CLIENT}.${MAJ_VERSION}" "${LIB_RDC_CLIENT}.${SO_VERSION}" ) - - foreach(file_name ${library_files}) - add_custom_target(link_${file_name} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../${CMAKE_INSTALL_LIBDIR}/${file_name} ${RDC_WRAPPER_LIB_DIR}/${file_name}) - endforeach() - # Symlink for private libraries - set(LIB_RDC_ROCR "librdc_rocr.so") - set(LIB_RDC_ROCP "librdc_rocp.so") - set(LIB_RDC_RVS "librdc_rvs.so") - set(LIB_RDC_CLIENT_SMI "librdc_client_smi.so") - set(library_files "${LIB_RDC_ROCR}" "${LIB_RDC_ROCR}.${MAJ_VERSION}" "${LIB_RDC_ROCR}.${SO_VERSION}" ) - set(library_files "${LIB_RDC_ROCP}" "${LIB_RDC_ROCP}.${MAJ_VERSION}" "${LIB_RDC_ROCP}.${SO_VERSION}" ) - set(library_files "${library_files}" "${LIB_RDC_CLIENT_SMI}" "${LIB_RDC_CLIENT_SMI}.${MAJ_VERSION}" "${LIB_RDC_CLIENT_SMI}.${SO_VERSION}" ) - set(library_files "${library_files}" "${LIB_RDC_RVS}") - - foreach(file_name ${library_files}) - add_custom_target(link_${file_name} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../${CMAKE_INSTALL_LIBDIR}/${RDC}/${file_name} ${RDC_WRAPPER_LIB_DIR}/${file_name}) - endforeach() - # create symlink to grpc directory - # this helps avoid using LD_LIBRARY_PATH - if(BUILD_STANDALONE) - set(file_name "grpc") - add_custom_target(link_${file_name} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../${CMAKE_INSTALL_LIBDIR}/${RDC}/${file_name} ${RDC_WRAPPER_LIB_DIR}/${file_name}) - endif() - # create symlink to rdc.service - set(file_name "rdc.service") - add_custom_target(link_${file_name} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../${CMAKE_INSTALL_LIBEXECDIR}/${RDC}/${file_name} ${RDC_WRAPPER_LIB_DIR}/${file_name}) -endfunction() - -# function to create symlink to binaries -function(create_binary_symlink) - file(MAKE_DIRECTORY ${RDC_WRAPPER_BIN_DIR}) - # create symlink for rdcd and rdci - set(binary_files "rdcd" "rdci") - foreach(file_name ${binary_files}) - add_custom_target(link_${file_name} ALL - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E create_symlink - ../../${CMAKE_INSTALL_BINDIR}/${file_name} ${RDC_WRAPPER_BIN_DIR}/${file_name}) - endforeach() -endfunction() - -# Use template header file and generate wrapper header files -generate_wrapper_header() -install(DIRECTORY ${RDC_WRAPPER_INC_DIR} DESTINATION DESTINATION ${RDC}/include COMPONENT ${CLIENT_COMPONENT}) - -# Create symlink to library files -create_library_symlink() -install(DIRECTORY ${RDC_WRAPPER_LIB_DIR} DESTINATION ${RDC} COMPONENT ${CLIENT_COMPONENT}) -# Create symlink to library binaries -create_binary_symlink() -install(DIRECTORY ${RDC_WRAPPER_BIN_DIR} DESTINATION ${RDC} COMPONENT ${CLIENT_COMPONENT})