Eu configurei um ambiente de teste para fins de desenvolvimento. Ele consiste em um servidor IBM X3650 M4 (7915) com:
- 2 x Intel Xeon E2690 @ 2.90GHz
- 96 GB de RAM ECC de 1333 MHz
- 2 x HDD 146 GB 15k rpm
- 6 x SSD 525 GB (Crucial MX300)
- Embutido ServeRaid m5110e no modo JBOD sem cache
- Ubuntu Server 16.10
- md software RAID em HDDs (RAID0) e SSDs (RAID10)
Eu não posso ignorar totalmente o controlador RAID porque ele está integrado na placa-mãe e não tenho uma placa HBA dedicada (devo comprar uma?), mas configuro para o modo JBOD.
Eu testei e testei em excesso esses SSDs como discos únicos, nas configurações RAID10 e RAID0. Observei os comportamentos esperados do RAID de software, mas não de discos únicos: escalas de RAID (ok para mim), mas os SSDs simples são executados com metade do esperado de IOPS!
Os testes foram realizados usando fio
e as configurações descritas por storagereviews.com ( Link ).
Aqui está um gráfico de resumo das execuções médias de todos os 6 SSDs (1 x 60 segundos executados em cada SSD):
Lendoapartirdeváriosbenchmarks(storagereview.com,tomshardware.com,etc.)edasespecificaçõesoficiais,essesdiscosdevemalcançarIOPSdeleituraaleatóriadupla.Porexemplo:
- paratoposdehardwarede4kworkloadtomem92358IOPSlêem32IODepth,enquantoomeuchegaa~37400IOPS( Link ).
- storagereview.com executa benchmarks ligeiramente diferentes, mas todos eles dão resultados totalmente diferentes - ~ 90k IOPS para leituras alinhadas de 4k ( Link ).
- Hardware.info fornece resultados idênticos para o modelo de 1TB ( Link ).
Eu otimizei ainda todos os vários parâmetros /sys/block/sd*
e /dev/sd*
como scheduler
, nr_requests
, rotational
, fifo_batch
, etc.
O que devo procurar?
UPDATE 1
Esqueci de mencionar que os discos foram superprovisionados em 25%, portanto, o tamanho geral relatado nas saídas a seguir é de aproximadamente 75% de 525 GB. De qualquer forma, as IOPS antes e depois do provisionamento excessivo nunca ultrapassaram o limite de 37k.
Saída de hdparm -I /dev/sdc
:
/dev/sdc:
ATA device, with non-removable media
Model Number: Crucial_CT525MX300SSD1
Serial Number: 163113837E16
Firmware Revision: M0CR031
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x006d)
Supported: 10 9 8 7 6 5
Likely used: 10
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 769208076
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 375589 MBytes
device size with M = 1000*1000: 393834 MBytes (393 GB)
cache/buffer size = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
* 48-bit Address feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
* IDLE_IMMEDIATE with UNLOAD
Write-Read-Verify feature set
* WRITE_UNCORRECTABLE_EXT command
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
unknown 119[8]
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Phy event counters
* NCQ priority information
* READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
* DMA Setup Auto-Activate optimization
Device-initiated interface power management
* Software settings preservation
Device Sleep (DEVSLP)
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Features Control (AC4)
* SCT Data Tables (AC5)
* reserved 69[3]
* reserved 69[4]
* reserved 69[7]
* DOWNLOAD MICROCODE DMA command
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 8 blocks)
* Deterministic read ZEROs after TRIM
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 500a075113837e16
NAA : 5
IEEE OUI : 00a075
Unique ID : 113837e16
Device Sleep:
DEVSLP Exit Timeout (DETO): 50 ms (drive)
Minimum DEVSLP Assertion Time (MDAT): 10 ms (drive)
Checksum: correct
Saída de fdisk -l /dev/sdc
:
Disk /dev/sdc: 366.8 GiB, 393834534912 bytes, 769208076 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Saída de cat /sys/block/sdc/queue/scheduler
:
noop [deadline] cfq
Saída de dmesg | grep "ahci\|ncq"
:
[ 5.490677] ahci 0000:00:1f.2: version 3.0
[ 5.490901] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 1.5 Gbps 0x2 impl SATA mode
[ 5.498675] ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pio slum part ems apst
[ 5.507315] scsi host1: ahci
[ 5.507435] scsi host2: ahci
[ 5.507529] scsi host3: ahci
[ 5.507620] scsi host4: ahci
[ 5.507708] scsi host5: ahci
[ 5.507792] scsi host6: ahci
[ 14.382326] Modules linked in: ioatdma(+) ipmi_si(+) ipmi_msghandler mac_hid shpchp lpc_ich ib_iser rdma_cm iw_cm ib_cm ib_core configfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi coretemp ip_tables x_tables autofs4 btrfs raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid0 multipath linear raid10 raid1 ses enclosure scsi_transport_sas crct10dif_pclmul crc32_pclmul ghash_clmulni_intel igb aesni_intel hid_generic dca aes_x86_64 lrw ptp glue_helper ablk_helper ahci usbhid cryptd pps_core wmi hid libahci megaraid_sas i2c_algo_bit fjes
Olhando mais fundo a dmesg
output, as seguintes mensagens estranhas estavam em negrito e bastante suspeitas:
...
[ 0.081418] CPU: Physical Processor ID: 0
[ 0.081421] CPU: Processor Core ID: 0
[ 0.081427] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[ 0.081430] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[ 0.081434] mce: CPU supports 20 MCE banks
[ 0.081462] CPU0: Thermal monitoring enabled (TM1)
...
[ 0.341838] cpuidle: using governor menu
[ 0.341841] PCCT header not found.
[ 0.341868] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[ 0.341873] ACPI: bus type PCI registered
...
[ 1.313494] NET: Registered protocol family 1
[ 1.313857] pci 0000:16:00.0: [Firmware Bug]: VPD access disabled
[ 1.314223] pci 0000:04:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
...
[ 1.591739] PCI: Probing PCI hardware (bus 7f)
[ 1.591761] ACPI: \: failed to evaluate _DSM (0x1001)
[ 1.591764] PCI host bridge to bus 0000:7f
...
[ 1.595018] PCI: root bus ff: using default resources
[ 1.595019] PCI: Probing PCI hardware (bus ff)
[ 1.595039] ACPI: \: failed to evaluate _DSM (0x1001)
...
[ 1.854466] ACPI: Power Button [PWRF]
[ 1.855209] ERST: Can not request [mem 0x7e908000-0x7e909bff] for ERST.
[ 1.855492] GHES: APEI firmware first mode is enabled by APEI bit and WHEA _OSC.
...
ATUALIZAÇÃO 2
A minha pergunta não é uma cópia de esta questão porque as minhas IOPS são sempre metade das esperadas IOPS para SSDs únicos e não para todo o RAID, mesmo em baixas IO Depths onde as IOPS são muito pequenas (< 10k).
Veja o gráfico acima: na IO Profundidade de 1, os SSDs individuais atingem uma média de 5794, enquanto devem ter pelo menos 8000 cada, o que está muito longe do meu limite superior de 40k. Eu não anotei os resultados RAID porque eles estão alinhados com o comportamento esperado, mas aqui está: RAID10 atinge cerca de 120k IOPS para IO Depth de 16 e 32 (cerca de 40k IOPS por 6 discos acima de 2 devido à penalidade de espelhamento RAID10, então 40k para 3).
Também acho que minha placa RAID incorporada pode representar o gargalo, mas não consigo encontrar uma resposta definitiva. Observo, por exemplo, que executar uma execução de teste fio
sobre cada SSD em paralelo (seis testes sendo executados ao mesmo tempo, cada um deles em um único SSD) divide a IOPS de SSD único para IO Profundidade de 16 e 32 Isso traz a IOPS em 20k, onde foram 40k.