Bug 1308395

Summary: kernel 3.10.0-327.el7.x86_64 or 342 supports more than 8 queues, which do not conform to the doc
Product: Red Hat Enterprise Linux 7 Reporter: yalzhang <yalzhang>
Component: doc-Virtualization_Tuning_and_Optimization_GuideAssignee: Jiri Herrmann <jherrman>
Status: CLOSED CURRENTRELEASE QA Contact: ecs-bugs
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 7.2CC: dyuan, jasowang, jherrman, juzhang, laine, mst, mzhan, rhel-docs, yalzhang
Target Milestone: rcKeywords: Documentation
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 1322661 (view as bug list) Environment:
Last Closed: 2016-11-07 14:54:11 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1322661    

Description yalzhang@redhat.com 2016-02-15 03:25:42 UTC
Document URL:
http://jenkinscat.gsslab.pnq.redhat.com:8080/job/doc-Red_Hat_Enterprise_Linux-7-Virtualization_Tuning_and_Optimization_Guide%20%28html-single%29/lastStableBuild/artifact/tmp/en-US/html-single/index.html#sect-Virtualization_Tuning_Optimization_Guide-Networking-Multi-queue_virtio-net

Section Number and Name:
5.4.2.1. Configuring Multi-Queue virtio-net
(where the value of N is from 1 to 8, as the kernel supports up to 8 queues for a multi-queue tap device)

Describe the issue: 
kernel 3.10.0-229.el7.x86_64 supports up to 8 queues for a multiqueue tap device as the document.But kernel 3.10.0-327.el7.x86_64 or 342 supports more than 8 queues, such as 200 or more. 

Suggestions for improvement: 
Need a document update to explain the change.

Additional information: 
N/A

Comment 2 yalzhang@redhat.com 2016-03-02 07:22:29 UTC
What is the change between kernel 3.10.0-327.el7.x86_64 between with 3.10.0-229.el7.x86_64 about multi-queue virtio-net suport? 
How many queues at most does 327 kernel supports for a multi-queue tap device?

Comment 3 Laine Stump 2016-03-02 15:34:34 UTC
I know nothing on that topic. Michael, do you know the answer to this?

Comment 4 Michael S. Tsirkin 2016-03-30 08:27:14 UTC
according to the change log:
        It is now safe to increase the maximum number of queues.
        Preceding patch: 'net: allow large number of rx queues'
        made sure this won't cause failures due to high order memory
        allocations. Increase it to 256: this is the max number of vCPUs
        KVM supports.

Comment 5 yalzhang@redhat.com 2016-03-30 11:46:45 UTC
Hi Micheal,

Thank you for your answer!
And I have tried with 256~249, found that once the queues larger than 250, the guest can not start, if it need particular hardware? Please help to confirm.

# rpm -q libvirt
libvirt-1.3.2-1.el7.x86_64
# uname -a
Linux work 3.10.0-342.el7.x86_64
# rpm -q qemu-kvm-rhev
qemu-kvm-rhev-2.3.0-31.el7_2.5.x86_64


# virsh dumpxml rhel7.2 | grep /interface -B4
    ...
      <driver name='vhost' queues='250'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </interface>
# virsh start rhel7.2
Domain rhel7.2 started
# ps -aux | grep mq=on | grep -v grep
qemu     14273  105  0.9 1701484 70760 ?       Sl   19:37   0:03 /usr/libexec/qemu-kvm -name rhel7.2 -S -machine pc-i440fx-rhel7.2.0,accel=kvm,usb=off,vmport=off -cpu Penryn,+osxsave,+xsave,+pdcm,+xtpr,+tm2,+est,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -m 1024 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid c8529c02-7851-4f4a-b480-f777f72e3133 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-rhel7.2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1f -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/var/lib/libvirt/images/rhel7.2.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fds=25:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:100:101:102:103:104:105:106:107:108:109:110:111:112:113:114:115:116:117:118:119:120:121:122:123:124:125:126:127:128:129:130:131:132:133:134:135:136:137:138:139:140:141:142:143:144:145:146:147:148:149:150:151:152:153:154:155:156:157:158:159:160:161:162:163:164:165:167:168:169:170:171:172:173:174:175:176:177:178:179:180:181:182:183:184:185:186:187:188:189:190:191:192:193:194:195:196:197:198:199:200:201:202:203:204:205:206:207:208:209:210:211:212:213:214:215:216:217:218:219:220:221:222:223:224:225:226:227:228:229:230:231:232:233:234:235:236:237:238:239:240:241:242:243:244:245:246:247:248:249:250:251:252:253:254:255:256:257:258:259:260:261:262:263:264:265:266:267:268:269:270:271:272:273:274:275:276,id=hostnet0,vhost=on,vhostfds=166:277:278:279:280:281:282:283:284:285:286:287:288:289:290:291:292:293:294:295:296:297:298:299:300:301:302:303:304:305:306:307:308:309:310:311:312:313:314:315:316:317:318:319:320:321:322:323:324:325:326:327:328:329:330:331:332:333:334:335:336:337:338:339:340:341:342:343:344:345:346:347:348:349:350:351:352:353:354:355:356:357:358:359:360:361:362:363:364:365:366:367:368:369:370:371:372:373:374:375:376:377:378:379:380:381:382:383:384:385:386:387:388:389:390:391:392:393:394:395:396:397:398:399:400:401:402:403:404:405:406:407:408:409:410:411:412:413:414:415:416:417:418:419:420:421:422:423:424:425:426:427:428:429:430:431:432:433:434:435:436:437:438:439:440:441:442:443:444:445:446:447:448:449:450:451:452:453:454:455:456:457:458:459:460:461:462:463:464:465:466:467:468:469:470:471:472:473:474:475:476:477:478:479:480:481:482:483:484:485:486:487:488:489:490:491:492:493:494:495:496:497:498:499:500:501:502:503:504:505:506:507:508:509:510:511:512:513:514:515:516:517:518:519:520:521:522:523:524:525 -device virtio-net-pci,mq=on,vectors=502,netdev=hostnet0,id=net0,mac=52:54:00:e2:c5:73,bus=pci.1,addr=0x1 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-rhel7.2/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -chardev spicevmc,id=charchannel1,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,id=channel1,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vgamem_mb=16,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 -msg timestamp=on

