You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Leif Hedstrom (JIRA)" <ji...@apache.org> on 2013/08/23 22:29:52 UTC

[jira] [Created] (TS-2151) Do we really need HttpSM::_instantiate_func() now?

Leif Hedstrom created TS-2151:
---------------------------------

             Summary: Do we really need HttpSM::_instantiate_func() now?
                 Key: TS-2151
                 URL: https://issues.apache.org/jira/browse/TS-2151
             Project: Traffic Server
          Issue Type: Improvement
          Components: Core
            Reporter: Leif Hedstrom


The HttpSM implements the instantiate_func() which means the Sparse Class allocator ends up trying to "optimize" the memcpy(). We should benchmark this, and see if is actually a performance improvement still. Simplifying this code with just a mempcy() (i.e. use normal class allocator behavior) would make it safer and less confusing.

{code}
void
HttpSM::_instantiate_func(HttpSM * prototype, HttpSM * new_instance)
{
  int history_len = sizeof(prototype->history);
  int total_len = sizeof(HttpSM);
  int pre_history_len = (char *) (&(prototype->history)) - (char *) prototype;
  int post_history_len = total_len - history_len - pre_history_len;
  int post_offset = pre_history_len + history_len;

#ifndef SIMPLE_MEMCPY_INIT
  int j;

  memset(((char *) new_instance), 0, pre_history_len);
  memset(((char *) new_instance) + post_offset, 0, post_history_len);
  uint32_t *pd = (uint32_t *) new_instance;
  for (j = 0; j < scat_count; j++) {
    pd[to[j]] = val[j];
  }

  ink_assert((memcmp((char *) new_instance, (char *) prototype, pre_history_len) == 0) &&
                   (memcmp(((char *) new_instance) + post_offset, ((char *) prototype) + post_offset, post_history_len) == 0));
#else
  // memcpy(new_instance, prototype, total_len);
  memcpy(new_instance, prototype, pre_history_len);
  memcpy(((char *) new_instance) + post_offset, ((char *) prototype) + post_offset, post_history_len);
#endif
}
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira