Я настроил тестовую среду для разработки. Он состоит из сервера IBM X3650 M4 (7915) с:
Я не могу полностью обойти RAID-контроллер, потому что он встроен в материнскую плату и у меня нет выделенной HBA-карты (стоит ли покупать ее?), Но я установил его в режим JBOD.
Я протестировал и перепроверил эти твердотельные накопители как отдельные диски в конфигурациях RAID10 и RAID0. Я наблюдал ожидаемое поведение от программного RAID, но не от отдельных дисков: RAID масштабируется (для меня это нормально), но отдельные твердотельные накопители работают с половиной ожидаемого IOPS!
Тесты проводились с использованием fio
и конфигурации, представленные storagereviews.com ( Ссылка на сайт ).
Вот сводный график усредненных прогонов для всех 6 SSD (1 х 60 секунд на каждом SSD):
При чтении из различных тестов (storagereview.com, tomshardware.com и т. Д.) И из официальных спецификаций эти диски должны достигать двойного случайного чтения IOPS. Например:
Я оптимизировал еще все /sys/block/sd*
и /dev/sd*
такие параметры как scheduler
, nr_requests
, rotational
, fifo_batch
, и т.д.
Что мне искать?
Я забыл упомянуть, что на дисках было выделено 25% ресурсов, поэтому общий размер, указанный в следующих выходных данных, составляет примерно 75% от 525 ГБ. В любом случае, количество операций ввода-вывода в секунду до и после избыточного выделения ресурсов никогда не превышало лимит в 37 тыс.
Выход 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
Выход 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
Выход cat /sys/block/sdc/queue/scheduler
:
noop [deadline] cfq
Выход 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
Глядя глубже на dmesg
на выходе следующие странные сообщения были выделены жирным шрифтом и выглядели весьма подозрительно:
...
[ 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.
...
Мой вопрос не дублирует этот вопрос потому что мои IOPS всегда вдвое меньше ожидаемых IOPS для отдельных твердотельных накопителей, а не для всего RAID, даже при низкой глубине ввода-вывода, когда IOPS очень малы (<10k).
Посмотрите на график выше: при глубине ввода-вывода, равной 1, отдельные твердотельные накопители достигают в среднем 5794, тогда как их должно быть не менее 8000 каждый, что далеко от моего верхнего предела в 40 КБ. Я не записывал результаты RAID, потому что они соответствуют ожидаемому поведению, но вот оно: RAID10 достигает около 120 тыс. Операций ввода-вывода в секунду для глубины ввода-вывода 16 и 32 (около 40 тыс операций ввода-вывода в секунду на 6 дисков более 2 из-за штрафа за зеркалирование RAID10, поэтому 40 тыс. для 3).
Я также думаю, что моя встроенная карта RAID может представлять собой узкое место, но я не могу найти окончательного ответа. Я наблюдаю, например, что запуск fio
Тестовый запуск на каждом SSD параллельно (6 тестов, выполняемых одновременно, каждый из них на одном SSD) снижает вдвое количество операций ввода-вывода в секунду для отдельного SSD при глубине ввода-вывода 16 и 32. Это дает IOPS на уровне 20k вместо 40k.
Давайте попробуем следующее, проанализировав отдельное устройство sda
:
hdparm -I /dev/sda
(разместите здесь вывод)fdisk -l /dev/sda
)deadline
dmesg | grep -i ncq
(опять же, разместите здесь результат)