IP Library › Granted Patent US 10,402,364
Granted Patent B1
US 10,402,364 · App. 16/057,665 · Granted Sep 3, 2019

Read-ahead mechanism for a redirected bulk endpoint of a USB device

Inventors: Gokul Thiruchengode Vajravel (Rayasandra Benjalaru, IN); Ankit Kumar (Deoghar, IN)
Assignee: Dell Products L.P.
G06F13/4282G06F9/45558H04L67/141G06F2213/0042
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 10,402,364
App. No.
16/057,665
Filed
Aug 7, 2018
Granted
Sep 3, 2019
Kind
B1
Art Unit
2184
USPC
710/313
Abstract

A read-ahead mechanism is provided for a redirected Bulk-In endpoint of a USB device. When a USB device is redirected to a server, an agent running on the server can evaluate the USB device's descriptors to determine whether it has any Bulk-In endpoints and whether any Bulk-In endpoint is part of a mass storage interface. For any Bulk-In endpoint that is not part of a mass storage interface, the agent can create a circular buffer and commence originating bulk read requests on the server and then redirecting the bulk read requests to a client-side proxy for delivery to the Bulk-In endpoint. The agent can then store the data it obtains from these bulk read requests in the circular buffer. By repeatedly sending the bulk read requests to the Bulk-In endpoint, the agent ensures that data will be read from the Bulk-In endpoint in a timely manner.

Claims (58)

1. A method, implemented in a virtual desktop infrastructure (VDI) environment that includes a server-side agent and a client-side proxy that interact to establish a remote session on the server, by which the server-side agent implements a read-ahead mechanism to ensure that data is read in a timely manner from a bulk interface of a USB device that is redirected from the client to the server, the method comprising:

receiving a notification from the client-side proxy that identifies that a USB device is connected to the client;

in conjunction with causing the USB device to be redirected to the server, evaluating the notification to determine whether the USB device includes a Bulk-In endpoint;

upon determining that the USB device includes a Bulk-In endpoint, creating a buffer for storing data that is read from the Bulk-In endpoint;

repeatedly generating and redirecting bulk read requests to the client-side proxy to cause the bulk read requests to be submitted to the Bulk-In endpoint;

upon receiving data from the Bulk-In endpoint in response to each of the bulk read requests that the server-side agent generated, storing the data in the buffer; and

upon receiving a bulk read request that was generated by another server-side component, completing the bulk read request using the data stored in the buffer.

2. The method of claim 1 , wherein evaluating the notification to determine whether the USB device includes a Bulk-In endpoint comprises evaluating an endpoint descriptor included in the notification.

3. The method of claim 1 , wherein the server-side agent creates the buffer for storing data that is read from the Bulk-In endpoint only upon determining that the Bulk-In endpoint is not part of a mass storage interface.

4. The method of claim 1 , wherein the buffer is a circular buffer.

5. The method of claim 4 , wherein creating the buffer includes creating a read pointer and a write pointer, the method further comprising:

in conjunction with storing the data in the buffer, updating the write pointer.

6. The method of claim 5 , further comprising:

in conjunction with completing the bulk read request using the data stored in the buffer, updating the read pointer.

7. The method of claim 1 , further comprising:

pausing the repeated generation and redirection of the bulk read requests when an amount of data in the buffer exceeds a threshold.

8. The method of claim 7 , further comprising:

resuming the repeated generation and redirection of the bulk read requests when the amount of data in the buffer no longer exceeds the threshold.

9. The method of claim 1 , wherein repeatedly generating and redirecting bulk read requests to the client-side proxy to cause the bulk read requests to be submitted to the Bulk-In endpoint comprises routing the bulk read requests through a virtual bus driver on the server.

10. The method of claim 1 , further comprising:

receiving data from the Bulk-In endpoint in response to a first bulk read request that the server-side agent generated;

receiving a second bulk read request that was generated by another server-side component; and

completing the second bulk read request using the data of the first bulk read request without first storing the data in the buffer.

11. The method of claim 10 , wherein the data used to complete the second bulk read request is a first portion of the data of the first bulk read request, the method further comprising:

storing a second portion of the data of the first bulk read request in the buffer, the first portion and the second portion being distinct portions of the data of the first bulk read request.

12. The method of claim 1 , wherein repeatedly generating bulk read requests comprises reusing I/O requests packets (IRPs).

13. The method of claim 1 , further comprising:

determining that data is not being read from the Bulk-in endpoint in a timely manner;

instructing the client-side proxy to create a second buffer for storing data that is read from the Bulk-In endpoint and to commence repeatedly generating bulk read requests to obtain data from the Bulk-In endpoint for storage in the second buffer; and

