Index: src/stat.c =================================================================== RCS file: /surf1/CVS/squid/src/stat.c,v retrieving revision 1.59 diff -w -c -r1.59 stat.c *** stat.c 1996/09/04 22:03:29 1.59 --- stat.c 1996/09/05 20:58:02 *************** *** 726,737 **** RESERVED_FD); storeAppendPrintf(sentry, "{Internal Data Structures:}\n"); ! storeAppendPrintf(sentry, "{\tHot Object Cache Items %d}\n", meta_data.hot_vm); - storeAppendPrintf(sentry, "{\tStoreEntries with MemObjects %d}\n", - meta_data.store_in_mem_objects); ! storeAppendPrintf(sentry, "{Meta Data:}\n"); storeAppendPrintf(sentry, "{\t%-25.25s %7d x %4d bytes = %6d KB}\n", "StoreEntry", meta_data.store_entries, --- 726,741 ---- RESERVED_FD); storeAppendPrintf(sentry, "{Internal Data Structures:}\n"); ! storeAppendPrintf(sentry, "{\t%6d StoreEntries}\n", ! meta_data.store_entries); ! storeAppendPrintf(sentry, "{\t%6d StoreEntries with MemObjects}\n", ! meta_data.mem_obj_count); ! storeAppendPrintf(sentry, "{\t%6d StoreEntries with MemObject Data}\n", ! meta_data.mem_data_count); ! storeAppendPrintf(sentry, "{\t%6d Hot Object Cache Items}\n", meta_data.hot_vm); ! storeAppendPrintf(sentry, "{Accounted Memory Usage:}\n"); storeAppendPrintf(sentry, "{\t%-25.25s %7d x %4d bytes = %6d KB}\n", "StoreEntry", meta_data.store_entries, Index: src/stat.h =================================================================== RCS file: /surf1/CVS/squid/src/stat.h,v retrieving revision 1.23 diff -w -c -r1.23 stat.h *** stat.h 1996/08/30 22:44:13 1.23 --- stat.h 1996/09/05 20:25:19 *************** *** 133,139 **** typedef struct _meta_data_stat { int hot_vm; int store_entries; ! int store_in_mem_objects; int ipcache_count; int fqdncache_count; int hash_links; --- 133,140 ---- typedef struct _meta_data_stat { int hot_vm; int store_entries; ! int mem_obj_count; ! int mem_data_count; int ipcache_count; int fqdncache_count; int hash_links; Index: src/store.c =================================================================== RCS file: /surf1/CVS/squid/src/store.c,v retrieving revision 1.99 diff -w -c -r1.99 store.c *** store.c 1996/09/05 19:03:48 1.99 --- store.c 1996/09/05 20:30:38 *************** *** 259,265 **** { MemObject *mem = get_free_mem_obj(); mem->reply = xcalloc(1, sizeof(struct _http_reply)); ! meta_data.store_in_mem_objects++; meta_data.misc += sizeof(struct _http_reply); debug(20, 3, "new_MemObject: returning %p\n", mem); return mem; --- 259,265 ---- { MemObject *mem = get_free_mem_obj(); mem->reply = xcalloc(1, sizeof(struct _http_reply)); ! meta_data.mem_obj_count++; meta_data.misc += sizeof(struct _http_reply); debug(20, 3, "new_MemObject: returning %p\n", mem); return mem; *************** *** 297,303 **** mem->request = NULL; memset(mem, '\0', sizeof(MemObject)); put_free_mem_obj(mem); ! meta_data.store_in_mem_objects--; meta_data.misc -= sizeof(struct _http_reply); } --- 297,303 ---- mem->request = NULL; memset(mem, '\0', sizeof(MemObject)); put_free_mem_obj(mem); ! meta_data.mem_obj_count--; meta_data.misc -= sizeof(struct _http_reply); } *************** *** 327,333 **** static mem_ptr new_MemObjectData() { debug(20, 3, "new_MemObjectData: calling memInit()\n"); ! /* meta_data.hot_vm++; */ return memInit(); } --- 327,333 ---- static mem_ptr new_MemObjectData() { debug(20, 3, "new_MemObjectData: calling memInit()\n"); ! meta_data.mem_data_count++; return memInit(); } *************** *** 343,349 **** if (mem->data) { mem->data->mem_free(mem->data); mem->data = NULL; ! /* meta_data.hot_vm--; */ } mem->e_current_len = 0; } --- 343,349 ---- if (mem->data) { mem->data->mem_free(mem->data); mem->data = NULL; ! meta_data.mem_data_count--; } mem->e_current_len = 0; } *************** *** 1836,1841 **** --- 1836,1842 ---- int list_count = 0; int n_expired = 0; int n_purged = 0; + int n_released = 0; int n_locked = 0; int i; static time_t last_warning = 0; *************** *** 1849,1871 **** return 0; debug(20, 2, "storeGetMemSpace: Starting...\n"); ! list = xcalloc(meta_data.store_in_mem_objects, sizeof(ipcache_entry *)); for (e = storeGetInMemFirst(); e; e = storeGetInMemNext()) { ! if (list_count == meta_data.store_in_mem_objects) break; - if (!storeCheckPurgeMem(e)) { - n_locked++; - continue; - } if (storeCheckExpired(e)) { debug(20, 2, "storeGetMemSpace: Expired: %s\n", e->url); n_expired++; storeRelease(e); continue; } debug(20, 3, "storeGetMemSpace: Adding '%s'\n", e->url); - *(list + list_count) = e; - list_count++; } #ifdef EXTRA_DEBUGGING debug(20, 5, "storeGetMemSpace: Current size: %7d bytes\n", store_mem_size); --- 1850,1874 ---- return 0; debug(20, 2, "storeGetMemSpace: Starting...\n"); ! list = xcalloc(meta_data.mem_obj_count, sizeof(ipcache_entry *)); for (e = storeGetInMemFirst(); e; e = storeGetInMemNext()) { ! if (list_count == meta_data.mem_obj_count) break; if (storeCheckExpired(e)) { debug(20, 2, "storeGetMemSpace: Expired: %s\n", e->url); n_expired++; storeRelease(e); + } else if (storeCheckPurgeMem(e)) { + *(list + list_count) = e; + list_count++; + } else if (!storeEntryLocked(e)) { + *(list + list_count) = e; + list_count++; + } else { + n_locked++; continue; } debug(20, 3, "storeGetMemSpace: Adding '%s'\n", e->url); } #ifdef EXTRA_DEBUGGING debug(20, 5, "storeGetMemSpace: Current size: %7d bytes\n", store_mem_size); *************** *** 1881,1920 **** /* Kick LRU out until we have enough memory space */ for (i = 0; i < list_count; i++) { ! if (meta_data.hot_vm > store_hotobj_low) { ! storePurgeMem(*(list + i)); ! n_purged++; ! } else if ((store_mem_size + size) > store_mem_low) { ! storePurgeMem(*(list + i)); ! n_purged++; ! } else break; } ! debug(20, 2, "storeGetMemSpace: After freeing size: %7d bytes\n", store_mem_size); ! debug(20, 2, "storeGetMemSpace: Purged: %7d items\n", n_purged); if (meta_data.hot_vm > store_hotobj_high) { if (squid_curtime - last_warning > 600) { debug(20, 0, "WARNING: Over hot_vm object count (%d > %d)\n", meta_data.hot_vm, store_hotobj_high); - debug(20, 0, " : %d objects locked in memory\n", n_locked); - debug(20, 0, " : purged %d of %d candidates\n", - n_purged, - list_count); last_warning = squid_curtime; } ! } else if ((store_mem_size + size) > store_mem_high) { if (squid_curtime - last_warning > 600) { debug(20, 0, "WARNING: Over store_mem high-water mark (%d > %d)\n", store_mem_size + size, store_mem_high); - debug(20, 0, " : %d objects locked in memory\n", n_locked); - debug(20, 0, " : released %d of %d candidates\n", - n_purged, - list_count); last_warning = squid_curtime; } } ! debug(20, 2, "storeGetMemSpace: Done.\n"); xfree(list); return 0; } --- 1884,1925 ---- /* Kick LRU out until we have enough memory space */ for (i = 0; i < list_count; i++) { ! if (meta_data.hot_vm < store_hotobj_low) ! if (store_mem_size + size < store_mem_low) break; + e = *(list + i); + if (storeCheckPurgeMem(e)) { + storePurgeMem(e); + n_purged++; + } else if (!storeEntryLocked(e)) { + storeRelease(e); + n_released++; + } else { + fatal_dump("storeGetMemSpace: Bad Entry in LRU list"); + } } ! i = 3; if (meta_data.hot_vm > store_hotobj_high) { if (squid_curtime - last_warning > 600) { debug(20, 0, "WARNING: Over hot_vm object count (%d > %d)\n", meta_data.hot_vm, store_hotobj_high); last_warning = squid_curtime; + i = 0; } ! } else if (store_mem_size + size > store_mem_high) { if (squid_curtime - last_warning > 600) { debug(20, 0, "WARNING: Over store_mem high-water mark (%d > %d)\n", store_mem_size + size, store_mem_high); last_warning = squid_curtime; + i = 0; } } ! debug(20, i, "storeGetMemSpace stats:\n"); ! debug(20, i, " %6d objects locked in memory\n", n_locked); ! debug(20, i, " %6d LRU candidates\n", list_count); ! debug(20, i, " %6d were purged\n", n_purged); ! debug(20, i, " %6d were released\n", n_released); xfree(list); return 0; }