Changeset 207
- Timestamp:
- 05/08/06 00:41:55 (2 years ago)
- Files:
-
- eaccelerator/trunk/ChangeLog (modified) (1 diff)
- eaccelerator/trunk/cache.c (modified) (5 diffs)
- eaccelerator/trunk/config.m4 (modified) (1 diff)
- eaccelerator/trunk/ea_dasm.c (modified) (1 diff)
- eaccelerator/trunk/ea_info.c (modified) (3 diffs)
- eaccelerator/trunk/eaccelerator.c (modified) (11 diffs)
- eaccelerator/trunk/eaccelerator.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
eaccelerator/trunk/ChangeLog
r206 r207 1 2006-05-07 Bart Vanbrabant <bart.vanbrabant at zoeloelip.be> 2 3 * Added directory hashing for md5 and inode based keys based on a patch 4 from <mattias at efterfesten.com>, default is 2 levels deep. 5 * Renamed some left over MM based names to EA. 6 * Increased default hash size for user and script to 512 for extra 7 performance. 8 1 9 2006-05-04 Bart Vanbrabant <bart.vanbrabant at zoeloelip.be> 2 10 eaccelerator/trunk/cache.c
r201 r207 298 298 * storing to shared memory 299 299 */ 300 slot = q->hv & MM_USER_HASH_MAX;300 slot = q->hv & EA_USER_HASH_MAX; 301 301 hv = q->hv; 302 302 EACCELERATOR_LOCK_RW(); … … 337 337 xkey = build_key(key, key_len, &xlen TSRMLS_CC); 338 338 hv = hash_mm(xkey, xlen); 339 slot = hv & MM_USER_HASH_MAX;339 slot = hv & EA_USER_HASH_MAX; 340 340 341 341 if (eaccelerator_mm_instance != NULL && (where == eaccelerator_shm_and_disk … … 533 533 where == eaccelerator_shm || where == eaccelerator_shm_only)) { 534 534 hv = hash_mm(xkey, xlen); 535 slot = hv & MM_USER_HASH_MAX;535 slot = hv & EA_USER_HASH_MAX; 536 536 537 537 EACCELERATOR_UNPROTECT(); … … 574 574 EACCELERATOR_UNPROTECT(); 575 575 EACCELERATOR_LOCK_RW(); 576 for (i = 0; i < MM_USER_HASH_SIZE; i++) {576 for (i = 0; i < EA_USER_HASH_SIZE; i++) { 577 577 mm_user_cache_entry **p = &eaccelerator_mm_instance->user_hash[i]; 578 578 while (*p != NULL) { … … 618 618 array_init(return_value); 619 619 620 for (i = 0; i < MM_USER_HASH_SIZE; ++i) {620 for (i = 0; i < EA_USER_HASH_SIZE; ++i) { 621 621 p = eaccelerator_mm_instance->user_hash[i]; 622 622 while(p != NULL) { eaccelerator/trunk/config.m4
r204 r207 66 66 67 67 AC_ARG_WITH(eaccelerator-info, 68 [ --without-eaccelerator-info Do not compile the eAccelerator information functions],[68 [ --without-eaccelerator-info Do not compile the eAccelerator information functions],[ 69 69 eaccelerator_info=$withval 70 70 ],[ eaccelerator/trunk/ea_dasm.c
r201 r207 514 514 EACCELERATOR_LOCK_RD(); 515 515 EACCELERATOR_PROTECT(); 516 for (slot = 0; slot < MM_HASH_SIZE; slot++) {516 for (slot = 0; slot < EA_HASH_SIZE; slot++) { 517 517 p = eaccelerator_mm_instance->hash[slot]; 518 518 while (p != NULL) { eaccelerator/trunk/ea_info.c
r188 r207 227 227 EACCELERATOR_UNPROTECT (); 228 228 EACCELERATOR_LOCK_RW (); 229 for (i = 0; i < MM_HASH_SIZE; i++) {229 for (i = 0; i < EA_HASH_SIZE; i++) { 230 230 p = eaccelerator_mm_instance->hash[i]; 231 231 while (p != NULL) { … … 244 244 eaccelerator_mm_instance->hash[i] = NULL; 245 245 } 246 for (i = 0; i < MM_USER_HASH_SIZE; i++) {246 for (i = 0; i < EA_USER_HASH_SIZE; i++) { 247 247 mm_user_cache_entry *p = eaccelerator_mm_instance->user_hash[i]; 248 248 while (p != NULL) { … … 379 379 array_init(return_value); 380 380 381 for (i = 0; i < MM_HASH_SIZE; i++) {381 for (i = 0; i < EA_HASH_SIZE; i++) { 382 382 p = eaccelerator_mm_instance->hash[i]; 383 383 while (p != NULL) { eaccelerator/trunk/eaccelerator.c
r201 r207 144 144 hv = hash_mm(key, strlen(key)); 145 145 #endif 146 slot = hv & MM_HASH_MAX;146 slot = hv & EA_HASH_MAX; 147 147 148 148 EACCELERATOR_LOCK_RW(); … … 207 207 unsigned int slot; 208 208 #ifdef EACCELERATOR_USE_INODE 209 slot = (x->st_dev + x->st_ino) & MM_HASH_MAX;209 slot = (x->st_dev + x->st_ino) & EA_HASH_MAX; 210 210 #else 211 211 x->hv = hash_mm(x->realfilename, strlen(x->realfilename)); 212 slot = x->hv & MM_HASH_MAX;212 slot = x->hv & EA_HASH_MAX; 213 213 #endif 214 214 … … 368 368 */ 369 369 370 static char num2hex[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; 371 370 372 #ifdef EACCELERATOR_USE_INODE 371 373 static int eaccelerator_inode_key(char* s, dev_t dev, ino_t ino TSRMLS_DC) { 372 int n; 373 strncpy(s, EAG(cache_dir), MAXPATHLEN-1); 374 strlcat(s, "/eaccelerator-", MAXPATHLEN-1); 374 int n, i; 375 snprintf(s, MAXPATHLEN-1, "%s/", EAG(cache_dir)); 375 376 n = strlen(s); 377 for (i = 1; i <= EACCELERATOR_HASH_LEVEL && n < MAXPATHLEN - 1; i++) { 378 s[n++] = num2hex[(ino >> (i*4)) & 0xf]; 379 s[n++] = '/'; 380 } 381 s[n] = 0; 382 strlcat(s, "eaccelerator-", MAXPATHLEN-1); 383 n += sizeof("eaccelerator-") - 1; 376 384 while (dev > 0) { 377 385 if (n >= MAXPATHLEN) return 0; … … 399 407 PHP_MD5_CTX context; 400 408 unsigned char digest[16]; 409 int i; 410 int n; 401 411 402 412 md5str[0] = '\0'; … … 405 415 PHP_MD5Final(digest, &context); 406 416 make_digest(md5str, digest); 407 snprintf(s, MAXPATHLEN-1, "%s%s%s", EAG(cache_dir), prefix, md5str); 417 snprintf(s, MAXPATHLEN-1, "%s/", EAG(cache_dir)); 418 n = strlen(s); 419 for (i = 0; i < EACCELERATOR_HASH_LEVEL && n < MAXPATHLEN - 1; i++) { 420 s[n++] = md5str[i]; 421 s[n++] = '/'; 422 } 423 s[n] = 0; 424 snprintf(s, MAXPATHLEN-1, "%s%s%s", s, prefix, md5str); 408 425 return 1; 409 426 #else … … 437 454 EACCELERATOR_LOCK_RW(); 438 455 eaccelerator_mm_instance->last_prune = t; 439 for (i = 0; i < MM_HASH_SIZE; i++) {456 for (i = 0; i < EA_HASH_SIZE; i++) { 440 457 mm_cache_entry **p = &eaccelerator_mm_instance->hash[i]; 441 458 while (*p != NULL) { … … 588 605 /******************************************************************************/ 589 606 /* Cache file functions. */ 590 /* TODO: create cache subdirectories -> speed improvement highly used servers */591 607 /******************************************************************************/ 592 608 … … 729 745 EACCELERATOR_FLOCK(f, LOCK_UN); 730 746 close(f); 747 } else { 748 ea_debug_log("EACCELERATOR: Open for write failed for \"%s\": %s\n", s, strerror(errno)); 731 749 } 732 750 return ret; … … 1965 1983 } 1966 1984 1985 static void make_hash_dirs(char *fullpath, int lvl) { 1986 int i, j; 1987 int n = strlen(fullpath); 1988 mode_t old_umask = umask(0); 1989 1990 if (lvl < 1) 1991 return; 1992 if (fullpath[n-1] != '/') 1993 fullpath[n++] = '/'; 1994 1995 for (j = 0; j < 16; j++) { 1996 fullpath[n] = num2hex[j]; 1997 fullpath[n+1] = 0; 1998 mkdir(fullpath, 0777); 1999 make_hash_dirs(fullpath, lvl-1); 2000 } 2001 fullpath[n+2] = 0; 2002 umask(old_umask); 2003 } 2004 2005 1967 2006 PHP_MINIT_FUNCTION(eaccelerator) { 2007 char fullpath[MAXPATHLEN]; 2008 1968 2009 if (type == MODULE_PERSISTENT) { 1969 2010 #ifndef ZEND_WIN32 1970 2011 if (strcmp(sapi_module.name,"apache") == 0) { 1971 /* Is the parent process - init */1972 /*1973 sleep(1);1974 if (getppid() != 1) {1975 */1976 2012 if (getpid() != getpgrp()) { 1977 2013 return SUCCESS; … … 1980 2016 #endif 1981 2017 #ifdef WITH_EACCELERATOR_LOADER 1982 if (zend_hash_exists(&module_registry, EACCELERATOR_LOADER_EXTENSION_NAME, sizeof(EACCELERATOR_LOADER_EXTENSION_NAME))) { 1983 zend_error(E_CORE_WARNING,"Extension \"%s\" is not need with \"%s\". Remove it from php.ini\n", EACCELERATOR_LOADER_EXTENSION_NAME, EACCELERATOR_EXTENSION_NAME); 1984 zend_hash_del(&module_registry, EACCELERATOR_LOADER_EXTENSION_NAME, sizeof(EACCELERATOR_LOADER_EXTENSION_NAME)); 2018 if (zend_hash_exists(&module_registry, EACCELERATOR_LOADER_EXTENSION_NAME, 2019 sizeof(EACCELERATOR_LOADER_EXTENSION_NAME))) { 2020 zend_error(E_CORE_WARNING,"Extension \"%s\" is not need with \"%s\". Remove it from php.ini\n", 2021 EACCELERATOR_LOADER_EXTENSION_NAME, EACCELERATOR_EXTENSION_NAME); 2022 zend_hash_del(&module_registry, EACCELERATOR_LOADER_EXTENSION_NAME, 2023 sizeof(EACCELERATOR_LOADER_EXTENSION_NAME)); 1985 2024 } 1986 2025 #endif … … 2006 2045 2007 2046 ea_debug_init(TSRMLS_C); 2047 2048 snprintf(fullpath, MAXPATHLEN-1, "%s/", EAG(cache_dir)); 2049 make_hash_dirs(fullpath, EACCELERATOR_HASH_LEVEL); 2008 2050 2009 2051 if (type == MODULE_PERSISTENT && eaccelerator/trunk/eaccelerator.h
r205 r207 148 148 #define EACCELERATOR_UNBLOCK_INTERRUPTIONS() HANDLE_UNBLOCK_INTERRUPTIONS() 149 149 150 #define MM_HASH_SIZE 256 151 #define MM_USER_HASH_SIZE 256 152 #define MM_HASH_MAX (MM_HASH_SIZE-1) 153 #define MM_USER_HASH_MAX (MM_USER_HASH_SIZE-1) 150 #define EACCELERATOR_HASH_LEVEL 2 151 #define EA_HASH_SIZE 512 152 #define EA_USER_HASH_SIZE 512 153 154 #define EA_HASH_MAX (EA_HASH_SIZE-1) 155 #define EA_USER_HASH_MAX (EA_USER_HASH_SIZE-1) 154 156 155 157 #define eaccelerator_malloc(size) mm_malloc_lock(eaccelerator_mm_instance->mm, size) … … 339 341 mm_lock_entry *locks; 340 342 341 mm_cache_entry *hash[ MM_HASH_SIZE];342 mm_user_cache_entry *user_hash[ MM_USER_HASH_SIZE];343 mm_cache_entry *hash[EA_HASH_SIZE]; 344 mm_user_cache_entry *user_hash[EA_USER_HASH_SIZE]; 343 345 } eaccelerator_mm; 344 346