[201911][Arista] Disable ATA NCQ for a few products (#14468)

Why I did it
Some products might experience an occasional IO failure in the communication between CPU and SSD.
Based on some research it could be attributable to some device not handling ATA NCQ (Native Command Queue).

This issue currently affect 4 products:

DCS-7170-32C*
DCS-7170-64C
DCS-7060DX4-32
DCS-7260CX3-64
DCS-7050CX3-32S

How I did it
This change disable NCQ on the affected drive for a small set of products.

How to verify it
When the fix is applied, these 2 patterns can be found in the dmesg.
ata[0-9]+.00: FORCE: horkage modified (noncq)
NCQ (not used)

Test results using: fio --direct=1 --rw=randrw --bs=64k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=4

with NCQ (ata1.00: 61865984 sectors, multi 1: LBA48 NCQ (depth 32), AA)

   READ: bw=33.9MiB/s (35.6MB/s), 33.9MiB/s-33.9MiB/s (35.6MB/s-35.6MB/s), io=4073MiB (4270MB), run=120078-120078msec
  WRITE: bw=34.1MiB/s (35.8MB/s), 34.1MiB/s-34.1MiB/s (35.8MB/s-35.8MB/s), io=4100MiB (4300MB), run=120078-120078msec
without NCQ (ata1.00: 61865984 sectors, multi 1: LBA48 NCQ (not used))

   READ: bw=31.7MiB/s (33.3MB/s), 31.7MiB/s-31.7MiB/s (33.3MB/s-33.3MB/s), io=3808MiB (3993MB), run=120083-120083msec
  WRITE: bw=31.9MiB/s (33.4MB/s), 31.9MiB/s-31.9MiB/s (33.4MB/s-33.4MB/s), io=3830MiB (4016MB), run=120083-120083msec
Which release branch to backport (provide reason below if selected)
This commit is contained in:
Samuel Angebault 2023-04-02 14:03:21 -07:00 committed by GitHub
parent 5db2dc558c
commit a13d460bbb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -309,6 +309,7 @@ platform_specific() {
if [ "$sid" = "Lodoga" ]; then if [ "$sid" = "Lodoga" ]; then
aboot_machine=arista_7050cx3_32s aboot_machine=arista_7050cx3_32s
flash_size=3700 flash_size=3700
echo "libata.force=2.00:noncq" >> /tmp/append
fi fi
if [ "$sid" = "BlackhawkO" ]; then if [ "$sid" = "BlackhawkO" ]; then
aboot_machine=arista_7060px4_32 aboot_machine=arista_7060px4_32
@ -337,6 +338,8 @@ platform_specific() {
fi fi
if in_array "$platform" "rook"; then if in_array "$platform" "rook"; then
echo "iommu=on intel_iommu=on" >>/tmp/append echo "iommu=on intel_iommu=on" >>/tmp/append
# Currently applies to Alhambra, Blackhawk, Gardena and Mineral
echo "libata.force=1.00:noncq" >>/tmp/append
read_system_eeprom read_system_eeprom
fi fi
if in_array "$platform" "crow" "woodpecker" "magpie"; then if in_array "$platform" "crow" "woodpecker" "magpie"; then