поддельные вызовы fsync для повышения производительности

До сих пор запуск всех тестов нашего программного обеспечения, созданного с использованием следующих компонентов, занимает один час: Linux, PostgreSQL, Python, Django.

Я предполагаю, что производительность может быть улучшена, если мы подделаем вызовы fsync.

В PostgreSQL есть возможность отключить fsync, но не лучше ли указать всей операционной системе откладывать fsync настолько, насколько это возможно?

Обновление: я знаю, что это небезопасно, и сбой сервера может привести к невозможности восстановления системы. Но это неважный jenkins slave, который можно быстро настроить заново.

Обновление 2: PostgreSQL — это всего лишь одна из многих служб, работающих на этом хосте. Я ищу решение на уровне операционной системы.


person guettli    schedule 29.01.2014    source источник
comment
Это кажется плохой идеей. СУБД требуется (определенное количество) упорядоченных операций записи, чтобы разрешить восстановление после сбоя.   -  person wildplasser    schedule 29.01.2014
comment
@wildplasser Я обновил вопрос: сервер является неважным рабом Дженкинса. Нет проблем, если не подлежит восстановлению.   -  person guettli    schedule 29.01.2014
comment
Отключение fsync в postgresql, вероятно, принесет вам 99+% пользы. Едва ли стоит беспокоиться об остальных ‹1%. Вы можете поместить все это в /dev/shm/, если оно подходит.   -  person jjanes    schedule 29.01.2014
comment
@jjanes PostgreSQL — лишь одно из нескольких приложений, которые создают нагрузку ввода-вывода во время тестирования. Я отключил синхронные коммиты и увеличил wal_writer_delay до 2000 мс, но это мало помогает. Я предполагаю, что ввод-вывод PostgreSQL менее важен в моей установке. Вот почему я хочу настроить fsync на уровне ОС.   -  person guettli    schedule 29.01.2014
comment
Здесь отсутствует какой-то контекст? Почему вы думаете, что подделка fsync поможет вам в том, что вы делаете? fsync() должен сбрасывать только целевые файлы. Возможно, какой-то другой процесс в системе выполняет глобальный вызов sync()? Лично я настоятельно рекомендую использовать UNLOGGED таблицы вместо отключения fsync.   -  person Craig Ringer    schedule 30.01.2014
comment
@Craig, да, я не понимаю, что, кроме базы данных, может выдавать много fsync в первую очередь. Но я не думаю, что UNLOGGED будет работать, транзакция все равно выдаст запись фиксации (по крайней мере, в hot_standby — более низкие уровни не тестировались), и это будет fsynced. Придется отключить synchronous_commit.   -  person jjanes    schedule 04.02.2014
comment
@jjanes Хороший вопрос. Я думал о том, что это объем сброшенных данных, но, вероятно, это вращающийся ржавый диск, который может работать только в диапазоне двух цифр fsyncs в секунду.   -  person Craig Ringer    schedule 05.02.2014