diff options
Diffstat (limited to 'DAnCE/dance/LocalityManager/Configuration/CPU_Affinity.cpp')
-rw-r--r-- | DAnCE/dance/LocalityManager/Configuration/CPU_Affinity.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/DAnCE/dance/LocalityManager/Configuration/CPU_Affinity.cpp b/DAnCE/dance/LocalityManager/Configuration/CPU_Affinity.cpp deleted file mode 100644 index 72ec2f30d04..00000000000 --- a/DAnCE/dance/LocalityManager/Configuration/CPU_Affinity.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "CPU_Affinity.h" -#include "dance/DAnCE_PropertiesC.h" -#include "dance/Deployment/Deployment_StartErrorC.h" -#include "dance/Logger/Log_Macros.h" -#include "ace/os_include/os_sched.h" -#include "ace/Auto_Ptr.h" -#include "ace/Tokenizer_T.h" -#include "ace/OS_NS_unistd.h" -#include <sstream> - -namespace DAnCE -{ - CPU_Affinity::CPU_Affinity (void) - { - } - - // Implementation skeleton destructor - CPU_Affinity::~CPU_Affinity (void) - { - } - - char * CPU_Affinity::type (void) - { - return CORBA::string_dup (DAnCE::DANCE_LM_CPUAFFINITY); - } - - void CPU_Affinity::configure (const ::Deployment::Property & prop) - { -#if defined (ACE_HAS_SCHED_SETAFFINITY) - const char *extracted_affinity = 0; - - if (! (prop.value >>= CORBA::Any::to_string (extracted_affinity, 0))) - { - DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR, - (LM_ERROR, DLINFO - ACE_TEXT ("CPU_Affinity::configure - ") - ACE_TEXT ("Unable to extract CPU affinity string"))); - throw ::Deployment::StartError (prop.name.in (), - "Unable to extract CPU affinity string"); - } - - char *affinity = ACE_OS::strdup (extracted_affinity); - - ACE_Tokenizer_T<char> tokenizer(affinity); - tokenizer.delimiter (','); - - char *token = 0; - cpu_set_t mask; - - CPU_ZERO (&mask); - - while ((token = tokenizer.next ())) - { - int i = ACE_OS::atoi (token); - - if (i >= 0) - { - DANCE_DEBUG (DANCE_LOG_MINOR_EVENT, - (LM_DEBUG, DLINFO - ACE_TEXT ("CPU_Affinity::configure - ") - ACE_TEXT ("Toggling affinity for CPU %i\n"), - i)); - CPU_SET (i, &mask); - } - else - { - DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR, - (LM_ERROR, DLINFO - ACE_TEXT ("CPU_Affinity::configure - ") - ACE_TEXT ("All affinity values should be greater than 0"))); - throw ::Deployment::StartError (prop.name.in (), - "All affinity values should be greater than 0"); - } - } - - ACE_OS::free (affinity); - - pid_t const pid = ACE_OS::getpid (); - - int retval = ::sched_setaffinity (pid, - sizeof (cpu_set_t), - &mask); - - if (retval != 0) - { - std::stringstream str; - ACE_Auto_Basic_Array_Ptr<char> safe_error (ACE_OS::strerror (ACE_OS::last_error ())); - - str << "Unable to set CPU affinity to <" << affinity << ">: " - << safe_error.get (); - std::string message = str.str (); - - DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR, - (LM_ERROR, DLINFO - ACE_TEXT ("CPU_Affinity::configure - %C\n"), - message.c_str ())); - - throw ::Deployment::StartError (prop.name.in (), - message.c_str ()); - } -#else - throw ::Deployment::StartError (prop.name.in (), - "CPU Affinity not supported on this platform"); -#endif - } -} - -extern "C" -{ - DAnCE::LocalityConfiguration_ptr create_CPU_Affinity (void) - { - DAnCE::LocalityConfiguration_ptr retval (0); - - ACE_NEW_RETURN (retval, - DAnCE::CPU_Affinity (), - 0); - - return retval; - } -} |