[SERVER-25853] SLES 11 kernel does not support s390x vx instructions Created: 29/Aug/16  Updated: 09/Feb/17  Resolved: 29/Aug/16

Status: Closed
Project: Core Server
Component/s: Build
Affects Version/s: None
Fix Version/s: 3.3.12

Type: Bug Priority: Major - P3
Reporter: Mark Benvenuto Assignee: Mark Benvenuto
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Documented
is documented by DOCS-8898 SLES 11 kernel does not support s390x... Closed
Related
related to WT-2873 Refactor CRC32 code Closed
is related to SERVER-27963 Disable CRC32 hardware support on s39... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Sprint: Platforms 2016-08-26, Platforms 2016-09-19
Participants:
Linked BF Score: 0

 Description   

On SLES 11, the VX instructions are not supported. Support for this was added in 3.18: https://github.com/torvalds/linux/commit/80703617

Kernel Version: Linux sles11-z-2 3.0.101-68-default

> cat /proc/cpuinfo
vendor_id       : IBM/S390
# processors    : 4
bogomips per cpu: 20325.00
features        : esan3 zarch stfle msa ldisp eimm dfp etf3eh highgprs
processor 0: version = FF,  identification = 046A77,  machine = 2964
processor 1: version = FF,  identification = 046A77,  machine = 2964
processor 2: version = FF,  identification = 046A77,  machine = 2964
processor 3: version = FF,  identification = 046A77,  machine = 2964



 Comments   
Comment by Mark Benvenuto [ 30/Aug/16 ]

For documentation purposes:
SLES 11's kernel is too old to support the z13 hardware support for CRC32. As a result, the crc32 code will use a software implementation which is significantly slower than the hardware implementation. MongoDB recommends customers upgrade to SLES 12 which has support for the VX instructions.

Background

In IBM Z13 microprocessor, new SIMD instructions were added called VX. In order to support these instructions, a user needs a kernel >= ~3.18 and do not have disabled the VX instructions at kernel boot (i.e., novx was not passed, and so MACHINE_HAS_VX is true).

The SLES 11 kernel does not support. RHEL 7.2 (Linux 3.10) backported support for the VX instructions. I believe SLES 12 did as well. Ubuntu 16.04 is new enough that it includes support.

For now, this is a simple fix to disable the s390x CRC32 implementation as scons flag. There does not appear to be an easy way to feature test whether a given machine supports these instructions without running code and parsing auxv. If s390x CRC32 is disabled, we fall back to the software CRC32 implementation which is defined in the x86 CRC implementation.

Support was added in 3.18 here: https://github.com/torvalds/linux/commit/80703617

Comment by Githook User [ 29/Aug/16 ]

Author:

{u'username': u'markbenvenuto', u'name': u'Mark Benvenuto', u'email': u'mark.benvenuto@mongodb.com'}

Message: SERVER-25853 SLES 11 kernel does not support s390x VX instructions
Branch: master
https://github.com/mongodb/mongo/commit/3f7812c99ded16e6286e1fd40323e57c939797ed

Generated at Thu Feb 08 04:10:26 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.