search for: qsize

Displaying 20 results from an estimated 38 matches for "qsize".

Did you mean: size
2017 Feb 10
1
[virtio-dev] packed ring layout proposal v2
...> > > > I thought originally there's a reason 1.0 rings had to be powers of two > > but now I don't see why. OK, we can make it a feature flag later if we > > want to. > > The reason is that it allows indices to be free running. Well what I meant is that with qsize not a power of 2 you can still do this but have to do everything mod N*qsize as opposed to mod 2^16. So you need a branch there - easiest to do if you do signed math. int nheads = avail - last_avail; /*Check and handle index wrap-around */ if (unlikely(nheads < 0)) { nheads += N_qsize; } if (...
2017 Feb 10
1
[virtio-dev] packed ring layout proposal v2
...> > > > I thought originally there's a reason 1.0 rings had to be powers of two > > but now I don't see why. OK, we can make it a feature flag later if we > > want to. > > The reason is that it allows indices to be free running. Well what I meant is that with qsize not a power of 2 you can still do this but have to do everything mod N*qsize as opposed to mod 2^16. So you need a branch there - easiest to do if you do signed math. int nheads = avail - last_avail; /*Check and handle index wrap-around */ if (unlikely(nheads < 0)) { nheads += N_qsize; } if (...
2014 Oct 14
1
[PATCH net-next RFC 0/3] virtio-net: Conditionally enable tx interrupt
...skbs(txq, sq, budget - sent); if (sent < budget) { r = virtqueue_enable_cb_prepare(sq->vq); @@ -951,6 +956,9 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; int err, qsize = virtqueue_get_vring_size(sq->vq); + struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); + bool kick = !skb->xmit_more || netif_xmit_stopped(txq); + unsigned int bytes = skb->len; virtqueue_disable_cb(sq->vq); @@ -967,7 +975,11 @@ static netdev_tx_t start_xmit(struct sk_bu...
2014 Oct 14
1
[PATCH net-next RFC 0/3] virtio-net: Conditionally enable tx interrupt
...skbs(txq, sq, budget - sent); if (sent < budget) { r = virtqueue_enable_cb_prepare(sq->vq); @@ -951,6 +956,9 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; int err, qsize = virtqueue_get_vring_size(sq->vq); + struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); + bool kick = !skb->xmit_more || netif_xmit_stopped(txq); + unsigned int bytes = skb->len; virtqueue_disable_cb(sq->vq); @@ -967,7 +975,11 @@ static netdev_tx_t start_xmit(struct sk_bu...
2014 Oct 15
1
[PATCH RFC v2 2/3] virtio_net: bql
...ntries. */ if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { @@ -997,7 +1009,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) if (unlikely(!virtqueue_enable_cb_delayed(sq->vq))) { /* More just got used, free them then recheck. */ - free_old_xmit_skbs(sq, qsize); + free_old_xmit_skbs(txq, sq, qsize); if (stopped && sq->vq->num_free >= 2+MAX_SKB_FRAGS) netif_start_subqueue(dev, qnum); } -- MST
2014 Oct 15
1
[PATCH RFC v2 2/3] virtio_net: bql
...ntries. */ if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { @@ -997,7 +1009,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) if (unlikely(!virtqueue_enable_cb_delayed(sq->vq))) { /* More just got used, free them then recheck. */ - free_old_xmit_skbs(sq, qsize); + free_old_xmit_skbs(txq, sq, qsize); if (stopped && sq->vq->num_free >= 2+MAX_SKB_FRAGS) netif_start_subqueue(dev, qnum); } -- MST
2014 Oct 14
4
[PATCH RFC] virtio_net: enable tx interrupt
...t(struct sk_buff *skb, struct net_device *dev) @@ -910,10 +950,9 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) struct virtnet_info *vi = netdev_priv(dev); int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; - int err; + int err, qsize = virtqueue_get_vring_size(sq->vq); - /* Free up any pending old buffers before queueing new ones. */ - free_old_xmit_skbs(sq); + virtqueue_disable_cb(sq->vq); /* Try to transmit */ err = xmit_skb(sq, skb); @@ -930,22 +969,20 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struc...
2014 Oct 14
4
[PATCH RFC] virtio_net: enable tx interrupt
...t(struct sk_buff *skb, struct net_device *dev) @@ -910,10 +950,9 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) struct virtnet_info *vi = netdev_priv(dev); int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; - int err; + int err, qsize = virtqueue_get_vring_size(sq->vq); - /* Free up any pending old buffers before queueing new ones. */ - free_old_xmit_skbs(sq); + virtqueue_disable_cb(sq->vq); /* Try to transmit */ err = xmit_skb(sq, skb); @@ -930,22 +969,20 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struc...
2014 Oct 15
0
[RFC PATCH net-next 5/6] virtio-net: enable tx interrupt
...> } > > @@ -925,10 +961,11 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > struct virtnet_info *vi = netdev_priv(dev); > int qnum = skb_get_queue_mapping(skb); > struct send_queue *sq = &vi->sq[qnum]; > - int err; > + int err, qsize = virtqueue_get_vring_size(sq->vq); > > + virtqueue_disable_cb(sq->vq); > /* Free up any pending old buffers before queueing new ones. */ > - free_old_xmit_skbs(sq); > + free_old_xmit_skbs(sq, qsize); > > /* Try to transmit */ > err = xmit_skb(sq, skb); >...
2014 Oct 15
15
[RFC PATCH net-next 0/6] Always use tx interrupt for virtio-net
According to David, proper accounting and queueing (at all levels, not just TCP sockets) is more important than trying to skim a bunch of cycles by avoiding TX interrupts. Having an event to free the SKB is absolutely essential for the stack to operate correctly. This series tries to enable tx interrupt for virtio-net. The idea is simple: enable tx interrupt and schedule a tx napi to free old
2014 Oct 15
15
[RFC PATCH net-next 0/6] Always use tx interrupt for virtio-net
According to David, proper accounting and queueing (at all levels, not just TCP sockets) is more important than trying to skim a bunch of cycles by avoiding TX interrupts. Having an event to free the SKB is absolutely essential for the stack to operate correctly. This series tries to enable tx interrupt for virtio-net. The idea is simple: enable tx interrupt and schedule a tx napi to free old
2014 Oct 14
0
[PATCH net-next RFC 3/3] virtio-net: conditionally enable tx interrupt
...netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > struct virtnet_info *vi = netdev_priv(dev); > int qnum = skb_get_queue_mapping(skb); > struct send_queue *sq = &vi->sq[qnum]; > - int err; > + bool urgent = virtnet_skb_needs_intr(skb); > + int err, qsize = virtqueue_get_vring_size(sq->vq); > > + virtqueue_disable_cb_urgent(sq->vq); > /* Free up any pending old buffers before queueing new ones. */ > - free_old_xmit_skbs(sq); > + free_old_xmit_skbs(sq, qsize); > > /* Try to transmit */ > - err = xmit_skb(sq, skb)...
2014 Oct 15
1
[PATCH RFC v2 1/3] virtio_net: enable tx interrupt
...(struct sk_buff *skb, struct net_device *dev) @@ -919,12 +958,16 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) struct virtnet_info *vi = netdev_priv(dev); int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; - int err; + int err, qsize = virtqueue_get_vring_size(sq->vq); struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); bool kick = !skb->xmit_more; + bool stopped; + + virtqueue_disable_cb(sq->vq); - /* Free up any pending old buffers before queueing new ones. */ - free_old_xmit_skbs(sq); + /* We are going...
2014 Oct 15
1
[PATCH RFC v2 1/3] virtio_net: enable tx interrupt
...(struct sk_buff *skb, struct net_device *dev) @@ -919,12 +958,16 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) struct virtnet_info *vi = netdev_priv(dev); int qnum = skb_get_queue_mapping(skb); struct send_queue *sq = &vi->sq[qnum]; - int err; + int err, qsize = virtqueue_get_vring_size(sq->vq); struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); bool kick = !skb->xmit_more; + bool stopped; + + virtqueue_disable_cb(sq->vq); - /* Free up any pending old buffers before queueing new ones. */ - free_old_xmit_skbs(sq); + /* We are going...
2014 Oct 15
0
[PATCH RFC] virtio_net: enable tx interrupt
...net_device *dev) > @@ -910,10 +950,9 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > struct virtnet_info *vi = netdev_priv(dev); > int qnum = skb_get_queue_mapping(skb); > struct send_queue *sq = &vi->sq[qnum]; > - int err; > + int err, qsize = virtqueue_get_vring_size(sq->vq); > > - /* Free up any pending old buffers before queueing new ones. */ > - free_old_xmit_skbs(sq); I think we'd better keep this. Since it may the tx skb freeing not totally depends on the tx interrupt, delayed interrupt may work better without...
2014 Oct 15
1
[RFC PATCH net-next 6/6] virtio-net: enable tx interrupt only for the final skb in the chain
...e2..5943f3f 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -993,12 +993,16 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) virtqueue_disable_cb(sq->vq); } } - } else if (virtqueue_enable_cb(sq->vq)) { - free_old_xmit_skbs(sq, qsize); } - if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) + if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) { virtqueue_kick(sq->vq); + if (sq->vq->num_free >= 2 +MAX_SKB_FRAGS && + unlikely(virtqueue_enable_cb_avail(sq->vq))) { + free...
2014 Oct 15
0
[RFC PATCH net-next 6/6] virtio-net: enable tx interrupt only for the final skb in the chain
...t/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -993,12 +993,16 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > virtqueue_disable_cb(sq->vq); > } > } > - } else if (virtqueue_enable_cb(sq->vq)) { > - free_old_xmit_skbs(sq, qsize); > } > > - if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) > + if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) { > virtqueue_kick(sq->vq); > + if (sq->vq->num_free >= 2 +MAX_SKB_FRAGS && > + unlikely(virtqueue_enab...
2014 Oct 15
1
[RFC PATCH net-next 6/6] virtio-net: enable tx interrupt only for the final skb in the chain
...e2..5943f3f 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -993,12 +993,16 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) virtqueue_disable_cb(sq->vq); } } - } else if (virtqueue_enable_cb(sq->vq)) { - free_old_xmit_skbs(sq, qsize); } - if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) + if (__netif_subqueue_stopped(dev, qnum) || !skb->xmit_more) { virtqueue_kick(sq->vq); + if (sq->vq->num_free >= 2 +MAX_SKB_FRAGS && + unlikely(virtqueue_enable_cb_avail(sq->vq))) { + free...
2015 Nov 20
15
[RFC PATCH 0/9] vhost-nvme: new qemu nvme backend using nvme target
Hi, This is the first attempt to add a new qemu nvme backend using in-kernel nvme target. Most code are ported from qemu-nvme and also borrow code from Hannes Reinecke's rts-megasas. It's similar as vhost-scsi, but doesn't use virtio. The advantage is guest can run unmodified NVMe driver. So guest can be any OS that has a NVMe driver. The goal is to get as good performance as
2015 Nov 20
15
[RFC PATCH 0/9] vhost-nvme: new qemu nvme backend using nvme target
Hi, This is the first attempt to add a new qemu nvme backend using in-kernel nvme target. Most code are ported from qemu-nvme and also borrow code from Hannes Reinecke's rts-megasas. It's similar as vhost-scsi, but doesn't use virtio. The advantage is guest can run unmodified NVMe driver. So guest can be any OS that has a NVMe driver. The goal is to get as good performance as