IP Library Granted Patent US 12,373,102
Granted Patent B2
US 12,373,102 · App. 17/644,747 · Granted Jul 29, 2025

Storage device I/O performance in remote computing environments

Inventors: Weigang Huang (Beijing, CN); Yueting Zhang (Beijing, CN); Huiyong Huo (Beijing, CN); Zhongzheng Tu (Beijing, CN); Mingsheng Zang (Beijing, CN); Chuansheng Zhang (Beijing, CN)
Assignee: Omnissa, LLC
G06F3/0611G06F3/0655G06F3/0679
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 12,373,102
App. No.
17/644,747
Granted
Jul 29, 2025
Kind
B2
Abstract

The disclosure provides techniques for storage device input/output (I/O) performance improvement in a remote computing environment. Embodiments include creating, on a remote device that is remote from a client device, a virtual storage device corresponding to a physical storage device that is located on the client device. Embodiments include receiving, by a driver on the remote device, a request from an application on the remote device to perform an input or output operation with respect to the virtual storage device. Embodiments include sending, by the remote device, a block-level input or output operation to the client device based on the request. Embodiments include receiving, by the remote device, a result of the block-level input or output operation from the client device. Embodiments include providing, by the driver on the remote device, to the application, a response to the request based on the result of the block-level input or output operation.

Claims (54)

1. A method of storage device input/output (I/O) performance improvement in a remote computing environment, the method comprising:

creating, on a remote device that is remote from a client device, a virtual storage device corresponding to a physical storage device that is located on the client device, wherein the physical storage device is accessed by communicating universal serial bus (USB) request blocks;

receiving, from an application on the remote device, a storage input/output (I/O) request at a file system level of a stack for accessing the physical storage device, wherein the stack comprises the file system level, a volume level, a disk level, a small computer system interface (SCSI) level and a universal serial bus (USB) level;

converting, on the remote device, the storage I/O request at the file system level of the stack to a block-level request at the volume level of the stack;

providing the block-level request to a driver of the virtual storage device;

redirecting, by the driver on the remote device, the block-level request at the volume level of the stack to an agent on the remote device;

sending, by the agent on the remote device, the block-level request to the client device, wherein, on the client device, the block-level request is converted into a USB request block of the USB level of the stack used to access the physical storage device;

receiving, by the remote device, a result of the block-level request from the client device at the volume level of the stack; and

providing, by the driver on the remote device, to the application, a response to the storage I/O request based on the result.

2. The method of claim 1 , further comprising receiving, by the remote device, a request from the client device to initiate creation of the virtual storage device based on the physical storage device.

3. The method of claim 1 , further comprising creating a virtual channel between the remote device and the client device, wherein the block-level request and the result of the block-level request are transmitted via the virtual channel.

4. The method of claim 1 , wherein the physical storage device is a universal serial bus (USB) device connected to the client device.

5. The method of claim 1 , wherein the result of the block-level request comprises data retrieved from the physical storage device based on the block-level request, and wherein the data is transmitted from the client device to the remote device in a single transmission.

6. The method of claim 1 , further comprising creating, on the remote device, an additional virtual volume, wherein an initial virtual volume associated with creating the virtual storage device corresponds to a first partition of the physical storage device and the additional virtual volume corresponds to a second partition of the physical storage device.

7. The method of claim 1 , further comprising:

determining, by the agent, that completing the storage I/O request requires multiple block-level requests including the block-level request and a second block-level request at the volume level of the stack;

batching, by the agent, the block-level request and the second block-level request into a single message for transmission from the remote device to the client device.

8. A system for storage device input/output (I/O) performance improvement in a remote computing environment, comprising:

at least one memory; and

at least one processor coupled to the at least one memory, the at least one processor and the at least one memory configured to:

create, on a remote device that is remote from a client device, a virtual storage device corresponding to a physical storage device that is located on the client device, wherein the physical storage device is accessed by communicating universal serial bus (USB) request blocks;

receive, from an application on the remote device, a storage input/output (I/O) request at a file system level of a stack for accessing the physical storage device, wherein the stack comprises the file system level, a volume level, a disk level, a small computer system interface (SCSI) level and a universal serial bus (USB) level;

convert, on the remote device, the storage I/O request at the file system level of the stack to a block-level request at the volume level of the stack;

provide the block-level request to a driver of the virtual storage device;

redirect, by the driver on the remote device, the block-level request at the volume level of the stack to an agent on the remote device;

send, by the agent on the remote device, the block-level request to the client device, wherein, on the client device, the block-level request is converted into a USB request block of the USB level of the stack used to access the physical storage device;

receive, by the remote device, a result of the block-level request from the client device at the volume level of the stack; and

provide, by the driver on the remote device, to the application, a response to the storage I/O request based on the result of the block-level request.

9. The system of claim 8 , wherein the at least one processor and the at least one memory are further configured to receive, by the remote device, a request from the client device to initiate creation of the virtual storage device based on the physical storage device.

10. The system of claim 8 , wherein the at least one processor and the at least one memory are further configured to create a virtual channel between the remote device and the client device, wherein the block-level request and the result of the block-level request are transmitted via the virtual channel.

11. The system of claim 8 , wherein the physical storage device is a universal serial bus (USB) device connected to the client device.

12. The system of claim 8 , wherein the result of the input block-level request comprises data retrieved from the physical storage device based on the block-level request, and wherein the data is transmitted from the client device to the remote device in a single transmission.

13. The system of claim 8 , further comprising creating, on the remote device, an additional virtual volume, wherein an initial virtual volume associated with creating the virtual storage device corresponds to a first partition of the physical storage device and the additional virtual volume corresponds to a second partition of the physical storage device.

