J'ai besoin d'envoyer (échanger) un volume élevé de données périodiquement avec la latence la plus faible possible entre 2 machines. Le réseau est plutôt rapide (par exemple 1 Gbit ou même 2G +). Os est linux. Est-il plus rapide d'utiliser 1 socket tcp (pour send et recv) ou d'utiliser 2 socket tcp uni-dirigé? Le test pour cette tâche est très similaire au benchmark réseau NetPIPE - mesurer la latence et la bande passante pour des tailles de 2^1 à 2^13 octets, chaque taille étant envoyée et reçue 3 fois au moins (en tâche sémantique le nombre d'envois est plus grand, les deux processus enverront et recevront, comme le ping-pong peut-être).une prise tcp à deux directions OU deux une direction? (linux, high volume, low latency)
L'avantage de 2 connexions unidirectionnelles dirigé proviennent de Linux:
http://lxr.linux.no/linux+v2.6.18/net/ipv4/tcp_input.c#L3847
3847/*
3848 * TCP receive function for the ESTABLISHED state.
3849 *
3850 * It is split into a fast path and a slow path. The fast path is
3851 * disabled when:
...
3859 * - Data is sent in both directions. Fast path only supports pure senders
3860 * or pure receivers (this means either the sequence number or the ack
3861 * value must stay constant)
...
3863 *
3864 * When these conditions are not satisfied it drops into a standard
3865 * receive procedure patterned after RFC793 to handle all cases.
3866 * The first three cases are guaranteed by proper pred_flags setting,
3867 * the rest is checked inline. Fast processing is turned on in
3868 * tcp_data_queue when everything is OK.
Toutes les autres conditions pour la désactivation de chemin rapide est faux. Et seulement socket non-non-redirigé arrête le noyau de fastpath en recevoir
Salut, vous pouvez vérifier le nombre d'utilisation du chemin rapide avec l'en-tête de paquets 'netstat -s' param' prédit et directement mis en file d'attente à l'utilisateur '' NET_INC_STATS_BH (LINUX_MIB_TCPHPHITSTOUSER); ' – osgx