Optimize packet I/O and timeouts
- Introduce per-thread I/O statistics for packet I/O to reduce performance overhead. - Implement packet_io_yield() for better thread management during I/O operations. - Refactor time wheel management: - Replace timeouts-based cron tasks with (now_ts - last_ts > timeout) for scheduled tasks. - Update the time wheel every 5 ms for improved time management.
This commit is contained in:
@@ -45,7 +45,7 @@ void packet_io_free(struct packet_io *packet_io)
|
||||
{
|
||||
if (packet_io)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
marsio_io_free(packet_io->marsio);
|
||||
}
|
||||
@@ -58,21 +58,9 @@ void packet_io_free(struct packet_io *packet_io)
|
||||
}
|
||||
}
|
||||
|
||||
struct io_stat *packet_io_get_stat(struct packet_io *packet_io)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
{
|
||||
return marsio_io_get_stat(packet_io->marsio);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dumpfile_io_get_stat(packet_io->dumpfile);
|
||||
}
|
||||
}
|
||||
|
||||
int packet_io_init(struct packet_io *packet_io, uint16_t thr_idx)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
return marsio_io_init(packet_io->marsio, thr_idx);
|
||||
}
|
||||
@@ -84,7 +72,7 @@ int packet_io_init(struct packet_io *packet_io, uint16_t thr_idx)
|
||||
|
||||
int packet_io_ingress(struct packet_io *packet_io, uint16_t thr_idx, struct packet *pkts, int nr_pkts)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
return marsio_io_ingress(packet_io->marsio, thr_idx, pkts, nr_pkts);
|
||||
}
|
||||
@@ -96,7 +84,7 @@ int packet_io_ingress(struct packet_io *packet_io, uint16_t thr_idx, struct pack
|
||||
|
||||
void packet_io_egress(struct packet_io *packet_io, uint16_t thr_idx, struct packet *pkts, int nr_pkts)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
marsio_io_egress(packet_io->marsio, thr_idx, pkts, nr_pkts);
|
||||
}
|
||||
@@ -108,7 +96,7 @@ void packet_io_egress(struct packet_io *packet_io, uint16_t thr_idx, struct pack
|
||||
|
||||
void packet_io_drop(struct packet_io *packet_io, uint16_t thr_idx, struct packet *pkts, int nr_pkts)
|
||||
{
|
||||
if (packet_io->mode == PACKET_IO_MARSIO)
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
marsio_io_drop(packet_io->marsio, thr_idx, pkts, nr_pkts);
|
||||
}
|
||||
@@ -117,3 +105,27 @@ void packet_io_drop(struct packet_io *packet_io, uint16_t thr_idx, struct packet
|
||||
dumpfile_io_drop(packet_io->dumpfile, thr_idx, pkts, nr_pkts);
|
||||
}
|
||||
}
|
||||
|
||||
void packet_io_yield(struct packet_io *packet_io, uint16_t thr_idx, uint64_t timeout_ms)
|
||||
{
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
marsio_io_yield(packet_io->marsio, thr_idx, timeout_ms);
|
||||
}
|
||||
else
|
||||
{
|
||||
dumpfile_io_yield(packet_io->dumpfile, thr_idx, timeout_ms);
|
||||
}
|
||||
}
|
||||
|
||||
struct io_stat *packet_io_stat(struct packet_io *packet_io, uint16_t thr_idx)
|
||||
{
|
||||
if (likely(packet_io->mode == PACKET_IO_MARSIO))
|
||||
{
|
||||
return marsio_io_stat(packet_io->marsio, thr_idx);
|
||||
}
|
||||
else
|
||||
{
|
||||
return dumpfile_io_stat(packet_io->dumpfile, thr_idx);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user