14. The system of claim 8 , wherein the at least one processor and the at least one memory are further configured to:

determine, by the agent, that completing the storage I/O request requires multiple block-level requests including the block-level request and a second block-level request at the volume level of the stack;

batch, by the agent, the block-level request and the second block-level request into a single message for transmission from the remote device to the client device.

15. A non-transitory computer-readable medium storing instructions that, when executed by one or more processors, cause the one or more processors to:

create, on a remote device that is remote from a client device, a virtual storage device corresponding to a physical storage device that is located on the client device, wherein the physical storage device is accessed by communicating universal serial bus (USB) request blocks;

receive, from an application on the remote device, a storage input/output (I/O) request at a file system level of a stack for accessing the physical storage device, wherein the stack comprises the file system level, a volume level, a disk level, a small computer system interface (SCSI) level and a universal serial bus (USB) level;

convert, on the remote device, the storage I/O request at the file system level of the stack to a block-level request at the volume level of the stack;

provide the block-level request to a driver of the virtual storage device;

redirect, by the driver on the remote device, the block-level request at the volume level of the stack to an agent on the remote device;

send, by the agent on the remote device, the block-level request to the client device, wherein, on the client device, the block-level request is converted into a USB request block of the USB level of the stack used to access the physical storage device;

receive, by the remote device, a result of the block-level request from the client device at the volume level of the stack; and

provide, by the driver on the remote device, to the application, a response to the storage I/O request based on the result of the block-level request.

16. The non-transitory computer-readable medium of claim 15 , wherein the instructions, when executed by the one or more processors, further cause the one or more processors to receive, by the remote device, a request from the client device to initiate creation of the virtual storage device based on the physical storage device.

17. The non-transitory computer-readable medium of claim 15 , wherein the instructions, when executed by the one or more processors, further cause the one or more processors to create a virtual channel between the remote device and the client device, wherein the block-level request and the result of the block-level request are transmitted via the virtual channel.

18. The non-transitory computer-readable medium of claim 15 , wherein the physical storage device is a universal serial bus (USB) device connected to the client device.

19. The non-transitory computer-readable medium of claim 15 , wherein the instructions, when executed by the one or more processors, further cause the one or more processors to create, on the remote device, an additional virtual volume, wherein

an initial virtual volume associated with creating the virtual storage device corresponds to a first partition of the physical storage device and the additional virtual volume corresponds to a second partition of the physical storage device, and

the result of the input or output operation comprises data retrieved from the physical storage device based on the block-level request, and wherein the data is transmitted from the client device to the remote device in a single transmission.

20. The non-transitory computer-readable medium of claim 15 , wherein the instructions, when executed by the one or more processors, further cause the one or more processors to:

determine, by the agent, that completing the storage I/O request requires multiple block-level requests including the block-level request and a second block-level request at the volume level of the stack;

batch, by the agent, the block-level request and the second block-level request into a single message for transmission from the remote device to the client device.

Assignments (4)
PATENT ASSIGNMENT Recorded Aug 5, 2024
From: VMWARE LLC
To: OMNISSA, LLC
Reel/Frame 068327/0365 →
SECURITY INTEREST Recorded Jul 3, 2024
From: OMNISSA, LLC
To: UBS AG, STAMFORD BRANCH
Reel/Frame 068118/0004 →
CHANGE OF NAME Recorded Apr 15, 2024
From: VMWARE, INC.
To: VMWARE LLC
Reel/Frame 067102/0242 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 5, 2022
From: HUANG, WEIGANG; ZHANG, YUETING; HUO, HUIYONG; TU, ZHONGZHENG; ZANG, MINGSHENG; ZHANG, CHUANSHENG
To: VMWARE, INC.
Reel/Frame 058552/0848 →
Continuity (1)
Related Publication 20230195313A1 · Jun 22, 2023
References Cited (26)
US 6973512B1 · Koeman · 2005 [cited by examiner]
US 7082598B1 · Le · 2006 [cited by examiner]
US 7478180B1 · Li · 2009 [cited by examiner]
US 8010630B2 · Barreto · 2011 [cited by examiner]
US 8200864B1 · Lachwani · 2012 [cited by examiner]
US 9397944B1 · Hobbs · 2016 [cited by examiner]
US 9582444B1 · Kumar · 2017 [cited by examiner]
US 9971529B1 · LeCrone · 2018 [cited by examiner]
US 20100161863A1 · Cota-Robles · 2010 [cited by examiner]
US 20100185803A1 · Gjoerup · 2010 [cited by examiner]
US 20110047195A1 · Le · 2011 [cited by examiner]
US 20110265083A1 · Davis · 2011 [cited by examiner]
US 20130326095A1 · Edney · 2013 [cited by examiner]
US 20130326186A1 · Shaikh · 2013 [cited by examiner]
US 20140006731A1 · Uluski · 2014 [cited by examiner]
US 20140164648A1 · Barber · 2014 [cited by examiner]
US 20150220467A1 · Jin · 2015 [cited by examiner]
US 20160179565A1 · Chen · 2016 [cited by examiner]
US 20170180516A1 · Chauhan · 2017 [cited by examiner]
US 20170212690A1 · Babu · 2017 [cited by examiner]
US 20170289262A1 · Vajravel · 2017 [cited by examiner]
US 20180232293A1 · Petrick · 2018 [cited by examiner]
US 20190050350A1 · Regupathy · 2019 [cited by examiner]
US 20200252472A1 · Vajravel · 2020 [cited by examiner]
US 20220066812A1 · Du · 2022 [cited by examiner]
US 20220066821A1 · Pinto · 2022 [cited by examiner]