Hello,
On Fri, 17 Jul 2015, Raducu Deaconu wrote:
> Hello,
>
> I have done the corrections.
>
>
> Subject: [PATCH] Add ovf scheduler
>
> Signed-off-by: Raducu Deaconu <rhadoo.io88@xxxxxxxxx>
Thanks!
Acked-by: Julian Anastasov <ja@xxxxxx>
Simon, please apply the attached patch to -next
tree after adding the "ipvs: " prefix.
> ---
> net/netfilter/ipvs/Kconfig | 11 +++++
> net/netfilter/ipvs/Makefile | 1 +
> net/netfilter/ipvs/ip_vs_ovf.c | 86
> ++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 98 insertions(+)
> create mode 100644 net/netfilter/ipvs/ip_vs_ovf.c
>
> diff --git a/net/netfilter/ipvs/Kconfig b/net/netfilter/ipvs/Kconfig
> index 3b6929d..b32fb0d 100644
> --- a/net/netfilter/ipvs/Kconfig
> +++ b/net/netfilter/ipvs/Kconfig
> @@ -162,6 +162,17 @@ config IP_VS_FO
> If you want to compile it in kernel, say Y. To compile it as
> a
> module, choose M here. If unsure, say N.
>
> +config IP_VS_OVF
> + tristate "weighted overflow scheduling"
> + ---help---
> + The weighted overflow scheduling algorithm directs network
> + connections to the server with the highest weight that is
> + currently available and overflows to the next when active
> + connections exceed the node's weight.
> +
> + If you want to compile it in kernel, say Y. To compile it as a
> + module, choose M here. If unsure, say N.
> +
> config IP_VS_LBLC
> tristate "locality-based least-connection scheduling"
> ---help---
> diff --git a/net/netfilter/ipvs/Makefile b/net/netfilter/ipvs/Makefile
> index 38b2723..67f3f43 100644
> --- a/net/netfilter/ipvs/Makefile
> +++ b/net/netfilter/ipvs/Makefile
> @@ -27,6 +27,7 @@ obj-$(CONFIG_IP_VS_WRR) += ip_vs_wrr.o
> obj-$(CONFIG_IP_VS_LC) += ip_vs_lc.o
> obj-$(CONFIG_IP_VS_WLC) += ip_vs_wlc.o
> obj-$(CONFIG_IP_VS_FO) += ip_vs_fo.o
> +obj-$(CONFIG_IP_VS_OVF) += ip_vs_ovf.o
> obj-$(CONFIG_IP_VS_LBLC) += ip_vs_lblc.o
> obj-$(CONFIG_IP_VS_LBLCR) += ip_vs_lblcr.o
> obj-$(CONFIG_IP_VS_DH) += ip_vs_dh.o
> diff --git a/net/netfilter/ipvs/ip_vs_ovf.c b/net/netfilter/ipvs/ip_vs_ovf.c
> new file mode 100644
> index 0000000..f7d62c3
> --- /dev/null
> +++ b/net/netfilter/ipvs/ip_vs_ovf.c
> @@ -0,0 +1,86 @@
> +/*
> + * IPVS: Overflow-Connection Scheduling module
> + *
> + * Authors: Raducu Deaconu <rhadoo_io@xxxxxxxxx>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version
> + * 2 of the License, or (at your option) any later version.
> + *
> + * Scheduler implements "overflow" loadbalancing according to number of
> active
> + * connections , will keep all conections to the node with the highest weight
> + * and overflow to the next node if the number of connections exceeds
> the node's
> + * weight.
> + * Note that this scheduler might not be suitable for UDP because it only
> uses
> + * active connections
> + *
> + */
> +
> +#define KMSG_COMPONENT "IPVS"
> +#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
> +
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +
> +#include <net/ip_vs.h>
> +
> +/* OVF Connection scheduling */
> +static struct ip_vs_dest *
> +ip_vs_ovf_schedule(struct ip_vs_service *svc, const struct sk_buff *skb,
> + struct ip_vs_iphdr *iph)
> +{
> + struct ip_vs_dest *dest, *h = NULL;
> + int hw = 0, w;
> +
> + IP_VS_DBG(6, "ip_vs_ovf_schedule(): Scheduling...\n");
> + /* select the node with highest weight, go to next in line if active
> + * connections exceed weight
> + */
> + list_for_each_entry_rcu(dest, &svc->destinations, n_list) {
> + w = atomic_read(&dest->weight);
> + if ((dest->flags & IP_VS_DEST_F_OVERLOAD) ||
> + atomic_read(&dest->activeconns) > w ||
> + w == 0)
> + continue;
> + if (!h || w > hw) {
> + h = dest;
> + hw = w;
> + }
> + }
> +
> + if (h) {
> + IP_VS_DBG_BUF(6, "OVF: server %s:%u active %d w %d\n",
> + IP_VS_DBG_ADDR(h->af, &h->addr),
> + ntohs(h->port),
> + atomic_read(&h->activeconns),
> + atomic_read(&h->weight));
> + return h;
> + }
> +
> + ip_vs_scheduler_err(svc, "no destination available");
> + return NULL;
> +}
> +
> +static struct ip_vs_scheduler ip_vs_ovf_scheduler = {
> + .name = "ovf",
> + .refcnt = ATOMIC_INIT(0),
> + .module = THIS_MODULE,
> + .n_list = LIST_HEAD_INIT(ip_vs_ovf_scheduler.n_list),
> + .schedule = ip_vs_ovf_schedule,
> +};
> +
> +static int __init ip_vs_ovf_init(void)
> +{
> + return register_ip_vs_scheduler(&ip_vs_ovf_scheduler);
> +}
> +
> +static void __exit ip_vs_ovf_cleanup(void)
> +{
> + unregister_ip_vs_scheduler(&ip_vs_ovf_scheduler);
> + synchronize_rcu();
> +}
> +
> +module_init(ip_vs_ovf_init);
> +module_exit(ip_vs_ovf_cleanup);
> +MODULE_LICENSE("GPL");
> --
> 1.7.10.4
Regards
--
Julian Anastasov <ja@xxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
|