Кросспост из
блога автора. Комментировать лучше
там, но можно и тут
Я тут интересовался
про Infiniband и FreeBSD, теперь могу и сам рассказать :)
Datagram mode
Для начала нужна FreeBSD 9. У меня - какая-то, cvsup делал где-то в январе или около того.
Далее все тривиально:
/etc/make.conf:
WITH_OFED=yes
Конфиг ядра (в GENERIC это место не включено
(
Read more... )
if (ipoib_cm_get(path) && ipoib_cm_up(path)) {
ipoib_cm_send(priv, mb, ipoib_cm_get(path));
} else if (path->ah) {
ipoib_send(priv, mb, path->ah, IPOIB_QPN(eh->hwaddr));
} else if ((path->query || !path_rec_start(priv, path)) &&
path->queue.ifq_len < IPOIB_MAX_PATH_REC_QUEUE) {
_IF_ENQUEUE(&path->queue, mb);
} else {
++priv->dev->if_oerrors;
m_freem(mb);
}
ipoib_send проверяет по mcast_mtu, ipoib_cm_send -- по нормальному mtu, но диагностика у них одинаковая. поправь в сырцах что бы было понятно кто ругается. после этого можно попытаться понять чего не хватает -- path в cm, CM_REP_ATTR_ID от винды (если я правильно понял)
Reply
Проверять буду, но постепенно, сервер то боевой.
Reply
if (ipoib_cm_get(path) && ipoib_cm_up(path)) {
ipoib_cm_send(priv, mb, ipoib_cm_get(path));
} else if (path->ah) {
ipoib_cm_up(..) возвращает 0
А дальше я там запутался. Т.е. докопался до того, что должен прийти event CM_REQ_RECEIVED, только вот кто должен бы его послать?
на винде up-down интерфейсу делал - не помогает.
Пока наплевал, в-общем.
Reply
ну и MTU на винде не надо трогать?
Reply
OpenSM можно попробовать рестартовать, но винда-линукс работали без этого. И на FreeBSD-шной стороне я mtu никак не меняю т.е. OpenSM стартует при уже большом MTU
Меня вот удивляет, что в линуксе/винде надо это место специально включать, а тут оно вроде как "само".
Но да, попробую всячески пошаманить еще. Не сегодня.
Reply
Причем, два вида грабель
1) ARP не ходит. Т.е. на одной машине я вижу запрос, вижу ответ в tcpdump, а на второй не вижу ответа.
2) Если кабель ткнуть-выткнуть и/или рестартовать opensm - ARP появляется. Тогда на одной машине пингую, на второй вижу icmp request и reply, но reply не получается.
Не знаю что и думать пока.
Reply
Table 315 Communication Management Attributes
Attribute NameAttribute IDAttribute-Modifier Description
ClassPortInfo 0x0001 0x00000000 Refer to 13.4.8.1 ClassPortInfo on page 741
ConnectRequest 0x0010 0x00000000 Refer to 12.6.5 REQ - Request for Communication on page
666
MsgRcptAck 0x0011 0x00000000 Refer to 12.6.6 MRA - Message Receipt Acknowledgment
on page 668
ConnectReject 0x0012 0x00000000 Refer to 12.6.7 REJ - Reject on page 669
ConnectReply 0x0013 0x00000000 Refer to 12.6.8 REP - Reply to Request for Communication
on page 675
Reply
Communication Management encompasses the protocols and mechanisms
used to establish, maintain, and release channels for the IB Reliable
Connection, Unreliable Connection, and Reliable Datagram
transport service types. The Service ID Resolution Protocol (see section
12.11) enables users of Unreliable Datagram service to locate Queue
Pairs supporting their desired service.
Connections are managed over Queue Pairs other than those used for the
connection, through the protocol described herein, between the Communication
Managers (CMs) on each system. (See Figure 128) The CMs
communicate using Management Datagrams (MADs), typically over the
General Services Interface (GSI) on each system. This document defines
CM external behaviors, but internal interfaces and implementations are
outside the scope of the InfiniBandTM Architecture specification. Examples
are intended to enable understanding, not to specify implementation.
Reply
tcpdump-а у них нет, а debug print на живом сервере как-то мучительно.
Пусть поживет, как-нибудь руки дойдут и изучу (а наверное проще всего в рассылке спросить :)
Reply
Leave a comment