Lines Matching +full:re +full:- +full:tuning

1 // SPDX-License-Identifier: CDDL-1.0
26 return ((bqueue_node_t *)((char *)data + q->bq_node_offset)); in obj2node()
33 * is a performance tuning value; when the queue is full, any threads
34 * attempting to enqueue records will block. They will block until they're
43 * or -1 on failure.
56 return (-1); in bqueue_init()
58 list_create(&q->bq_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
60 list_create(&q->bq_dequeuing_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
62 list_create(&q->bq_enqueuing_list, node_offset + sizeof (bqueue_node_t), in bqueue_init()
64 cv_init(&q->bq_add_cv, NULL, CV_DEFAULT, NULL); in bqueue_init()
65 cv_init(&q->bq_pop_cv, NULL, CV_DEFAULT, NULL); in bqueue_init()
66 mutex_init(&q->bq_lock, NULL, MUTEX_DEFAULT, NULL); in bqueue_init()
67 q->bq_node_offset = node_offset; in bqueue_init()
68 q->bq_size = 0; in bqueue_init()
69 q->bq_dequeuing_size = 0; in bqueue_init()
70 q->bq_enqueuing_size = 0; in bqueue_init()
71 q->bq_maxsize = size; in bqueue_init()
72 q->bq_fill_fraction = fill_fraction; in bqueue_init()
84 mutex_enter(&q->bq_lock); in bqueue_destroy()
85 ASSERT0(q->bq_size); in bqueue_destroy()
86 ASSERT0(q->bq_dequeuing_size); in bqueue_destroy()
87 ASSERT0(q->bq_enqueuing_size); in bqueue_destroy()
88 cv_destroy(&q->bq_add_cv); in bqueue_destroy()
89 cv_destroy(&q->bq_pop_cv); in bqueue_destroy()
90 list_destroy(&q->bq_list); in bqueue_destroy()
91 list_destroy(&q->bq_dequeuing_list); in bqueue_destroy()
92 list_destroy(&q->bq_enqueuing_list); in bqueue_destroy()
93 mutex_exit(&q->bq_lock); in bqueue_destroy()
94 mutex_destroy(&q->bq_lock); in bqueue_destroy()
101 ASSERT3U(item_size, <=, q->bq_maxsize); in bqueue_enqueue_impl()
103 obj2node(q, data)->bqn_size = item_size; in bqueue_enqueue_impl()
104 q->bq_enqueuing_size += item_size; in bqueue_enqueue_impl()
105 list_insert_tail(&q->bq_enqueuing_list, data); in bqueue_enqueue_impl()
108 q->bq_enqueuing_size >= q->bq_maxsize / q->bq_fill_fraction) { in bqueue_enqueue_impl()
110 mutex_enter(&q->bq_lock); in bqueue_enqueue_impl()
111 while (q->bq_size > q->bq_maxsize) { in bqueue_enqueue_impl()
112 cv_wait_sig(&q->bq_add_cv, &q->bq_lock); in bqueue_enqueue_impl()
114 q->bq_size += q->bq_enqueuing_size; in bqueue_enqueue_impl()
115 list_move_tail(&q->bq_list, &q->bq_enqueuing_list); in bqueue_enqueue_impl()
116 q->bq_enqueuing_size = 0; in bqueue_enqueue_impl()
117 cv_broadcast(&q->bq_pop_cv); in bqueue_enqueue_impl()
118 mutex_exit(&q->bq_lock); in bqueue_enqueue_impl()
135 * to wake up, even if we're below the fill fraction. We have this in a single
154 void *ret = list_remove_head(&q->bq_dequeuing_list); in bqueue_dequeue()
161 mutex_enter(&q->bq_lock); in bqueue_dequeue()
162 while (q->bq_size == 0) { in bqueue_dequeue()
163 cv_wait_sig(&q->bq_pop_cv, &q->bq_lock); in bqueue_dequeue()
165 ASSERT0(q->bq_dequeuing_size); in bqueue_dequeue()
166 ASSERT(list_is_empty(&q->bq_dequeuing_list)); in bqueue_dequeue()
167 list_move_tail(&q->bq_dequeuing_list, &q->bq_list); in bqueue_dequeue()
168 q->bq_dequeuing_size = q->bq_size; in bqueue_dequeue()
169 q->bq_size = 0; in bqueue_dequeue()
170 cv_broadcast(&q->bq_add_cv); in bqueue_dequeue()
171 mutex_exit(&q->bq_lock); in bqueue_dequeue()
172 ret = list_remove_head(&q->bq_dequeuing_list); in bqueue_dequeue()
174 q->bq_dequeuing_size -= obj2node(q, ret)->bqn_size; in bqueue_dequeue()