it's a Per-CPU variable.
Default: 64
-low_latency_read
+busy_read
----------------
Low latency busy poll timeout for socket reads. (needs CONFIG_NET_LL_RX_POLL)
Approximate time in us to busy loop waiting for packets on the device queue.
-This sets the default value of the SO_LL socket option.
-Can be set or overridden per socket by setting socket option SO_LL, which is
-the preferred method of enabling.
-If you need to enable the feature globally via sysctl, a value of 50 is recommended.
+This sets the default value of the SO_BUSY_POLL socket option.
+Can be set or overridden per socket by setting socket option SO_BUSY_POLL,
+which is the preferred method of enabling. If you need to enable the feature
+globally via sysctl, a value of 50 is recommended.
Will increase power usage.
Default: 0 (off)
-low_latency_poll
+busy_poll
----------------
Low latency busy poll timeout for poll and select. (needs CONFIG_NET_LL_RX_POLL)
Approximate time in us to busy loop waiting for events.
Recommended value depends on the number of sockets you poll on.
For several sockets 50, for several hundreds 100.
For more than that you probably want to use epoll.
-Note that only sockets with SO_LL set will be busy polled, so you want to either
-selectively set SO_LL on those sockets or set sysctl.net.low_latency_read globally.
+Note that only sockets with SO_BUSY_POLL set will be busy polled,
+so you want to either selectively set SO_BUSY_POLL on those sockets or set
+sysctl.net.busy_read globally.
Will increase power usage.
Default: 0 (off)
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _UAPI_ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* __ASM_AVR32_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_IA64_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_M32R_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _UAPI_ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 0x4026
-#define SO_LL 0x4027
+#define SO_BUSY_POLL 0x4027
/* O_NONBLOCK clashes with the bits used for socket types. Therefore we
* have to define SOCK_NONBLOCK to a different value here.
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_POWERPC_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _ASM_SOCKET_H */
#define SO_SELECT_ERR_QUEUE 0x0029
-#define SO_LL 0x0030
+#define SO_BUSY_POLL 0x0030
/* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* _XTENSA_SOCKET_H */
#ifdef CONFIG_NET_LL_RX_POLL
struct napi_struct;
-extern unsigned int sysctl_net_ll_read __read_mostly;
-extern unsigned int sysctl_net_ll_poll __read_mostly;
+extern unsigned int sysctl_net_busy_read __read_mostly;
+extern unsigned int sysctl_net_busy_poll __read_mostly;
/* return values from ndo_ll_poll */
#define LL_FLUSH_FAILED -1
static inline bool net_busy_loop_on(void)
{
- return sysctl_net_ll_poll;
+ return sysctl_net_busy_poll;
}
/* a wrapper to make debug_smp_processor_id() happy
/* in poll/select we use the global sysctl_net_ll_poll value */
static inline unsigned long busy_loop_end_time(void)
{
- return busy_loop_us_clock() + ACCESS_ONCE(sysctl_net_ll_poll);
+ return busy_loop_us_clock() + ACCESS_ONCE(sysctl_net_busy_poll);
}
static inline bool sk_can_busy_loop(struct sock *sk)
#define SO_SELECT_ERR_QUEUE 45
-#define SO_LL 46
+#define SO_BUSY_POLL 46
#endif /* __ASM_GENERIC_SOCKET_H */
break;
#ifdef CONFIG_NET_LL_RX_POLL
- case SO_LL:
+ case SO_BUSY_POLL:
/* allow unprivileged users to decrease the value */
if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
ret = -EPERM;
break;
#ifdef CONFIG_NET_LL_RX_POLL
- case SO_LL:
+ case SO_BUSY_POLL:
v.val = sk->sk_ll_usec;
break;
#endif
#ifdef CONFIG_NET_LL_RX_POLL
sk->sk_napi_id = 0;
- sk->sk_ll_usec = sysctl_net_ll_read;
+ sk->sk_ll_usec = sysctl_net_busy_read;
#endif
/*
#endif /* CONFIG_NET_FLOW_LIMIT */
#ifdef CONFIG_NET_LL_RX_POLL
{
- .procname = "low_latency_poll",
- .data = &sysctl_net_ll_poll,
+ .procname = "busy_poll",
+ .data = &sysctl_net_busy_poll,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec
},
{
- .procname = "low_latency_read",
- .data = &sysctl_net_ll_read,
+ .procname = "busy_read",
+ .data = &sysctl_net_busy_read,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec
#include <net/busy_poll.h>
#ifdef CONFIG_NET_LL_RX_POLL
-unsigned int sysctl_net_ll_read __read_mostly;
-unsigned int sysctl_net_ll_poll __read_mostly;
+unsigned int sysctl_net_busy_read __read_mostly;
+unsigned int sysctl_net_busy_poll __read_mostly;
#endif
static int sock_no_open(struct inode *irrelevant, struct file *dontcare);