W oryginalnej implementacji vmsplice()
, it was suggested, że jeśli miałeś bufor użytkownika-lądowania 2x maksymalną liczbę stron, które zmieściłyby się w potoku, to powodzenie vmsplice() w drugiej połowie bufora zagwarantować, że jądro zostało wykonane przy użyciu pierwszej połowy bufora.vmsplice() i TCP
Ale to nie była prawda po wszystkim, a szczególnie dla TCP, strony jądra będą przechowywane do momentu otrzymania ACK z drugiej strony. Naprawiono to jako przyszłą pracę, a zatem dla TCP jądro wciąż musiałoby kopiować strony z potoku.
vmsplice()
ma opcję SPLICE_F_GIFT
, która sortuje, zajmuje się tym, ale problem polega na tym, że ujawnia to dwa inne problemy - jak skutecznie pobierać nowe strony z jądra i jak zmniejszyć koszowanie pamięci podręcznej. Pierwszym problemem jest to, że mmap wymaga, aby jądro usunęło strony, a drugim problemem jest to, że chociaż mmap może używać fantazyjnej funkcji kscrubd w jądrze, zwiększa to działający zestaw procesu (usuwanie kosza podręcznego).
Na tej podstawie, mam następujące pytania:
- Jaki jest obecny stan powiadamiania o bezpiecznej przestrzeni użytkownika ponownego wykorzystywania stron? Szczególnie interesują mnie strony splice() d na gnieździe (TCP). Czy coś się wydarzyło w ciągu ostatnich 5 lat?
- Czy aktualna najlepsza praktyka w zakresie zerowego kopiowania na serwerze TCP jest lepsza od dzisiejszych?
Go prosić [email protected] – ydroneaud