When I set queues=251, then the guest can not start.
# virsh start rhel7.2
error: Failed to start domain rhel7.2
error: internal error: early end of file from monitor, possible problem: ((null):14879): SpiceDispatcher-ERROR **: dispatcher.c:260:dispatcher_init: socketpair failed Too many open files

when I set to 255, the guest can not start.
# virsh start rhel7.2
error: Failed to start domain rhel7.2
error: internal error: early end of file from monitor, possible problem: 2016-03-30T11:40:53.794624Z qemu-kvm: -netdev tap,fds=25:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:100:101:102:103:104:105:106:107:108:109:110:111:112:113:114:115:116:117:118:119:120:121:122:123:124:125:126:127:128:129:130:131:132:133:134:135:136:137:138:139:140:141:142:143:144:145:146:147:148:149:150:151:152:153:154:155:156:157:158:159:160:161:162:163:164:165:166:167:168:169:170:171:172:173:174:175:176:177:178:180:179:181:182:183:184:185:186:187:188:189:190:191:193:192:194:195:196:197:198:199:200:201:202:203:204:205:206:207:208:209:210:211:212:213:214:215:216:218:217:219:220:221:222:223:224:225:226:227:228:229:230:231:232:233:234:235:236:237:238:239:240:241:242:243:244:245:246:247:248:249:250:251:252:253:254:255:256:257:258:259:260:261:262:263:264:265:266:267:268:269:270:271:272:273:

Comment 6 Michael S. Tsirkin 2016-03-30 13:15:53 UTC
The problem is too many open files: apparently libvirt needs to increase
the open file descriptor limit (also known as "nofile" limit) for qemu by the number of queues.

Comment 7 yalzhang@redhat.com 2016-03-31 03:31:36 UTC
As comment 6 from Michael, clone this bug to 
Bug 1322661 - The max number of vCPUs KVM supports is 256 currently, so libvirt needs to increase the open file descriptor limit

And still need the document modification.

Comment 9 yalzhang@redhat.com 2016-04-08 07:30:34 UTC
Suggest to remove the the content "5.5. Network Tuning Techniques" from RHEL6 documentation as "Multi-Queue virtio-net" is not supported on RHEL6 host.
I have tried on RHEL6 host, the attribute "queues" can not even be saved.

queues
    The optional queues attribute controls the number of queues to be used for either Multiqueue virtio-net or vhost-user network interfaces. Use of multiple packet processing queues requires the interface having the <model type='virtio'/> element......virtio-net since 1.0.6 (QEMU and KVM only) vhost-user since 1.2.17 (QEMU and KVM only) ----from libvirt.org

And the base code of qemu for RHEL6 is 0.10.2, so multi-queue is not support on RHEL6 host.

Comment 10 Jiri Herrmann 2016-04-08 17:53:52 UTC
Thanks for the feedback Yalan,

I have removed the Network Tuning Techniques section from the book:

http://jenkinscat.gsslab.pnq.redhat.com:8080/job/doc-Red_Hat_Enterprise_Linux-6-Virtualization_Tuning_and_Optimization_Guide%20%28html-single%29/lastStableBuild/artifact/tmp/en-US/html-single/index.html#chap-Virtualization_Tuning_Optimization_Guide-Networking

Moving this BZ to VERIFIED, please let me know if any other modifications are necessary.

Comment 11 Jiri Herrmann 2016-11-07 14:54:11 UTC
The changes based on this BZ have gone live with the release of RHEL 7.3:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Tuning_and_Optimization_Guide/chap-Virtualization_Tuning_Optimization_Guide-Networking.html

I will be closing the bug, feel free to reopen if deemed necessary.