Вопрос или проблема
У меня есть следующий запрос:
Я хочу увеличить размер I/O (минимальный / оптимальный) в CentOS.
По умолчанию значение составляет 512 байт, и я хочу увеличить его до 262144 байт / 524288 байт.
В настоящее время, выполняя команду fdisk -l
, я получаю следующий результат:
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 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 Disk label type: gpt Disk identifier: D9567AE9-EB97-4AD7-BA7B-9A2C0EE06951 # Start End Size Type Name 1 2048 411647 200M EFI System EFI System Partition 2 411648 2508799 1G Microsoft basic 3 2508800 104855551 48,8G Linux LVM Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 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 Disk label type: dos Identificador del disco: 0x62b5095d Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sdb1 2048 83886079 41942016 8e Linux LVM WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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 Disk label type: gpt Disk identifier: 98228612-062D-4DDC-9CC6-4B849FA55DAF # Start End Size Type Name 1 2048 41943006 20G Linux filesyste
Что fdisk
показывает здесь, это функция оборудования: что физически у него есть сектора по 512 байт и что они должны обрабатываться логически как блоки по 512 байт. Хотя возможно установить логический размер с помощью hdparm --set-sector-size
, в руководстве есть большое предупреждение о том, что этого делать не следует, и указанные размеры не поддерживаются.
Более того, даже если бы это было возможно, вы, вероятно, не захотите этого делать, потому что увеличение размера сектора означает то, что файловая система должна поддерживать такой размер (а она этого не делает), и что минимальный размер, который ваша файловая система может поддерживать, будет логическим размером, что означает, что хранение многих маленьких файлов будет крайне неэффективным. Кроме того, каждый раз, когда вы записываете блок меньшего размера, чем логический размер, вы будете нести затраты на чтение полного блока с диска и запись полного блока обратно, что будет сказываться на производительности.
Если вы хотите изменить размер I/O операций программы, вы можете сделать это в исходном коде программы и изменить размер используемых буферов. Однако нет способа сделать это на системном уровне, потому что в общем это не требуется, и ядро автоматически делает все наиболее эффективно. Если вы более подробно объясните, что вы хотите сделать, возможно, мы сможем помочь вам.
Создайте виртуальный слой или примите свой HDD таким, как он есть…
Я не думаю, что вы можете изменить физический размер сектора реального диска, но вы можете наложить на него логический слой диска с нужными вам свойствами.
Я сделал это для моего LUKS раздела на LVM Raid Stripe следующим образом:
sudo pvcreate /dev/sda /dev/sdb
sudo vgcreate <VG_name> /dev/sda /dev/sdb
sudo lvcreate -i 2 -I 256 -l 100%FREE -n <LV_name> <VG_name>
Установив размер сектора логического тома в 256КБ.
Я объединял два диска в один набор raid, так что у меня уже был виртуальный слой. Но вы можете просто сделать логический том одного диска, чтобы манипулировать его обработкой IO.
Что-то вроде:
sudo pvcreate <YourSad512SectorDrive>
sudo vgcreate aVolumeOfOne <YourSad512SectorDrive>
sudo lvcreate -I 256 -l 100%FREE -n Fake256KChunkyDrive aVolumeOfOne
И затем просто разбить это на разделы!
…
Я не тестировал конфигурацию с одним Chunky-Drive, но что я могу сказать, так это то, что тесты производительности показали увеличение производительности почти в два раза (по сравнению с LUKS на 4KB LVM, а не против raw!) в большинстве случаев (не для многих маленьких файлов).
Кроме того, добавление слоя LUKS, которое уже является мягким слоем, автоматически решило проблему разряженного использования маленьких файлов для меня (слой LUKS должен был обрабатывать объединение 256КБ IO), но если вы используете логический том напрямую (“Fake256KChunkyDrive”), вы столкнетесь с проблемой потери пространства из-за маленьких файлов.
.
Ответ или решение
Увеличение размера минимальных и оптимальных операций ввода-вывода (I/O) в CentOS может быть сложной задачей, и в большинстве случаев это не так просто осуществить на уровне физического диска. Однако вы можете исследовать виртуальные решения, которые позволят вам достичь ваших целей. Позвольте мне объяснить подробнее.
Теория (Theory)
Размер ввода-вывода (I/O) на жестком диске определяется физическим устройством, и для большинства современных жестких дисков и SSD он составляет 512 байт или 4096 байт (4KB). Это называется размером сектора. Размер сектора является физической и логической единицей на устройстве, и поддержка разных размеров может быть ограничена самим аппаратным обеспечением. Изменение этого размера может иметь последствия для файловой системы, а использование необычных размеров может привести к проблемам совместимости с программным обеспечением, которое вы используете.
Пример (Example)
Как вы упоминаете в вашем описании, вы пытаетесь изменить размер I/O с 512 байт на 262144 байт (256 КБ) или 524288 байт (512 КБ). Хотя есть инструменты, такие как hdparm
, которые могут позволить вас изменить логический размер сектора, это не рекомендуется и может даже не поддерживаться вашим оборудованием. В большинстве случаев операционная система и само драйверное обеспечение настроены для работы с физическим размером сектора, установленным производителем.
С другой стороны, вы можете создать виртуальный слой, который будет симулировать нужные вам I/O размеры. Например, создание логического тома с использованием LVM (Logical Volume Management) позволяет вам управлять и изменять параметры разметки так, чтобы они соответствовали вашей специфике.
Применение (Application)
Чтобы создать виртуальный слой, который будет давать вам то, что вы хотите, можно использовать методику создания логического тома с изменением размера I/O при помощи LVM. Следующие шаги могли бы быть полезными:
-
Создание физического тома (PV):
Сначала создайте физический том. Это база для группы томов (VG).
sudo pvcreate <ваш_диск>
Например:
sudo pvcreate /dev/sda
-
Создание группы томов (VG):
Далее создайте группу томов с использованием этого физического тома.
sudo vgcreate volume_group_name <ваш_диск>
Например:
sudo vgcreate my_volume_group /dev/sda
-
Создание логического тома (LV):
Теперь создайте логический том, определяя размер I/O. Вы упоминали, что хотите 256 КБ, поэтому используйте
-I 256
для указания размера.sudo lvcreate -I 256 -l 100%FREE -n logical_volume_name volume_group_name
Например:
sudo lvcreate -I 256 -l 100%FREE -n my_logical_volume my_volume_group
-
Форматирование и использование:
После создания логического тома отформатируйте его в нужную вам файловую систему и смонтируйте.
sudo mkfs.ext4 /dev/my_volume_group/my_logical_volume sudo mount /dev/my_volume_group/my_logical_volume /your/mount/point
Риски и Предостережения
Хотя изменение логического размера ввода-вывода может показать улучшение производительности в определенных сценариях, существуют риски потери данных или проблемы совместимости. Всегда рекомендуется делать резервные копии важных данных перед выполнением таких изменений. Также следует принять во внимание, что при работе с небольшими файлами могут возникать проблемы с эффективностью пространства.
Заключение
В большинстве сценариев лучше позволить операционной системе и драйверам управлять размерами ввода-вывода, так как они оптимизированы для наилучшей производительности на уровне системы. Если у вас есть специфические требования, которые требуют таких настроек, создание виртуального уровня с использованием LVM может быть подходящим решением. Рекомендуется провести тщательное тестирование и оценку производительности после внесения таких изменений, чтобы убедиться, что они действительно приносят желаемый результат.
Понимание внутренней работы вашей операционной системы и аппаратного обеспечения, а также умение правильно использовать инструменты системы управления томами, может дать вам необходимые рычаги для достижения высокой производительности и эффективности.