pub struct SqpollIoUring { /* private fields */ }Expand description
IoUring créé avec IORING_SETUP_SQPOLL : un thread kernel scrute la
SQ. En régime établi, la soumission ne fait aucun io_uring_enter (juste
la publication release) → latence minimale.
Coût : un cœur kernel dédié à scruter. Excellent sous forte charge où le CPU abonde ; mauvais choix sur Pi 4 (cœurs rares). À réserver aux profils où la latence prime (mesure, Principe 5).
Implementations§
Source§impl SqpollIoUring
impl SqpollIoUring
Sourcepub fn new(
entries: NonZeroU32,
idle: Duration,
cpu: Option<u32>,
) -> Result<Self, Errno>
pub fn new( entries: NonZeroU32, idle: Duration, cpu: Option<u32>, ) -> Result<Self, Errno>
Crée un ring SQPOLL. idle : délai d’inactivité avant que le thread
kernel ne s’endorme (NEED_WAKEUP). cpu : épinglage optionnel du thread
(SQ_AFF).
§Errors
[Errno::EPERM] si SQPOLL n’est pas autorisé par la config ; autres
erreurs de IoUringBuilder::build.
Sourcepub fn submit(&mut self) -> Result<u32, Errno>
pub fn submit(&mut self) -> Result<u32, Errno>
Soumet les SQE en attente. En SQPOLL, aucun io_uring_enter n’est
émis si le thread kernel est éveillé (il consommera la SQ) ; s’il s’est
endormi (IORING_SQ_NEED_WAKEUP), la façade le réveille automatiquement
via io_uring_enter(.., SQ_WAKEUP) — seule magie cachée, indispensable
et documentée. Retourne le nombre de SQE en attente.
§Errors
[Errno::EINTR] remonté tel quel (ADR-021 conv. 2) ; autres errno d’enter.
Sourcepub fn submit_nop(&mut self) -> Result<SubmissionToken, Errno>
pub fn submit_nop(&mut self) -> Result<SubmissionToken, Errno>
submit_nop (Temps 1) : prépare un SQE (sans publier — Self::submit ou
Self::submit_and_wait publie).
§Errors
Voir IoUring::submit_nop.
Sourcepub fn submit_read(
&mut self,
fd: BorrowedFd<'_>,
buffer: Vec<u8>,
offset: Option<u64>,
) -> Result<SubmissionToken, Errno>
pub fn submit_read( &mut self, fd: BorrowedFd<'_>, buffer: Vec<u8>, offset: Option<u64>, ) -> Result<SubmissionToken, Errno>
Sourcepub fn submit_and_wait(&mut self, want: u32) -> Result<u32, Errno>
pub fn submit_and_wait(&mut self, want: u32) -> Result<u32, Errno>
Publie (avec réveil SQPOLL si nécessaire) puis attend au moins want
complétions (io_uring_enter(GETEVENTS)). L’attente requiert un syscall
(la soumission, elle, peut n’en demander aucun).
§Errors
[Errno::EINTR] remonté tel quel ; autres errno d’enter.