Lines Matching +full:re +full:- +full:tuning
25 return ((bqueue_node_t *)((char *)data + q->bq_node_offset)); in obj2node()
32 * is a performance tuning value; when the queue is full, any threads
33 * attempting to enqueue records will block. They will block until they're
42 * or -1 on failure.
55 return (-1); in bqueue_init()
57 list_create(&q->bq_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
59 list_create(&q->bq_dequeuing_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
61 list_create(&q->bq_enqueuing_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
63 cv_init(&q->bq_add_cv, NULL, CV_DEFAULT, NULL); in bqueue_init()
64 cv_init(&q->bq_pop_cv, NULL, CV_DEFAULT, NULL); in bqueue_init()
65 mutex_init(&q->bq_lock, NULL, MUTEX_DEFAULT, NULL); in bqueue_init()
66 q->bq_node_offset = node_offset; in bqueue_init()
67 q->bq_size = 0; in bqueue_init()
68 q->bq_dequeuing_size = 0; in bqueue_init()
69 q->bq_enqueuing_size = 0; in bqueue_init()
70 q->bq_maxsize = size; in bqueue_init()
71 q->bq_fill_fraction = fill_fraction; in bqueue_init()
83 mutex_enter(&q->bq_lock); in bqueue_destroy()
84 ASSERT0(q->bq_size); in bqueue_destroy()
85 ASSERT0(q->bq_dequeuing_size); in bqueue_destroy()
86 ASSERT0(q->bq_enqueuing_size); in bqueue_destroy()
87 cv_destroy(&q->bq_add_cv); in bqueue_destroy()
88 cv_destroy(&q->bq_pop_cv); in bqueue_destroy()
89 list_destroy(&q->bq_list); in bqueue_destroy()
90 list_destroy(&q->bq_dequeuing_list); in bqueue_destroy()
91 list_destroy(&q->bq_enqueuing_list); in bqueue_destroy()
92 mutex_exit(&q->bq_lock); in bqueue_destroy()
93 mutex_destroy(&q->bq_lock); in bqueue_destroy()
100 ASSERT3U(item_size, <=, q->bq_maxsize); in bqueue_enqueue_impl()
102 obj2node(q, data)->bqn_size = item_size; in bqueue_enqueue_impl()
103 q->bq_enqueuing_size += item_size; in bqueue_enqueue_impl()
104 list_insert_tail(&q->bq_enqueuing_list, data); in bqueue_enqueue_impl()
107 q->bq_enqueuing_size >= q->bq_maxsize / q->bq_fill_fraction) { in bqueue_enqueue_impl()
109 mutex_enter(&q->bq_lock); in bqueue_enqueue_impl()
110 while (q->bq_size > q->bq_maxsize) { in bqueue_enqueue_impl()
111 cv_wait_sig(&q->bq_add_cv, &q->bq_lock); in bqueue_enqueue_impl()
113 q->bq_size += q->bq_enqueuing_size; in bqueue_enqueue_impl()
114 list_move_tail(&q->bq_list, &q->bq_enqueuing_list); in bqueue_enqueue_impl()
115 q->bq_enqueuing_size = 0; in bqueue_enqueue_impl()
116 cv_broadcast(&q->bq_pop_cv); in bqueue_enqueue_impl()
117 mutex_exit(&q->bq_lock); in bqueue_enqueue_impl()
134 * to wake up, even if we're below the fill fraction. We have this in a single
153 void *ret = list_remove_head(&q->bq_dequeuing_list); in bqueue_dequeue()
160 mutex_enter(&q->bq_lock); in bqueue_dequeue()
161 while (q->bq_size == 0) { in bqueue_dequeue()
162 cv_wait_sig(&q->bq_pop_cv, &q->bq_lock); in bqueue_dequeue()
164 ASSERT0(q->bq_dequeuing_size); in bqueue_dequeue()
165 ASSERT(list_is_empty(&q->bq_dequeuing_list)); in bqueue_dequeue()
166 list_move_tail(&q->bq_dequeuing_list, &q->bq_list); in bqueue_dequeue()
167 q->bq_dequeuing_size = q->bq_size; in bqueue_dequeue()
168 q->bq_size = 0; in bqueue_dequeue()
169 cv_broadcast(&q->bq_add_cv); in bqueue_dequeue()
170 mutex_exit(&q->bq_lock); in bqueue_dequeue()
171 ret = list_remove_head(&q->bq_dequeuing_list); in bqueue_dequeue()
173 q->bq_dequeuing_size -= obj2node(q, ret)->bqn_size; in bqueue_dequeue()