mirror of
				https://git.proxmox.com/git/qemu-server
				synced 2025-10-31 19:16:22 +00:00 
			
		
		
		
	add virtio-net multiqueue support
this a new option queue=(\d+) to net interface Allow to use more than 1 cpu for network stream, so this can improve network bandwidth, when vhost-net cpu is the bottleneck http://www.linux-kvm.org/page/Multiqueue#Enable_MQ_feature -netdev tap,vhost=on,queues=N -device virtio-net-pci,mq=on,vectors=2N+2 host requirement ---------------- this require host kernel >= 3.8 (or qemu die at start) linux guest requirement ----------------------- kernel >= 3.8 manual enabling multiqueue windows guest requierement -------------------------- recent virtio-net driver Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
This commit is contained in:
		
							parent
							
								
									5881b913c0
								
							
						
					
					
						commit
						a9410357d2
					
				| @ -478,7 +478,7 @@ my $nic_model_list_txt = join(' ', sort @$nic_model_list); | ||||
| my $netdesc = { | ||||
|     optional => 1, | ||||
|     type => 'string', format => 'pve-qm-net', | ||||
|     typetext => "MODEL=XX:XX:XX:XX:XX:XX [,bridge=<dev>][,rate=<mbps>][,tag=<vlanid>][,firewall=0|1]", | ||||
|     typetext => "MODEL=XX:XX:XX:XX:XX:XX [,bridge=<dev>][,queues=<nbqueues>][,rate=<mbps>][,tag=<vlanid>][,firewall=0|1]", | ||||
|     description => <<EODESCR, | ||||
| Specify network devices. | ||||
| 
 | ||||
| @ -1190,6 +1190,11 @@ sub print_netdevice_full { | ||||
|     my $extra = ($bootorder !~ m/n/) ? "romfile=," : ''; | ||||
|     my $pciaddr = print_pci_addr("$netid", $bridges); | ||||
|     my $tmpstr = "$device,${extra}mac=$net->{macaddr},netdev=$netid$pciaddr,id=$netid"; | ||||
|     if ($net->{queues} && $net->{queues} > 1 && $net->{model} eq 'virtio'){ | ||||
| 	#Consider we have N queues, the number of vectors needed is 2*N + 2 (plus one config interrupt and control vq) | ||||
| 	my $vectors = $net->{queues} * 2 + 2; | ||||
| 	$tmpstr .= ",vectors=$vectors,mq=on"; | ||||
|     } | ||||
|     $tmpstr .= ",bootindex=$net->{bootindex}" if $net->{bootindex} ; | ||||
|     return $tmpstr; | ||||
| } | ||||
| @ -1215,11 +1220,17 @@ sub print_netdev_full { | ||||
| 
 | ||||
|     my $vmname = $conf->{name} || "vm$vmid"; | ||||
| 
 | ||||
|     my $netdev = ""; | ||||
| 
 | ||||
|     if ($net->{bridge}) { | ||||
|         return "type=tap,id=$netid,ifname=${ifname},script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown$vhostparam"; | ||||
|         $netdev = "type=tap,id=$netid,ifname=${ifname},script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown$vhostparam"; | ||||
|     } else { | ||||
|         return "type=user,id=$netid,hostname=$vmname"; | ||||
|         $netdev = "type=user,id=$netid,hostname=$vmname"; | ||||
|     } | ||||
| 
 | ||||
|     $netdev .= ",queues=$net->{queues}" if ($net->{queues} && $net->{model} eq 'virtio'); | ||||
| 
 | ||||
|     return $netdev; | ||||
| } | ||||
| 
 | ||||
| sub drive_is_cdrom { | ||||
| @ -1273,6 +1284,8 @@ sub parse_net { | ||||
| 	    $res->{macaddr} = $mac; | ||||
| 	} elsif ($kvp =~ m/^bridge=(\S+)$/) { | ||||
| 	    $res->{bridge} = $1; | ||||
| 	} elsif ($kvp =~ m/^queues=(\d+)$/) { | ||||
| 	    $res->{queues} = $1; | ||||
| 	} elsif ($kvp =~ m/^rate=(\d+(\.\d+)?)$/) { | ||||
| 	    $res->{rate} = $1; | ||||
|         } elsif ($kvp =~ m/^tag=(\d+)$/) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Alexandre Derumier
						Alexandre Derumier