YulongZ created YARN-11139:
------------------------------

             Summary: Minor performance improvements in 
DelegationTokenRenewerPoolTracker
                 Key: YARN-11139
                 URL: https://issues.apache.org/jira/browse/YARN-11139
             Project: Hadoop YARN
          Issue Type: Improvement
          Components: resourcemanager
    Affects Versions: 3.3.1
         Environment: Hadoop3.3.1 with Kerberos
            Reporter: YulongZ
         Attachments: CPU cost of ResourceManager with no sleep time.png, CPU 
cost of ResourceManager with sleep 1.png, Flame diagram of ResourceManager with 
no sleep time.svg, Flame diagram of ResourceManager with sleep 1.svg

The DelegationTokenRenewerPoolTracker thread wastes of CPU resources when no 
application running,the run method always executes a for loop, but actually 
does nothing. 
{code:java}
// code with no change
@Override
    public void run() {
      while (true) {
        for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures
            .entrySet()) {
          DelegationTokenRenewerEvent evt = entry.getKey();
          Future<?> future = entry.getValue();
          try {
            future.get(tokenRenewerThreadTimeout, TimeUnit.MILLISECONDS);
          } catch (TimeoutException e) {

            // Cancel thread and retry the same event in case of timeout
            if (future != null && !future.isDone() && !future.isCancelled()) {
              future.cancel(true);
              futures.remove(evt);
              if (evt.getAttempt() < tokenRenewerThreadRetryMaxAttempts) {
                renewalTimer.schedule(
                    getTimerTask((AbstractDelegationTokenRenewerAppEvent) evt),
                    tokenRenewerThreadRetryInterval);
              } else {
                LOG.info(
                    "Exhausted max retry attempts {} in token renewer "
                        + "thread for {}",
                    tokenRenewerThreadRetryMaxAttempts, evt.getApplicationId());
              }
            }
          } catch (Exception e) {
            LOG.info("Problem in submitting renew tasks in token renewer "
                + "thread.", e);
          }
        }
      }
    }
{code}
Maybe we can add a tiny sleep to avoid waste of CPU resources. For example 
below,
{code:java}
// code with a tiny sleep
    public void run() {
      while (true) {
        try {
          Thread.sleep(1);
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
        }
        for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures
            .entrySet()) {
          DelegationTokenRenewerEvent evt = entry.getKey();
... {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-dev-unsubscr...@hadoop.apache.org
For additional commands, e-mail: yarn-dev-h...@hadoop.apache.org

Reply via email to