io_uring

io_uring (wcześniej znany jako aioring ) to interfejs wywołań systemowych jądra Linuksa dla asynchronicznych operacji we/wy urządzeń pamięci masowej, rozwiązujący problemy z wydajnością z podobnymi interfejsami zapewnianymi przez funkcje takie jak read() / write() lub aio_read() / aio_write() itp. dla operacje na danych, do których dostęp mają deskryptory plików .

Rozwój jest w toku, nad którym pracował głównie Jens Axboe z Meta.

Interfejs

Działa poprzez tworzenie dwóch cyklicznych buforów , zwanych „pierścieniami kolejek”, służących odpowiednio do przechowywania przedłożonych i zakończonych żądań we/wy. W przypadku urządzeń pamięci masowej są one nazywane kolejką przesyłania (SQ) i kolejką zakończenia (CQ). Utrzymywanie tych buforów współużytkowanych przez jądro i aplikację pomaga zwiększyć wydajność operacji we/wy , eliminując konieczność wydawania dodatkowych i kosztownych wywołań systemowych w celu skopiowania tych buforów między nimi. Zgodnie z dokumentem projektowym io_uring, bufor SQ jest zapisywalny tylko przez aplikacje konsumenckie, a bufor CQ jest zapisywalny tylko przez jądro.

Historia

Interfejs jądra został przyjęty w jądrze Linuksa w wersji 5.1. Biblioteka liburing zapewnia interfejs API do łatwej interakcji z interfejsem jądra z przestrzeni użytkownika . Jądro Linuksa obsługuje asynchroniczne operacje we/wy od wersji 2.5, ale uznano je za trudne w użyciu i nieefektywne. Ten starszy interfejs API obsługiwał tylko niektóre niszowe przypadki użycia .

Linki zewnętrzne