Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: ClamAV: devel

[PATCH] FreeBSD 6.2 libpthread patch with jemalloc support for clamd

 

 

ClamAV devel RSS feed   Index | Next | Previous | View Threaded


mb at imp

Mar 13, 2007, 12:32 PM

Post #1 of 1 (889 views)
Permalink
[PATCH] FreeBSD 6.2 libpthread patch with jemalloc support for clamd

Hi all,

After the ugly odyssey here are finally the steps to make clamd working on
FreeBSD without to burn a lot of CPU cycles and without the ugly lock contention
syndroms with libpthread:

1.) Compile jemalloc.so
-----------------------

Get tree.h and malloc.c from CURRENT:

# fetch http://antispam.imp.ch/files/tree.h
# fetch http://antispam.imp.ch/files/malloc.c

# gcc -O -Wall -I/usr/src/lib/libc/include -shared \
-o /usr/local/lib/jemalloc.so malloc.c

# rm tree.h malloc.c


2.) Then make a copy of libpthread:
-----------------------------------

cp /usr/src/lib/libpthread /usr/src/lib/libpthread-jemalloc

Then apply the patch below to /usr/src/lib/libpthread-jemalloc
and install it:

cd /usr/src/lib/libpthread-jemalloc
make && make install

mv /lib/libpthread-jemalloc.so.2 /usr/local/lib

rm -rfd /usr/src/lib/libpthread-jemalloc


3.) libmap.conf
---------------

And add this to /etc/libmap.conf (To be safe I've included
both libthr and libpthread)

[/usr/local/sbin/clamd]
libthr.so.2 libpthread-jemalloc.so.2
libthr.so libpthread-jemalloc.so.2
libpthread.so.2 libpthread-jemalloc.so.2
libpthread.so libpthread-jemalloc.so.2


4.) Preload and start
---------------------

Then preload the lib and start clamd ...

LD_PRELOAD=/usr/local/lib/jemalloc.so
/usr/local/sbin/clamd


5.) Enjoy :-)
-------------

Maybe we will add this procedure to the clamav port ...


--
Martin

----------------------------------------------------------------

--- libpthread-jemalloc/Makefile Fri Sep 29 09:04:17 2006
+++ libpthread-jemalloc/Makefile Tue Mar 13 19:00:48 2007
@@ -10,7 +10,7 @@
.if ${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH} == "sparc64"
LIB=kse
.else
-LIB=pthread
+LIB=pthread-jemalloc
SHLIBDIR?= /lib
.endif
SHLIB_MAJOR= 2
--- lib/libpthread-jemalloc/thread/thr_fork.c Sat Dec 18 19:07:37 2004
+++ lib/libpthread-jemalloc/thread/thr_fork.c Tue Mar 13 18:24:42 2007
@@ -91,7 +91,7 @@

/* Fork a new process: */
if (_kse_isthreaded() != 0) {
- _spinlock(__malloc_lock);
+ _malloc_prefork();
}
if ((ret = __sys_fork()) == 0) {
/* Child process */
@@ -107,8 +107,8 @@
}
_thr_mutex_reinit(&_thr_atfork_mutex);
} else {
- if ((_kse_isthreaded() != 0) && (__malloc_lock != NULL)) {
- _spinunlock(__malloc_lock);
+ if (_kse_isthreaded() != 0) {
+ _malloc_postfork();
}
errsave = errno;
if (curthread->attr.flags & PTHREAD_SCOPE_SYSTEM) {
--- lib/libpthread-jemalloc/thread/thr_spinlock.c Sat Dec 18 19:07:37 2004
+++ lib/libpthread-jemalloc/thread/thr_spinlock.c Tue Mar 13 18:27:59 2007
@@ -40,7 +40,7 @@
#include "spinlock.h"
#include "thr_private.h"

-#define MAX_SPINLOCKS 5
+#define MAX_SPINLOCKS 72

struct spinlock_extra {
spinlock_t *owner;
Attachments: libpthread-jemalloc.so.2 (137 KB)
  jemalloc.so (45.3 KB)

ClamAV devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.