Czy można to zrobić za pomocą wiersza poleceń? man tcp mówi mi, że muszę ustawić tcp_nodelay = 1, ale nie jestem w stanie stworzyć pliku tcp_nodelay w/proc/sys/net/ipv4. Daj mi znać, jeśli istnieje sposób na wyłączenie Nagle w Linuksie.Jak można wyłączyć algorytm Walkera w Linuksie?
Odpowiedz
Ta flaga (TCP_NODELAY
) jest opcją, która może być włączona dla każdego gniazda i jest stosowana podczas tworzenia gniazda TCP. Odbywa się to w określonym celu: Algorytm Walkera jest ogólnie przydatny i pomaga radzić sobie z przeciążeniem sieci. Wątpię, czy chcesz wyłączyć system w całym systemie, ponieważ twój system prawdopodobnie ucierpi z powodu tej dezaktywacji.
Aby wyłączyć go dla danego gniazda, można zastosować opcję TCP_NODELAY
jak wyjaśniono here i here w C:
int flag = 1;
int result = setsockopt(sock, /* socket affected */
IPPROTO_TCP, /* set option at TCP level */
TCP_NODELAY, /* name of option */
(char *) &flag, /* the cast is historical cruft */
sizeof(int)); /* length of option value */
if (result < 0)
... handle the error ...
może trzeba dostosować do języka programowania, ale w zasadzie to ustawia flagę TCP_NODELAY
opcja do gniazda sock
, skutecznie wyłączająca algorytm Walkera. Jest to poprawne w każdym systemie operacyjnym z gniazdami obsługującymi standard TCP.
Jeśli nadal chcesz wyłączyć algorytm Walkera w całym systemie, dostępne są dwie opcje. Po pierwsze, możesz przekompilować jądro za pomocą odpowiedniej flagi (zobacz w tym celu podręcznik dystrybucji). Drugą opcją jest utworzenie oprogramowania ustawiającego flagę TCP_NODELAY
na każdym istniejącym połączeniu, podobnym do this code. Ta ostatnia opcja powinna być wykonywana za każdym razem, gdy w systemie tworzone jest nowe połączenie TCP.
Coś nieco czystsze byłoby, aby uaktywnić tryb niskiego latencji TCP:
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
to daje wskazówkę do stosu TCP, co do których decyzje, aby w celu zmniejszenia opóźnień (co domyślam się, co próbujesz osiągnąć przez wyłączenie algorytmu Walkera). Domyślnie jest ustawiony na optymalizację przepustowości ("0" zostanie odczytane z /proc/sys/net/ipv4/tcp_low_latency
).
Twoja odpowiedź jest poprawna, ale dlaczego rzucasz '& flag' na' char * '? 'setsockopt' oczekuje wskaźnika wartości' const void * ', więc rzutowanie na typ nie jest wymagane (każdy typ może domyślnie rzutować na' void * '): http://pubs.opengroup.org/onlinepubs/9699919799/functions/ setsockopt.html Właściwie nawet naruszasz standard C, ponieważ rzutowanie wskaźnika typu A na wskaźnik typu B, w którym żaden z typów nie jest "void *", jest faktycznie niezdefiniowanym zachowaniem według ISO-C. Masz wskaźnik do int, ale twierdzisz, że jest to wskaźnik do 'char *' (będzie działać na prawie wszystkich systemach, ale jest technicznie nieokreślony) – Mecki
Ten kod nie jest mój, ale jest kopią i wklej drugi link, jak już wspomniałem. Możesz skontaktować się z www.unixguide.net na temat tego problemu. Pamiętam, że widziałem kilka różnych sygnatur dla 'setsockopt()', z których niektóre (podobnie jak pierwszy podany link) używają 'char *' dla parametru 'flag'. Nie mam nic przeciwko zmianie odpowiedzi, o ile istnieją odniesienia do wiarygodnego prototypu 'setsockopt()' i przykład kodu do wykonania pożądanej operacji. – Soravux
- 1. Wyłącz historia w Linuksie
- 2. jak wyłączyć buforowanie w CIFS (samba) po stronie klienta w Linuksie
- 3. Jak można zastosować algorytm Apple iTunes "Genius"?
- 4. Linux. Jak wyłączyć cały dziennik?
- 5. Nie można wyłączyć dzwonków
- 6. Nie można wyłączyć android.widget.Button
- 7. Czy można wyłączyć autouzupełnianie?
- 8. Czy można skompilować VST na Linuksie?
- 9. Jak zrobić jar w Linuksie?
- 10. jak włączyć cutil.h w Linuksie
- 11. Jak liczyć użycie procesora wieloprocesowego w Linuksie
- 12. Rozwój Bada w Linuksie
- 13. Jak można programowo wyłączyć urządzenie systemowe?
- 14. Multitouch w Linuksie
- 15. Nie można wyłączyć przewidywanie tekstu
- 16. Programowanie USB w Linuksie
- 17. Obsługa wyjątków w Linuksie
- 18. Czy można wyłączyć sortowanie w hadoopie?
- 19. Czy można wyłączyć dokumentację Swift w Xcode?
- 20. Nie można wyłączyć wyświetlania katalogu w httpd.conf
- 21. Czy można wyłączyć setlocale() w procesie?
- 22. Nie można wyłączyć autoescape w jinja2
- 23. Programowanie w Swift na Linuksie
- 24. Czy można wyłączyć przewijanie listy?
- 25. Konfigurowanie Mysql ++ w Linuksie
- 26. Jak można "wyłączyć" przycisk w WPF przy użyciu wzorca MVVM?
- 27. Jak można programowo wyłączyć/włączyć 3G w systemie Android?
- 28. Google protobuf w Linuksie
- 29. Buforowanie DNS w Linuksie
- 30. jak zainstalować Adobe SDK w Linuksie?
Czy chcesz, aby system obejmował cały system? –
Tak, najlepiej chciałbym, żeby system był szeroki. –