You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2011/02/28 04:18:18 UTC
svn commit: r1075200 - in /trafficserver/traffic/trunk:
contrib/perl/AdminClient/lib/Apache/TS/ iocore/cache/ iocore/eventsystem/
mgmt/ proxy/config/
Author: zwoop
Date: Mon Feb 28 03:18:15 2011
New Revision: 1075200
URL: http://svn.apache.org/viewvc?rev=1075200&view=rev
Log:
TS-678 Add a config option for try-lock retry delay.
This adds a configuration option
proxy.config.cache.mutex_retry_delay INT 2
2ms seems to be fairly optimal, with little detrimental effect
on CPU usage. We'll fine tune this further in the next release.
Modified:
trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm
trafficserver/traffic/trunk/iocore/cache/Cache.cc
trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
trafficserver/traffic/trunk/iocore/cache/CacheLink.cc
trafficserver/traffic/trunk/iocore/cache/CachePart.cc
trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc
trafficserver/traffic/trunk/iocore/cache/P_CacheInternal.h
trafficserver/traffic/trunk/iocore/eventsystem/I_EThread.h
trafficserver/traffic/trunk/mgmt/RecordsConfig.cc
trafficserver/traffic/trunk/proxy/config/records.config.in
Modified: trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm (original)
+++ trafficserver/traffic/trunk/contrib/perl/AdminClient/lib/Apache/TS/AdminClient.pm Mon Feb 28 03:18:15 2011
@@ -305,6 +305,7 @@ The Apache Traffic Server Administration
proxy.config.cache.threads_per_disk
proxy.config.cache.url_hash_method
proxy.config.cache.vary_on_user_agent
+ proxy.config.cache.mutex_retry_delay
proxy.config.cli_binary
proxy.config.cluster.cluster_configuration
proxy.config.cluster.cluster_load_clear_duration
Modified: trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Cache.cc Mon Feb 28 03:18:15 2011
@@ -78,6 +78,7 @@ int cache_config_enable_checksum = 0;
int cache_config_alt_rewrite_max_size = 4096;
int cache_config_read_while_writer = 0;
char cache_system_config_directory[PATH_NAME_MAX + 1];
+int cache_config_mutex_retry_delay = 2;
// Globals
@@ -2675,6 +2676,9 @@ ink_cache_init(ModuleVersion v)
Debug("cache_init", "proxy.config.cache.max_doc_size = %d = %dMb",
cache_config_max_doc_size, cache_config_max_doc_size / (1024 * 1024));
+ IOCORE_EstablishStaticConfigInt32(cache_config_mutex_retry_delay, "proxy.config.cache.mutex_retry_delay");
+ Debug("cache_init", "proxy.config.cache.mutex_retry_delay = %dms", cache_config_mutex_retry_delay);
+
// This is just here to make sure IOCORE "standalone" works, it's usually configured in RecordsConfig.cc
IOCORE_RegisterConfigString(RECT_CONFIG, "proxy.config.config_dir", TS_BUILD_SYSCONFDIR, RECU_DYNAMIC, RECC_NULL, NULL);
IOCORE_ReadConfigString(cache_system_config_directory, "proxy.config.config_dir", PATH_NAME_MAX);
Modified: trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDir.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDir.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDir.cc Mon Feb 28 03:18:15 2011
@@ -124,7 +124,7 @@ OpenDir::signal_readers(int event, Event
EThread *t1 = newly_delayed_readers.head->mutex->thread_holding;
if (!t1)
t1 = mutex->thread_holding;
- t1->schedule_in(this, MUTEX_RETRY_DELAY);
+ t1->schedule_in(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
}
return 0;
}
@@ -1005,7 +1005,7 @@ Lrestart:
{
CACHE_TRY_LOCK(lock, gpart[part]->mutex, mutex->thread_holding);
if (!lock) {
- trigger = eventProcessor.schedule_in(this, MUTEX_RETRY_DELAY);
+ trigger = eventProcessor.schedule_in(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
Part *d = gpart[part];
Modified: trafficserver/traffic/trunk/iocore/cache/CacheLink.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheLink.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheLink.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheLink.cc Mon Feb 28 03:18:15 2011
@@ -104,7 +104,7 @@ Cache::deref(Continuation * cont, CacheK
c->last_collision = last_collision;
if (!lock) {
- c->mutex->thread_holding->schedule_in_local(c, MUTEX_RETRY_DELAY);
+ c->mutex->thread_holding->schedule_in_local(c, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return &c->_action;
}
@@ -152,7 +152,7 @@ CacheVC::derefRead(int event, Event * e)
Lcollision:{
CACHE_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
if (!lock) {
- mutex->thread_holding->schedule_in_local(this, MUTEX_RETRY_DELAY);
+ mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
if (dir_probe(&key, part, &dir, &last_collision)) {
Modified: trafficserver/traffic/trunk/iocore/cache/CachePart.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CachePart.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CachePart.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CachePart.cc Mon Feb 28 03:18:15 2011
@@ -115,7 +115,7 @@ CacheVC::scanObject(int event, Event * e
CACHE_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
if (!lock) {
- mutex->thread_holding->schedule_in_local(this, MUTEX_RETRY_DELAY);
+ mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
@@ -400,7 +400,7 @@ CacheVC::scanUpdateDone(int event, Event
SET_HANDLER(&CacheVC::scanObject);
return handleEvent(EVENT_IMMEDIATE, 0);
} else {
- mutex->thread_holding->schedule_in_local(this, MUTEX_RETRY_DELAY);
+ mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
}
Modified: trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheWrite.cc Mon Feb 28 03:18:15 2011
@@ -315,7 +315,7 @@ Part::aggWriteDone(int event, Event *e)
// retaking the current mutex recursively is a NOOP
CACHE_TRY_LOCK(lock, dir_sync_waiting ? cacheDirSync->mutex : mutex, mutex->thread_holding);
if (!lock) {
- eventProcessor.schedule_in(this, MUTEX_RETRY_DELAY);
+ eventProcessor.schedule_in(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
if (io.ok()) {
Modified: trafficserver/traffic/trunk/iocore/cache/P_CacheInternal.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/P_CacheInternal.h?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/P_CacheInternal.h (original)
+++ trafficserver/traffic/trunk/iocore/cache/P_CacheInternal.h Mon Feb 28 03:18:15 2011
@@ -76,24 +76,24 @@ struct EvacuationBlock;
#define VC_LOCK_RETRY_EVENT() \
do { \
- trigger = mutex->thread_holding->schedule_in_local(this,MUTEX_RETRY_DELAY,event); \
+ trigger = mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay), event); \
return EVENT_CONT; \
} while (0)
#define VC_SCHED_LOCK_RETRY() \
do { \
- trigger = mutex->thread_holding->schedule_in_local(this,MUTEX_RETRY_DELAY); \
+ trigger = mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay)); \
return EVENT_CONT; \
} while (0)
#define CONT_SCHED_LOCK_RETRY_RET(_c) \
do { \
- _c->mutex->thread_holding->schedule_in_local(_c, MUTEX_RETRY_DELAY); \
+ _c->mutex->thread_holding->schedule_in_local(_c, HRTIME_MSECONDS(cache_config_mutex_retry_delay)); \
return EVENT_CONT; \
} while (0)
#define CONT_SCHED_LOCK_RETRY(_c) \
- _c->mutex->thread_holding->schedule_in_local(_c, MUTEX_RETRY_DELAY)
+ _c->mutex->thread_holding->schedule_in_local(_c, HRTIME_MSECONDS(cache_config_mutex_retry_delay))
#define VC_SCHED_WRITER_RETRY() \
do { \
@@ -228,6 +228,7 @@ extern int cache_config_hit_evacuate_siz
#endif
extern int cache_config_force_sector_size;
extern int cache_config_target_fragment_size;
+extern int cache_config_mutex_retry_delay;
// CacheVC
struct CacheVC: public CacheVConnection
@@ -686,7 +687,7 @@ CacheVC::handleWriteLock(int event, Even
CACHE_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
if (!lock) {
set_agg_write_in_progress();
- trigger = mutex->thread_holding->schedule_in_local(this, MUTEX_RETRY_DELAY);
+ trigger = mutex->thread_holding->schedule_in_local(this, HRTIME_MSECONDS(cache_config_mutex_retry_delay));
return EVENT_CONT;
}
ret = handleWrite(EVENT_CALL, e);
Modified: trafficserver/traffic/trunk/iocore/eventsystem/I_EThread.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/eventsystem/I_EThread.h?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/eventsystem/I_EThread.h (original)
+++ trafficserver/traffic/trunk/iocore/eventsystem/I_EThread.h Mon Feb 28 03:18:15 2011
@@ -35,7 +35,10 @@
// perhaps based on proxy.config.stat_api.max_stats_allowed or other configs. XXX
#define PER_THREAD_DATA (1024*1024)
+// This is not used by the cache anymore, it uses proxy.config.cache.mutex_retry_delay
+// instead.
#define MUTEX_RETRY_DELAY HRTIME_MSECONDS(20)
+
/** Maximum number of accept events per thread. */
#define MAX_ACCEPT_EVENTS 20
Modified: trafficserver/traffic/trunk/mgmt/RecordsConfig.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/mgmt/RecordsConfig.cc?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/mgmt/RecordsConfig.cc (original)
+++ trafficserver/traffic/trunk/mgmt/RecordsConfig.cc Mon Feb 28 03:18:15 2011
@@ -1032,6 +1032,8 @@ RecordElement RecordsConfig[] = {
,
{RECT_CONFIG, "proxy.config.cache.enable_read_while_writer", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
,
+ {RECT_CONFIG, "proxy.config.cache.mutex_retry_delay", RECD_INT, "2", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+ ,
//##############################################################################
// #
Modified: trafficserver/traffic/trunk/proxy/config/records.config.in
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/config/records.config.in?rev=1075200&r1=1075199&r2=1075200&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/config/records.config.in (original)
+++ trafficserver/traffic/trunk/proxy/config/records.config.in Mon Feb 28 03:18:15 2011
@@ -359,6 +359,9 @@ CONFIG proxy.config.cache.min_average_ob
# How many I/O threads to allocate per disk (spindle). Be aware that RAID
# disks would show up to TS as a single spindle.
CONFIG proxy.config.cache.threads_per_disk INT 8
+ # Time (in ms) to delay until retrying to acquire a cache lock. Setting
+ # this lower will reduce latencies in some cases, but consume more CPU.
+CONFIG proxy.config.cache.mutex_retry_delay INT 11
##############################################################################
#
# DNS