Skip to Content.
Sympa Menu

svadev - [svadev] Huge overhead as a result of checks being not inlined

svadev AT lists.siebelschool.illinois.edu

Subject: Svadev mailing list

List archive

[svadev] Huge overhead as a result of checks being not inlined


Chronological Thread 
  • From: Santosh Nagarakatte <santoshn AT cis.upenn.edu>
  • To: svadev AT cs.uiuc.edu
  • Subject: [svadev] Huge overhead as a result of checks being not inlined
  • Date: Tue, 6 Dec 2011 02:33:33 -0500
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/svadev>
  • List-id: <svadev.cs.uiuc.edu>

SafeCode developers,

I built SafeCode from the svn and tried to run it with a simple test
program which performs many array accesses.
I have attached the test program. Resultant binary has many function
calls to the safecode handler functions (exactcheck2_debug,
poolcheckui_debug). However, I noticed that  a combination of
non-inlined functions along with spills makes safecode extremely slow
(65X slower).

Following are the details and a sample test case.

I used the following command-line to perform the runtime tests.

Baseline: clang -O3 test-combined.c -o test-clang.out
Safecode: clang -O3 -fmemsafety test-combined.c -o test-safecode.out
-L<safecode_lib_path>

Execution time results on a Core 2 x86_64 machine:

Baseline: 1.626s
SafeCode: 105.49s


Let me know if there is a way I can inline the SafeCode checks?

Santosh


--
Santosh G Nagarakatte,
PhD Student,
Computer and Information Science Department
University of Pennsylvania,
Philadelphia-19104
http://www.cis.upenn.edu/~santoshn


--
Santosh G Nagarakatte,
PhD Student,
Computer and Information Science Department
University of Pennsylvania,
Philadelphia-19104
http://www.cis.upenn.edu/~santoshn
#include <stdlib.h>
#include <stdio.h>

#define SIZE (16*16*2)
#define ITER (SIZE*1024*1024*3)


void foo() {
  printf("Hello World\n");
}


int main(int argc, char** argv)
{
  size_t i;
  size_t *arr = (size_t*)malloc(sizeof(size_t)*SIZE);
  size_t sum = 0;

  // init
  for (i=0; i<SIZE; i++) {
    arr[i] = i;
  }

  // loop
  for (i=0; i<ITER; i++) {
    //    sum += arr[i];
    size_t index = i % SIZE;
    sum += arr[index];
  }

  printf("sum: %d\n", (int) sum);
  //  foo();
  return 0;
}



Archive powered by MHonArc 2.6.16.

Top of Page