mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-01 16:28:09 +08:00
parent
1c03b7d687
commit
4fa108dbbf
147
src/H5Cpkg.h
147
src/H5Cpkg.h
@ -1295,32 +1295,6 @@ if ( ( (cache_ptr)->index_size != \
|
||||
H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, (entry_ptr != NULL), depth) \
|
||||
}
|
||||
|
||||
#define H5C__SEARCH_INDEX_NO_STATS(cache_ptr, Addr, entry_ptr, fail_val) \
|
||||
{ \
|
||||
int k; \
|
||||
H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val) \
|
||||
k = H5C__HASH_FCN(Addr); \
|
||||
entry_ptr = ((cache_ptr)->index)[k]; \
|
||||
while(entry_ptr) { \
|
||||
if(H5F_addr_eq(Addr, (entry_ptr)->addr)) { \
|
||||
H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, k, fail_val) \
|
||||
if(entry_ptr != ((cache_ptr)->index)[k]) { \
|
||||
if((entry_ptr)->ht_next) \
|
||||
(entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
|
||||
HDassert((entry_ptr)->ht_prev != NULL); \
|
||||
(entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
|
||||
((cache_ptr)->index)[k]->ht_prev = (entry_ptr); \
|
||||
(entry_ptr)->ht_next = ((cache_ptr)->index)[k]; \
|
||||
(entry_ptr)->ht_prev = NULL; \
|
||||
((cache_ptr)->index)[k] = (entry_ptr); \
|
||||
H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
(entry_ptr) = (entry_ptr)->ht_next; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define H5C__UPDATE_INDEX_FOR_ENTRY_CLEAN(cache_ptr, entry_ptr) \
|
||||
{ \
|
||||
H5C__PRE_HT_UPDATE_FOR_ENTRY_CLEAN_SC(cache_ptr, entry_ptr); \
|
||||
@ -1733,127 +1707,6 @@ if ( ( (cache_ptr)->index_size != \
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Macro: H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS
|
||||
*
|
||||
* Purpose: For efficiency, we sometimes change the order of flushes --
|
||||
* but doing so can confuse the replacement policy. This
|
||||
* macro exists to allow us to specify an entry as the
|
||||
* most recently touched so we can repair any such
|
||||
* confusion.
|
||||
*
|
||||
* At present, we only support the modified LRU policy, so
|
||||
* this function deals with that case unconditionally. If
|
||||
* we ever support other replacement policies, the macro
|
||||
* should switch on the current policy and act accordingly.
|
||||
*
|
||||
* Return: N/A
|
||||
*
|
||||
* Programmer: John Mainzer, 10/13/05
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
|
||||
|
||||
#define H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
|
||||
{ \
|
||||
HDassert( (cache_ptr) ); \
|
||||
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
|
||||
HDassert( (entry_ptr) ); \
|
||||
HDassert( !((entry_ptr)->is_protected) ); \
|
||||
HDassert( !((entry_ptr)->is_read_only) ); \
|
||||
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
|
||||
HDassert( (entry_ptr)->size > 0 ); \
|
||||
\
|
||||
if ( ! ((entry_ptr)->is_pinned) ) { \
|
||||
\
|
||||
/* modified LRU specific code */ \
|
||||
\
|
||||
/* remove the entry from the LRU list, and re-insert it at the head.\
|
||||
*/ \
|
||||
\
|
||||
H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
|
||||
(cache_ptr)->LRU_tail_ptr, \
|
||||
(cache_ptr)->LRU_list_len, \
|
||||
(cache_ptr)->LRU_list_size, (fail_val)) \
|
||||
\
|
||||
H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
|
||||
(cache_ptr)->LRU_tail_ptr, \
|
||||
(cache_ptr)->LRU_list_len, \
|
||||
(cache_ptr)->LRU_list_size, (fail_val)) \
|
||||
\
|
||||
/* Use the dirty flag to infer whether the entry is on the clean or \
|
||||
* dirty LRU list, and remove it. Then insert it at the head of \
|
||||
* the same LRU list. \
|
||||
* \
|
||||
* At least initially, all entries should be clean. That may \
|
||||
* change, so we may as well deal with both cases now. \
|
||||
*/ \
|
||||
\
|
||||
if ( (entry_ptr)->is_dirty ) { \
|
||||
H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
|
||||
(cache_ptr)->dLRU_tail_ptr, \
|
||||
(cache_ptr)->dLRU_list_len, \
|
||||
(cache_ptr)->dLRU_list_size, (fail_val)) \
|
||||
\
|
||||
H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
|
||||
(cache_ptr)->dLRU_tail_ptr, \
|
||||
(cache_ptr)->dLRU_list_len, \
|
||||
(cache_ptr)->dLRU_list_size, (fail_val)) \
|
||||
} else { \
|
||||
H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
|
||||
(cache_ptr)->cLRU_tail_ptr, \
|
||||
(cache_ptr)->cLRU_list_len, \
|
||||
(cache_ptr)->cLRU_list_size, (fail_val)) \
|
||||
\
|
||||
H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
|
||||
(cache_ptr)->cLRU_tail_ptr, \
|
||||
(cache_ptr)->cLRU_list_len, \
|
||||
(cache_ptr)->cLRU_list_size, (fail_val)) \
|
||||
} \
|
||||
\
|
||||
/* End modified LRU specific code. */ \
|
||||
} \
|
||||
} /* H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS */
|
||||
|
||||
#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
|
||||
|
||||
#define H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
|
||||
{ \
|
||||
HDassert( (cache_ptr) ); \
|
||||
HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC ); \
|
||||
HDassert( (entry_ptr) ); \
|
||||
HDassert( !((entry_ptr)->is_protected) ); \
|
||||
HDassert( !((entry_ptr)->is_read_only) ); \
|
||||
HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
|
||||
HDassert( (entry_ptr)->size > 0 ); \
|
||||
\
|
||||
if ( ! ((entry_ptr)->is_pinned) ) { \
|
||||
\
|
||||
/* modified LRU specific code */ \
|
||||
\
|
||||
/* remove the entry from the LRU list, and re-insert it at the head \
|
||||
*/ \
|
||||
\
|
||||
H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
|
||||
(cache_ptr)->LRU_tail_ptr, \
|
||||
(cache_ptr)->LRU_list_len, \
|
||||
(cache_ptr)->LRU_list_size, (fail_val)) \
|
||||
\
|
||||
H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
|
||||
(cache_ptr)->LRU_tail_ptr, \
|
||||
(cache_ptr)->LRU_list_len, \
|
||||
(cache_ptr)->LRU_list_size, (fail_val)) \
|
||||
\
|
||||
/* End modified LRU specific code. */ \
|
||||
} \
|
||||
} /* H5C__FAKE_RP_FOR_MOST_RECENT_ACCESS */
|
||||
|
||||
#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Macro: H5C__UPDATE_RP_FOR_EVICTION
|
||||
|
Loading…
Reference in New Issue
Block a user