You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-dev@hadoop.apache.org by "YulongZ (Jira)" <ji...@apache.org> on 2022/05/09 05:21:00 UTC
[jira] [Created] (YARN-11139) Minor performance improvements in DelegationTokenRenewerPoolTracker
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-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-dev-help@hadoop.apache.org