MCPcopy Create free account
hub / github.com/NetSys/bess / BessPacketPool

Method BessPacketPool

core/packet_pool.cc:197–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

195}
196
197BessPacketPool::BessPacketPool(size_t capacity, int socket_id)
198 : PacketPool(capacity, socket_id),
199 mem_(static_cast<size_t>(FLAGS_m) * 1024 * 1024, socket_id) {
200 size_t page_shift = __builtin_ffs(getpagesize());
201 size_t element_size =
202 pool_->header_size + pool_->elt_size + pool_->trailer_size;
203
204 while (pool_->populated_size < pool_->size) {
205 size_t deficit = pool_->size - pool_->populated_size;
206 size_t bytes =
207 rte_mempool_xmem_size(deficit, element_size, page_shift, pool_->flags);
208
209 auto [addr, alloced_bytes] = mem_.AllocUpto(bytes);
210 if (addr == nullptr) {
211 LOG(WARNING) << "Node " << socket_id << ": " << capacity
212 << " packets requested, but only " << pool_->populated_size
213 << " allocated in total";
214 break;
215 }
216
217 int ret = rte_mempool_populate_iova(pool_, static_cast<char *>(addr),
218 Virt2Phy(addr), alloced_bytes, nullptr,
219 nullptr);
220 if (ret < 0) {
221 LOG(WARNING) << "Node " << socket_id
222 << ": rte_mempool_populate_iova() returned " << ret;
223 } else {
224 LOG(INFO) << "Node " << socket_id << ": " << ret << " packets added from "
225 << alloced_bytes << " bytes";
226 }
227 }
228
229 PostPopulate();
230}
231
232DpdkPacketPool::DpdkPacketPool(size_t capacity, int socket_id)
233 : PacketPool(capacity, socket_id) {

Callers

nothing calls this directly

Calls 2

Virt2PhyFunction · 0.85
AllocUptoMethod · 0.80

Tested by

no test coverage detected