Локальні локальні сокети болісно повільніші, ніж на Mac


5

Це питання базується на цій темі OpenOffice .

Я використовую Python і Офіс UNO міст аналізувати документи. Більшу частину я запускаю на моєму Mac і перетворюю примірник офісу, щоб слухати на localhost:

soffice --accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"

Використовуючи це, запуск документа через тест займає близько 2 секунд на моєму Mac. Проте в Linux, той самий сценарій працює приблизно 45 секунд, різниця в продуктивності. І ось на Mint, Gentoo і Ubuntu.

Цікаво, використовуючи офіс і підключаючись до нього через іменовану трубку:

soffice --accept="pipe,name=abraxas;urp;StarOffice.ServiceManager"

працює на майже однаковій швидкості на всіх тестованих платформах: близько 1,5 секунд.

Питання : що настільки відрізняється між з'єднаннями сокетів Mac і Linux, і чому роз'єм Linux набагато повільніше?


Виправлено в LibreOffice: gerrit.libreoffice.org/#/c/13856
Jens

Відповіді:


5

Спробувати увімкніть TCP_NODELAY .

За замовчуванням використовується TCP Алгоритм Нагеля збирати невеликі вихідні пакети для того, щоб відправити всі відразу як один великий пакет, що може мати згубний вплив на затримку.


1
Це чудово працювало, і я додав tcpNoDelay=1 до обох сторін з'єднання. Дякую! Оновлено та вирішено оригінальний потік .
Jens

2

Я бачу подібну поведінку на моєму робочому столі Ubuntu (так що його не X), де його прийняття ~ 45sec до завершення. Ось найбільші правопорушники, засновані на strace з soffice процес:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 68.50   23.948922         323     74067      1611 futex
 23.90    8.356000      151927        55           poll
  7.31    2.555215          95     26915           recv
  0.10    0.036301       18151         2           waitpid
  0.06    0.019407           2      9586           send
  0.05    0.016330          30       539        15 read
  0.03    0.009430           1     16675           gettimeofday

Мені здається, що можуть виникнути певні проблеми в тому, як вони реалізували свою синхронізацію потоків у Linux. Я не маю доступу до Mac для порівняння, але це командний рядок, який я виконав:

strace -cf soffice --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" --headless

1
Див. Відповідь вище: add tcpNoDelay=1 для обох сторін зв'язку і продуктивність буде прискорюватися надзвичайно.
Jens
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.