Я пытаюсь написать приложение, которое нужно будет очень быстро записать на диск.Я достиг своей цели по производительности записи на диск, и это здорово.
Однако я заметил, что запись на диск так быстро использует много процессорного времени: одно ядро максимально загружено, другое -на 80% и еще 2 на 10-20%.Итак, я слышал, что O_DIRECT может уменьшить потребление ресурсов ЦП, избегая всех этих копий в пространство ядра, а затем копировать на диск.
Я запустил небольшую тестовую программу, которая подтвердила это - загрузка ЦП снижается до 50% от одного ядра -намного лучше.
Однако, я никогда не получал такую же пропускную способность, как при обычной записи, и чтобы сделать это быстрее, мне пришлось использовать действительно большой размер записи (что-то около 130 МБ!)
Итак, вопрос, я думаю:
- Есть ли лучший способ уменьшить загрузку ЦП, чем O_DIRECT для записи?или
- Как я могу получить пропускную способность, аналогичную той, которую получает ядро?
Моя среда - Linux, я использую RAID 50 и могу буферизовать записипока я не достигну оптимального размера записи.За один раз будет только один писатель.