Доменные сокеты PostgreSQL UNIX против сокетов TCP - PullRequest
46 голосов
/ 03 ноября 2008

Интересно, будут ли соединения сокетов домена UNIX с postgresql быстрее, чем соединения tcp от localhost с высокой скоростью параллелизма, и если да, то насколько?

Ответы [ 5 ]

49 голосов
/ 24 августа 2012

Разработчик ядра Postgres Брюс Момджян написал об этой теме . Момджян заявляет: «Связь с сокетами Unix-доменов значительно быстрее». Он измерил производительность сети запросов, показав, что сокет локального домена был на 33% быстрее, чем при использовании стека TCP / IP.

32 голосов
/ 03 ноября 2008

Сокеты домена UNIX должны обеспечивать более высокую производительность, чем сокеты TCP через интерфейс обратной связи (меньшее копирование данных, меньше переключений контекста), но я не знаю, можно ли продемонстрировать увеличение производительности с помощью PostgreSQL.

Я нашел небольшое сравнение в списке рассылки FreeBSD: http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html.

5 голосов
/ 03 ноября 2008

Я считаю, что доменные сокеты UNIX в теории обеспечивают лучшую пропускную способность, чем сокеты TCP на интерфейсе обратной связи, но на практике разница, вероятно, незначительна.

Данные, передаваемые через доменные сокеты UNIX, не должны проходить вверх и вниз по уровням стека IP.

re: ответ Александра. AFAIK, вы не должны получать более одного переключателя контекста или копии данных в каждом направлении (т.е. для каждого read() или write()), поэтому я считаю, что разница будет незначительной. Стек IP не должен копировать пакет при его перемещении между уровнями, но он должен манипулировать внутренними структурами данных для добавления и удаления заголовков пакетов более высокого уровня.

4 голосов
/ 03 ноября 2008

afaik, сокет домена Unix (UDS) работает как системные каналы и отправляет ТОЛЬКО данные, не отправляет контрольную сумму и другую дополнительную информацию, не использует трехстороннее рукопожатие в качестве сокетов TCP ...

пс: возможно, UDS будет быстрее

0 голосов
/ 03 ноября 2008

TCP-сокеты на локальном хосте обычно реализуются с использованием доменных сокетов UNIX, поэтому ответ на большинстве систем ничтожен. Однако это ни в коем случае не является стандартным - просто как обычно это делается, поэтому вы не должны зависеть от этого.

...