ceasing the repeated generation and redirection of the bulk read requests.

14. One or more computer storage media storing computer-executable instructions which, when executed by one or more processors in a virtual desktop infrastructure (VDI) environment, implement a method for ensuring that data is read from a redirected Bulk-In endpoint of a USB device, the method comprising:

determining, by a server-side agent, that a Bulk-In endpoint of a USB device connected to a client is redirected for access within a remote session on the server;

creating, by the server-side agent, a buffer for storing data read from the Bulk-In endpoint;

repeatedly generating and redirecting bulk read requests to a client-side proxy on the client;

in response to the bulk read requests, receiving, by the server-side agent, data that was read from the Bulk-In endpoint;

storing, by the server-side agent, the data read from the Bulk-In endpoint in the buffer;

receiving, by the server-side agent, a first bulk read request that was generated by another server-side component and that targets the Bulk-In endpoint; and

forgoing redirection of the first bulk read request to the client-side proxy by completing the first bulk read request using data that was stored in the buffer.

15. The computer storage media of claim 14 , wherein repeatedly generating and redirecting bulk read requests to the client-side proxy comprises routing the bulk read requests through a virtual bus driver on the server.

16. The computer storage media of claim 14 , wherein repeatedly generating and redirecting bulk read requests to the client-side proxy comprises reusing one or more I/O request packets (IRPs) on the server.

17. The computer storage media of claim 14 , wherein the method further comprises:

receiving data that was read from the Bulk-In endpoint in response to a bulk read request that was generated by the serve-side agent;

receiving a second bulk read request that was generated by another server-side component; and

completing the second bulk read request using the data that was read from the Bulk-In endpoint in response to the bulk read request that was generated by the server-side agent without first storing the data in the buffer.

18. The computer storage media of claim 14 , wherein the method further comprises:

generating, by the client-side proxy and for each redirected bulk read request, an equivalent request on the client terminal; and

causing the equivalent request to be submitted to the Bulk-In endpoint.

19. The computer storage media of claim 18 , wherein:

the equivalent request is a USB request block (URB); or

the equivalent request is an URB and an I/O request packet (IRP).

20. A method, implemented in a virtual desktop infrastructure (VDI) environment that includes a server-side agent and a client-side proxy that interact to establish a remote session on the server, by which a read-ahead mechanism is implemented to ensure that data is read in a timely manner from a bulk interface of a USB device that is redirected from the client to the server, the method comprising:

in conjunction with establishing or maintaining a remote session on the server while a USB device is connected to the client, redirecting, by the client-side proxy, a Bulk-In endpoint of the USB device to the server;

creating, by the client-side proxy, a buffer for storing data that is read from the Bulk-In endpoint;

the client-side proxy repeatedly generating and submitting bulk read requests to the Bulk-In endpoint;

upon receiving data from the Bulk-In endpoint in response to each of the bulk read requests that the client-side proxy generated, storing the data in the buffer;

receiving, by the client-side proxy, a first bulk read request from the server-side agent, wherein the first bulk read request was generated by another server-side component;

reading, by the client-side proxy, data from the buffer and sending the data to the server-side agent rather than submitting the first bulk read request to the Bulk-In endpoint; and

completing, by the server-side agent, the first bulk read request using the data sent by the client-side proxy.

Assignments (8)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (051302/0528) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO WYSE TECHNOLOGY L.L.C.); SECUREWORKS CORP.
Reel/Frame 060438/0593 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
RELEASE OF SECURITY INTEREST AT REEL 051449 FRAME 0728 Recorded Nov 2, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC; WYSE TECHNOLOGY L.L.C.; SECUREWORKS CORP.; EMC CORPORATION
Reel/Frame 058002/0010 →
SECURITY AGREEMENT Recorded Apr 22, 2020
From: CREDANT TECHNOLOGIES INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 053546/0001 →
SECURITY AGREEMENT Recorded Dec 31, 2019
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC; WYSE TECHNOLOGY L.L.C.; SECUREWORKS CORP.; EMC CORPORATION
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
Reel/Frame 051449/0728 →
PATENT SECURITY AGREEMENT (NOTES) Recorded Dec 16, 2019
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC; WYSE TECHNOLOGY L.L.C.; SECUREWORKS CORP.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
Reel/Frame 051302/0528 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 8, 2018
From: VAJRAVEL, GOKUL THIRUCHENGODE; KUMAR, ANKIT
To: DELL PRODUCTS L.P.
Reel/Frame 046584/0307 →
Cited By (2)
US 12,634,284 US 12,664,116