IP Library › Granted Patent US 9,961,033
Granted Patent B2
US 9,961,033 · App. 14/936,283 · Granted May 1, 2018

Memory-mapped input/output (I/O) channel

Inventors: Marcel Apfelbaum (Afula, IL); Gal Hammer (Kfar Saba, IL)
Assignee: Red Hat Israel, Ltd.
H04L51/22H04L47/70
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,961,033
App. No.
14/936,283
Granted
May 1, 2018
Kind
B2
Abstract

Various examples are directed to systems and methods for utilizing a memory-mapped I/O channel. A first application may request that a message be sent to a channel counterparty. A message driver may receive from the first application the request to send the message, where the request comprises payload data from the message. The message driver may write a work request to a send queue of a first queue pair at the first memory location. An emulated channel adapter may poll a physical address at a memory device corresponding to the first memory location; determine that the work request is present at the send queue, and send the payload data to the channel counterparty.

Claims (74)

1. A method for sending a message, comprising:

sending, by a first application of a first virtual machine executing at a host computing device and to an Infiniband (IB) driver, a request for a first queue pair, wherein the request comprises an indication of a channel counterparty, wherein the first queue pair comprises a send queue for sending messages to the channel counterparty and a receive queue for receiving messages from the channel counterparty;

receiving, by the IB driver, the request for the first queue pair;

requesting, by the IB driver and from a guest operating system (OS) of the first virtual machine, a first memory location;

receiving, by the IB driver, a first virtual machine physical address of the first memory location;

sending, by the IB driver and to an emulated channel adapter, the first virtual machine physical address of the first memory location;

determining, by the emulated channel adapter, a host computing device physical memory address for the first memory location, wherein the emulated channel adapter comprises a thread executed at and bound to a first processor core of the host computing device; and

periodically polling, by the emulated channel adapter, the first memory location for at least one work request written to the first queue pair.

2. The method of claim 1 , further comprising:

receiving, by the IB driver and from the first application, a request to send payload data to the channel counterparty; and

posting, by the IB driver, a work request to the send queue of the first queue pair, wherein the work request comprises the payload data.

3. The method of claim 2 , further comprising:

determining, by the emulated channel adapter, that the work request has been written to the first memory location; and

sending the payload data to the channel counterparty.

4. The method of claim 2 , wherein the channel counterparty is a second application of a second virtual machine executing at the host computing device, further comprising sending the payload data and addressing data describing the channel counterparty to a software switch executing at the host computing device.

5. The method of claim 2 , wherein the channel counterparty is at a second computing device, further comprising:

generating a plurality of packets, wherein the plurality of packets comprises the message and an indication of the channel counterparty; and

sending the plurality of packets to a network interface controller of the host computing device.

6. The method of claim 2 , further comprising sending the work request, by the IB driver, to the first virtual machine physical address for the first memory location.

7. The method of claim 1 , further comprising:

sending, by the first application and to the IB driver, a request for a second queue pair for a second communication channel between the first application and a second channel counterparty;

receiving, by the IB driver, the request for the second queue pair;

requesting, by the by the IB driver and from the guest OS, a second memory location;

receiving, by the IB driver, a second virtual machine physical address for the second memory location;

sending, by the IB driver an to the emulated channel adapter, the second virtual machine physical address of the second memory location;

determining, by the emulated channel adapter, a host computing device physical memory address for the second memory location; and

periodically polling, by the emulated channel adapter, the second memory location.

8. The method of claim 1 , further comprising:

receiving, by the emulated channel adapter, incoming payload data, the incoming payload data from an incoming message directed to the first application;

writing, by the emulated channel adapter, the incoming payload data to the receive queue; and

sending, by the emulated channel adapter, a notification of the incoming message to the first application.

9. The method of claim 8 , further comprising, receiving, by the emulated channel adapter and from a software switch executing at the host computing device, the incoming payload data.

10. The method of claim 8 , further comprising, receiving, by the emulated channel adapter and from a network interface controller of the host computing device, the incoming payload data.

11. The method of claim 8 , further comprising polling, by the emulated channel adapter, at least one of a network interface controller or a software switch for incoming messages.

12. A host computing device, comprising:

a plurality of processor cores;

a memory device comprising instructions stored thereon that, when executed by one or more of the plurality of processor cores, causes the host computing device to:

execute a first application programmed to request that a message be sent to a channel counterparty;

execute a message driver programmed to:

receive from the first application a request to send the message, wherein the request comprises payload data from the message;

request, from an operating system, a first memory location in a virtual address space of the first application;

receive, from the operating system, a virtual address for the first memory location;

write a work request to a send queue of a first queue pair at the first memory location in the virtual address space of the first application, wherein the work request comprises the payload data;

send the virtual address for the first memory location to an emulated channel adapter;

execute the emulated channel adapter programmed to:

poll a physical address at the memory device corresponding to the first memory location;

determine that the work request is present at the send queue; and

send the payload data to the channel counterparty associated with the first queue pair.

13. The host computing device of claim 12 , wherein the channel counterparty is a second application executed at the host computing device, and wherein the emulated channel adapter is further programmed to send the payload data and addressing data describing the channel counterparty to a software switch executing on the host computing device.

14. The host computing device of claim 12 , wherein the channel counterparty is at a second computing device, wherein the emulated channel adapter is further programmed to:

generate a plurality of packets, wherein the plurality of packets comprises the payload data and addressing data describing the channel counterparty; and

send the plurality of packets to a network interface controller of the host computing device.

15. The host computing device of claim 12 , wherein the emulated channel adapter is further programmed to send to the operating system a request to pin the first memory location to a non-volatile portion of the memory device.

16. The host computing device of claim 12 , wherein the operating system is a guest operating system of a virtual machine executed at the host computing device.

17. The host computing device of claim 12 , wherein the memory device further comprises instructions stored thereon that, when executed by one or more of the plurality of processor cores, causes the host computing device to:

instantiate a emulated channel adapter thread for implementing the emulated channel adapter; and

bind the emulated channel adapter thread to a first processor core of the plurality of processor cores.

18. The host computing device of claim 17 , wherein the memory device further comprises instructions stored thereon that, when executed by one or more of the plurality of processor cores, causes the host computing device to:

instantiate a second emulated channel adapter thread for implementing a second emulated channel adapter; and

bind the second emulated channel adapter to the first processor core of the plurality of processor cores.

19. A host computing device, comprising:

a plurality of processor cores;

a memory device comprising instructions stored thereon that, when executed by one or more of the plurality of processor cores, causes the host computing device to:

execute a first application programmed to request that a message be sent to a channel counterparty;

execute a message driver programmed to:

receive from the first application a request to send the message, wherein the request comprises payload data from the message;

write a work request to a send queue of a first queue pair at a first memory location in a virtual address space of the first application, wherein the work request comprises the payload data, and wherein the first queue pair also comprises a receive queue;

execute an emulated channel adapter programmed to:

poll a physical address at the memory device corresponding to the first memory location;

determine that the work request is present at the send queue;

send the payload data to the channel counterparty associated with the first queue pair;

receive an incoming message directed to the first application from the channel counterparty;

write the incoming message to the receive queue; and

send a notification of the incoming message to the first application.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 12, 2015
From: APFELBAUM, MARCEL; HAMMER, GAL
To: RED HAT ISRAEL, LTD.
Reel/Frame 037023/0639 →
Continuity (1)
Related Publication 20170134325A1 · May 11, 2017