Можно ли обнаружить разницу во времени между моментом, когда ядро ​​генерирует эполл, и моментом, когда Sun JVM его читает? - PullRequest
3 голосов
/ 21 декабря 2010

т. Е. Время A = напряжение достигает сетевого адаптера;Время B = Селектор из пакета Java NIO может выбрать канал сокета для ввода / вывода.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

Используйте SO_TIMESTAMP и найдите сетевой адаптер, который фактически поддерживает временные метки, и тот, который поддерживает временные метки с разрешением лучше миллисекунды.Тогда у вас будет шанс, если вы сможете заставить Java читать входящие cmsg вспомогательные данные.

Без хорошей аппаратной поддержки пакеты будут помечены ядром с вероятностьюнестабильный таймер низкого разрешения.

(правка №1) Пример кода на C, требующий 2.6.30 или более новое ядро. Я думаю:

http://www.mjmwired.net/kernel/Documentation/networking/timestamping/timestamping.c

(правка # 2) Пример кода для определения задержки ядра в пространстве пользователя в C:

http://vilimpoc.org/research/ku-latency/

(правка # 3) Я рекомендую следовать проекту J-OWAMP, который зависит от таймеров высокого разрешения и тестирования задержки пакетов.Команда OWAMP подталкивает команду ядра Linux к лучшей поддержке SO_TIMESTAMP.

http://www.av.it.pt/jowamp/

0 голосов
/ 21 декабря 2010

вам нужно будет использовать что-то вроде tcpdump , а затем сопоставить временные метки между журналами вашего приложения и журналами "анализатора", чтобы определить это, это невозможно только с помощью jvm.

...