US12287744B2 - Merged input/output for accelerating directory listing phase in client drive redirection - Google Patents
Merged input/output for accelerating directory listing phase in client drive redirection Download PDFInfo
- Publication number
- US12287744B2 US12287744B2 US18/309,385 US202318309385A US12287744B2 US 12287744 B2 US12287744 B2 US 12287744B2 US 202318309385 A US202318309385 A US 202318309385A US 12287744 B2 US12287744 B2 US 12287744B2
- Authority
- US
- United States
- Prior art keywords
- directory
- request
- virtual desktop
- query
- requests
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active, expires
Links
- 230000004044 response Effects 0.000 claims abstract description 176
- 238000000034 method Methods 0.000 claims abstract description 35
- 230000015654 memory Effects 0.000 claims abstract description 19
- 230000008685 targeting Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 22
- 239000000306 component Substances 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 239000000470 constituent Substances 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000003936 working memory Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000012533 medium component Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/144—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/40—Bus coupling
Definitions
- the present disclosure generally relates to virtual desktop infrastructure and more specifically to techniques for redirecting local drives on a client device to a virtual desktop on a remote server.
- each user in an enterprise is provisioned a virtual desktop and is allowed to access his or her virtual desktop over a remote network connection, such as a WAN connection.
- the virtual desktops are typically hosted on servers that reside in a data center of the enterprise or a third-party service provider, and each host server may execute multiple virtual desktops. Users can utilize a client device to remotely log into their individual virtual desktop and all of the application execution takes place on the remote host server which is linked to the local client device over a network using a remote display protocol, such as remote desktop protocol (RDP), PC-over-IP protocol (PCoIP), virtual network computing (VNC) protocol, or the like.
- RDP remote desktop protocol
- PCoIP PC-over-IP protocol
- VNC virtual network computing
- the user can interact with applications of the virtual desktop, which are running on the remote host server, with only the display, keyboard, and mouse information communicated with the local client device.
- a common implementation of this approach is to host multiple desktop operating system instances on separate virtual machines deployed on a server hardware platform running a hypervisor.
- a virtual desktop's data is stored on the host server (e.g., in a virtual disk) where it is accessed locally by the virtual desktop during execution.
- Some virtual desktops also provide a feature, referred to herein as client drive redirection (CDR), that enables users to access files and folders located on the client device from within the virtual desktop session.
- CDR client drive redirection
- a user can share files, folders and drives located on the local client system with the remote desktop.
- a user can allow applications running in the virtual desktop on the host server to access documents and data that are stored on the user's client device.
- a CDR component such as a CDR server
- I/O input/output
- the number of such requests and responses can be particularly large in cases where the subdirectory contains many files and folders/subdirectories.
- a virtual desktop accesses a shared directory on a client device with CDR
- these requests travel over the network between the virtual desktop and the client device.
- the performance of tasks that involve directory enumeration, such as file accesses and copying can be particularly poor in CDR, especially in cases where the shared directory contains many files and subdirectories.
- FIG. 1 illustrates an example of a virtual desktop environment, in accordance with various embodiments.
- FIG. 2 illustrates an example architecture of a system for efficient directory listing in client drive redirection on virtual desktops, in accordance with various embodiments.
- FIG. 3 is a sequence diagram illustrating an example of I/O requests and I/O responses transmitted during directory listing, in accordance with various embodiments.
- FIG. 4 A is a diagram illustrating an example of a merged I/O request packet format, in accordance with various embodiments.
- FIG. 4 B is a diagram illustrating an example of a merged I/O response packet format, in accordance with various embodiments.
- FIG. 5 illustrates an example process flow for efficient directory listing in client drive redirection on virtual desktops, in accordance with various embodiments.
- FIG. 6 illustrates an example of some general components of a computing device, in accordance with various embodiments.
- Systems and methods in accordance with various embodiments of the present disclosure overcome at least some of the above-mentioned shortcomings and deficiencies by providing more efficient ways to perform directory listing on shared drives when using client drive redirection (CDR) in virtual desktops.
- CDR client drive redirection
- embodiments described herein leverage merged input/output (I/O) requests that allow the directory listing phase to be performed more efficiently, reducing the number of back-and-forth trips over the network when using CDR.
- the process can begin when a request is produced on a virtual desktop (e.g., by a user of the virtual desktop) requiring listing (also referred to herein as “enumeration”) of a subdirectory on a shared drive being accessed on the client device via CDR.
- a request can be produced on a virtual desktop (e.g., by a user of the virtual desktop) requiring listing (also referred to herein as “enumeration”) of a subdirectory on a shared drive being accessed on the client device via CDR.
- Different types of requests made in the virtual desktop can require enumeration of a directory on the shared drive.
- such a request can be to copy a folder in the shared drive from the client device to the virtual desktop, to list contents of a directory on the shared drive in the virtual desktop session when opening or accessing a folder/file on the shared drive in the virtual desktop session, etc.
- a series of sequential input/output (I/O) requests can be generated by the virtual desktop (e.g., by the virtual desktop operating system (OS)) for retrieving the directory listing information from the shared drive.
- the I/O requests can be intercepted by a redirection driver and forwarded to a CDR server running in the virtual desktop, which can handle the sending and receiving of I/O requests and responses, respectively, to/from the client device.
- the number of packets transmitted between the client computing device and the virtual desktop is reduced by merging multiple I/O requests into a single packet and by merging multiple I/O responses into a single packet. Consequently, the efficiency and performance of directory enumeration when using CDR can be significantly improved, especially when the directory contains many files and network performance is poor.
- the virtual machine typically includes a guest operating system (e.g., Windows) capable of executing applications for the user and the virtual machine is used to provide a virtual desktop for the individual user.
- the user who owns the virtual desktop can remotely log into his or her virtual desktop using a client device that establishes a network connection (e.g., Wide Area Network connection) with the host server and remotely execute various applications on the virtual machine as if the desktop was running on the user's local client device.
- the client device can be any computing device capable of establishing a network connection, including but not limited to personal computers (PCs), laptops, mobile phones, tablet computers, wearable devices (e.g., smart watches, electronic smart glasses, etc.) or the like.
- GUI graphical user interface
- the framebuffer pixel data on the server is encoded using a codec, such as H264, and transmitted over an Internet connection to the client, where the data is decoded and rendered on a local display screen to the user.
- any user input information such as keyboard and mouse events, is transmitted from the client device to the server over the network connection, where it may in turn cause various updates to the GUI of the remote desktop. In this manner, the user is able to view the GUI of the remote desktop and interact with it as if the desktop was actually running on the local client device, even though the desktop is actually executing remotely.
- FIG. 1 illustrates an example of a virtual desktop environment, in accordance with various embodiments.
- the virtual desktop environment such as VDI or DAAS environment, includes host servers ( 102 - 1 , 102 - 2 , 102 -N) that are communicatively coupled with a number of client devices ( 120 - 1 , 120 - 2 , 120 -N) via a network 106 .
- Network 106 may be a wide area network (WAN), or other form of remote communication link between the host servers ( 102 - 1 , 102 - 2 , 102 -N) and client devices ( 120 - 1 , 120 - 2 , 120 -N).
- WAN wide area network
- Network 106 may further include numerous other components, such as one or more firewalls, connection brokers, management servers, etc., which are not shown here so as not to obscure salient features of the remote desktop environment.
- Host servers ( 102 - 1 , 102 - 2 , 102 -N) may physically reside in a data center 101 of the enterprise (e.g., in case of VDI) or in a data center of a third-party service provider (e.g., in case of DAAS).
- host server 102 - 1 can interoperate with client devices ( 120 - 1 , 120 - 2 , 120 -N) to provide virtual desktop services to users of client devices ( 120 - 1 , 120 - 2 , 120 -N).
- host server 102 - 1 can host, for each user, a desktop that is presented by a guest operating system (such as one of the guest operating systems 105 - 1 , 105 - 2 , 105 -N) running on a virtual machine (such as one of the virtual machines 110 - 1 , 110 - 2 , 110 -N) on host server 102 - 1 .
- a guest operating system such as one of the guest operating systems 105 - 1 , 105 - 2 , 105 -N
- a virtual machine such as one of the virtual machines 110 - 1 , 110 - 2 , 110 -N
- client devices e.g., 120 - 1 , 120 - 2 , 120 -N
- client devices can interact with the desktops hosted on host server 102 - 1 as if the desktops were executing locally on client devices ( 120 - 1 , 120 - 2 , 120 -N).
- host server 102 - 1 includes virtualization software 104 that supports the execution of one or more virtual machines (VMs) (e.g., 110 - 1 , 110 - 2 , 110 -N).
- the virtualization software 104 may be a hypervisor, a virtual machine manager (VMM) or other software that allows multiple virtual machines to share the physical resources of the server.
- each virtual machine e.g., 110 - 1 , 110 - 2 , 110 -N
- can execute a guest operating system e.g., 105 - 1 , 105 - 2 , 105 -N
- hosts a desktop for a single user at a time e.g., a guest operating system
- VDI virtual desktop infrastructure
- DAS Desktop-as-a-Service
- each client device can execute a virtual desktop client (e.g., 122 - 1 , 122 - 2 , 122 -N).
- a virtual desktop client e.g., 122 - 1 , 122 - 2 , 122 -N
- the virtual desktop client can be a stand-alone, designated client application (“native client”), or a web browser (“web client”).
- client application e.g., 122 - 1 , 122 - 2 , 122 -N
- web client e.g., a standard web browser may be modified with a plugin to operate as a web client.
- the interaction between the virtual desktop and the client device can be facilitated by such a virtual desktop client (e.g., 122 - 1 , 122 - 2 , 122 -N) running in the OS (e.g., 121 - 1 , 121 - 2 , 121 -N) on the client device (e.g., 120 - 1 , 120 - 2 , 120 -N) which communicates with a server-side virtual desktop agent (e.g., 103 - 1 , 103 - 2 , 103 -N) that is running on the guest OS inside the virtual machine (e.g., 110 - 1 , 110 - 2 , 110 -N).
- a virtual desktop client e.g., 122 - 1 , 122 - 2 , 122 -N
- the OS e.g., 121 - 1 , 121 - 2 , 121 -N
- a server-side virtual desktop agent e.g.,
- the interaction can be performed by the virtual desktop agent transmitting encoded visual display information (e.g., framebuffer data) over the network to the virtual desktop client and the virtual desktop client in turn transmitting user input events (e.g., keyboard, mouse events) to the remote desktop agent.
- encoded visual display information e.g., framebuffer data
- user input events e.g., keyboard, mouse events
- the data of a virtual desktop is stored on the host server (e.g., 102 - 1 , 102 - 2 , 102 -N) (e.g., in a virtual disk) where it is accessed locally by the VM (e.g., 110 - 1 , 110 - 2 , 110 -N) during execution.
- the host server e.g., 102 - 1 , 102 - 2 , 102 -N
- the VM e.g., 110 - 1 , 110 - 2 , 110 -N
- virtual desktops can utilize a feature referred to herein as client drive redirection (CDR), which enables the virtual desktop to access files and folders located on the client device (e.g., 120 - 1 , 120 - 2 , 120 -N) from within the virtual desktop session.
- CDR client drive redirection
- applications running in the VM e.g., 110 - 1 , 110 - 2 , 110 -N
- can access files, folders and drives located on the remote client e.g., 120 - 1 , 120 - 2 , 120 -N).
- a user can allow applications running in the virtual desktop on the host server (e.g., 102 - 1 , 102 - 2 , 102 -N) to access documents and data that are stored on the user's client device (e.g., 120 - 1 , 120 - 2 , 120 -N).
- the host server e.g., 102 - 1 , 102 - 2 , 102 -N
- client device e.g., 120 - 1 , 120 - 2 , 120 -N.
- the user can copy data from the client device (e.g., 120 - 1 , 120 - 2 , 120 -N) to a location (e.g., directory) physically located on the host server (e.g., 102 - 1 , 102 - 2 , 102 -N), or the user can copy data from the virtual desktop on the host server (e.g., 102 - 1 , 102 - 2 , 102 -N) to the client device (e.g., 120 - 1 , 120 - 2 , 120 -N).
- a location e.g., directory
- the user can copy data from the virtual desktop on the host server (e.g., 102 - 1 , 102 - 2 , 102 -N) to the client device (e.g., 120 - 1 , 120 - 2 , 120 -N).
- data located on the client device can be presented in virtual drives in the VM (e.g., 110 - 1 , 110 - 2 , 110 -N).
- VM e.g., 110 - 1 , 110 - 2 , 110 -N
- directories, files, or drives located on the client device e.g., 120 - 1 , 120 - 2 , 120 -N
- an input/output (I/O) request is produced on the virtual desktop (e.g., by an application in the virtual desktop) to a shared directory located on the client device (e.g., 120 - 1 , 120 - 2 , 120 -N)
- a CDR component running in the virtual desktop can forward the I/O request to the client device (e.g., 120 - 1 , 120 - 2 , 120 -N) over the network.
- the directory may first need to be enumerated.
- the process of directory enumeration on a shared client directory can require a significant number of sequential requests and responses that are sent back and forth between the virtual desktop and the client device (e.g., 120 - 1 , 120 - 2 , 120 -N) over the network.
- the client device e.g., 120 - 1 , 120 - 2 , 120 -N
- the system may need to verify if a directory exists, then it may need to obtain metadata information such as the time stamp for the folder and its size, and this may need to be performed for each contained file and subdirectory.
- the system may further need to identify each entry in the directory, which may require a separate request and response.
- the system e.g., the application making the directory access
- this process can consume a long time and have detrimental effects on performance.
- FIG. 2 illustrates an example architecture of a system for efficient directory listing in client drive redirection on virtual desktops, in accordance with various embodiments.
- a virtual desktop 202 is connected to a client device 204 over a network during a virtual desktop session.
- Several applications 208 can run on an operating system 230 in the virtual desktop 202 .
- the client device 204 can contain a file system 206 , which can be an NTFS/FAT22 file system for example, and the server can also contain a file system 210 , which can also be an NTFS/FAT22 file system for example.
- the virtual desktop 202 and the applications 208 can access the file system 210 locally in the virtual desktop.
- the client file system 206 or portions of it can also be made available for access to the virtual desktop 202 and the applications 208 via CDR.
- a virtual drive 226 can be presented in the virtual desktop 202 that provides access on the virtual desktop 202 to certain directories, volumes, folders, files, etc. that are on a shared client drive 224 physically located in the client device file system 206 .
- the shared client drive 224 may be configured (e.g., by an administrator or by the user) to share certain directories, folders, etc., and those portions can be presented in the virtual drive 226 for access by the virtual desktop 202 .
- the system can allow the user to designate a directory (e.g., the shared client drive 224 ) of the client computing device 204 to be a “shared directory.”
- the shared directory can then be visible from within the remote desktop session such that the user can see the names of subdirectories and files in the shared directory (e.g., in the virtual drive 226 ) even though the content of the files is stored on the client computing device 204 in the shared client drive 224 .
- the virtual desktop 202 (or an application 208 in the desktop 202 ) can access the shared client drive 224 by producing input/output (I/O) requests targeting the virtual drive 226 .
- I/O input/output
- an application 208 can produce a read or write request to a file in the virtual drive 226 , which can then be redirected to the shared drive 224 , as will be described in more detail below.
- read or write requests to the virtual drive 226 made on the virtual desktop 202 can be routed to the shared client drive 224 by a redirection driver 212 .
- the driver 212 can for example be an RDPDR (Remote Desktop Device Redirector Driver) driver.
- I/O requests to the virtual drive 226 can be forwarded to or intercepted by the redirection driver 212 , conveyed to a CDR server 214 from the redirection driver 212 , and conveyed to a CDR client 218 running on the client device 204 .
- the CDR client 218 can perform the requests on the shared client drive 224 and generate corresponding responses.
- the responses to the I/O requests can then be conveyed by the CDR client 218 back to the CDR server 214 , which can forward the I/O responses to the redirection driver 212 , which can complete the I/O request (e.g., information can be forwarded to a requesting application 208 , to the OS, etc. by the redirection driver 212 ).
- client drive redirection enables the user to share local folders to the remote desktop 202 .
- the shared folder/drive on client side is redirected to the remote desktop 202 , and the user can access the folder/drive in the remote desktop 202 like a mounted network drive.
- the system can first enumerate the requested subdirectory to create an ordered list of the subdirectory and its contents for the file system.
- the directory enumeration may be necessary to perform such request.
- various information about the subdirectory in the shared drive 224 can be obtained to create the ordered listing of contents. Such information can include names of all files in the subdirectory, names of folder in the subdirectory, various metadata, etc.
- directory enumeration information can be information describing the structure, content, file lists, and various other aspects of the directory and its contained files and subdirectories.
- Directory enumeration information can comprise the metadata of the directory, metadata of contained files, and metadata of contained subdirectories.
- the information can include directory entries and data such as creation time, last access time, file size, file attributes, etc.
- the redirection driver (e.g., an RDPDR driver) handled the IRPs and formatted each IRP so it could be forwarded to a CDR server (e.g., a VMware Horizon® CDR server, available from VMware, Inc.).
- the CDR server then forwarded the I/O requests to the client side via the network.
- the CDR client e.g., a VMware Horizon® CDR client, available from VMware, Inc.
- the CDR server then forwarded the response to the redirection driver, which conveyed it to the operating system to complete the I/O request.
- RDPDR redirection driver
- file system could produce an I/O request sequences as follows (a real-world scenario may include more requests):
- the I/O sequence for directory enumeration may vary.
- the I/O sequences for the listing phase can be very complex and consume a long time when employing CDR.
- the I/O pattern for the listing phase may be as follows:
- Listing file1 IRP_MJ_CREATE (open testF) IRP_MJ_QUERY_INFORMATION (FileBasicInformation) (query info of testF) IRP_MJ_QUERY_INFORMATION (FileStandardInformation) (query info of testF) IRP_MJ_DIRECTORY_CONTROL (IRP_MN_QUERY_DIRECTORY) (query info of file1) IRP_MJ_CLOSE Listing file2: IRP_MJ_CREATE (open testF) IRP_MJ_QUERY_INFORMATION (FileBasicInformation) (query info of testF) IRP_MJ_QUERY_INFORMATION (FileStandardInformation) (query info of testF) IRP_MJ_DIRECTORY_CONTROL (IRP_MN_QUERY_DIRECTORY) (query info of file2) IRP_MJ_CLOSE ...
- merged I/O requests and response can be utilized to improve the performance of directory enumeration in CDR, as will be described in further detail below.
- the process can begin when a request is produced on the virtual desktop 202 to enumerate a directory in the shared drive 224 .
- the OS 230 of the virtual desktop can initiate a sequence of I/O requests to obtain directory listing information as described above, which requests can be redirected by the redirection driver 212 to the CDR Server 214 .
- the CDR server 214 can determine and generate multiple I/O requests that are expected to be received from the OS 230 later during the listing process.
- the CDR server 214 can then produce a merged I/O request merging and embedding the multiple expected requests (e.g., in a single packet request).
- the merged I/O requests can request information about each file contained in the directory being enumerated or the merged I/O requests can request different classes of information (different types of metadata) about the directory being enumerated.
- the CDR server can obtain various information about the directory being enumerated for generating the merged I/O request.
- the directory can be queried to obtain all contained files and folders and this information can be used by the CDR server to generate the I/O requests that it embeds into the merged I/O request.
- an I/O request can be produced requesting to list or enumerate all the files contained in the folder that is being enumerated.
- a request such as IRP_MN_QUERY_DIRECTORY with the parameter: * requesting to enumerate all files in the directory can be produced by the OS 230 and conveyed to the CDR Client 218 via the redirection driver 212 and CDR Server 214 .
- the CDR Client 218 can query the client file system 206 and return a list providing information identifying all files contained in the folder.
- the CDR Server 214 can receive the list and save it in a file order list.
- the CDR Server 214 can then use this file order list to produce the expected I/O requests and merge the expected I/O requests to produce the merged I/O request.
- the CDR server can produce the merged I/O request by appending expected I/O requests to an I/O request that the CDR server receives from the redirection driver. For example, when the CDR server receives a query directory I/O request from the redirection driver for metadata of a particular file in the folder, it can append expected query directory I/O requests for metadata of other files in the folder to produce a merged I/O request and forward the merged query directory I/O request to the CDR client.
- the CDR server when the CDR server receives a query information I/O request from the redirection driver for a particular class of information about the folder, it can append expected query information I/O requests for different classes of information about the folder to produce a merged query information I/O request and forward the merged I/O request to the CDR client.
- the CDR client 218 can parse the merged I/O request and perform each I/O request contained in the merged request to produce corresponding I/O responses.
- the CDR client 218 can then produce a merged I/O response by merging the I/O responses (e.g., in a single packet response).
- the merged I/O response can be conveyed back to the CDR server 214 by the CDR client 218 and the information can be stored in cache memory 216 on the virtual desktop 202 so that it can be subsequently used to complete further listing operations.
- the cache can be a per-thread file information cache 230 .
- the data in the cache 216 can then be used to complete further listing operations that occur in the listing phase and originate from the same thread context.
- the OS 230 can produce the expected I/O requests that were included in the merged I/O request(s) by the CDR server.
- Each expected I/O request can be redirected by the redirection driver 212 to the CDR Server 214 and the CDR server 214 can retrieve the previously cached I/O response to the expected I/O request from the cache memory 216 and convey it to the redirection driver 212 , which can in turn convey it to the OS 230 to complete the request.
- FIG. 3 is a sequence diagram illustrating an example of I/O requests and I/O responses transmitted during directory listing, in accordance with various embodiments.
- an example folder “Folder1” containing N files, “file1” through “fileN”, is being enumerated.
- the redirection driver, CDR server, and CDR client in the example of FIG. 3 may be the redirection driver 212 , CDR server 214 , and CDR client 218 of the example of FIG. 2 .
- the illustrated I/O requests conveyed by the redirection driver to the CDR server can be normal requests generated by the virtual desktop OS (e.g., OS 230 ) as it works on enumerating Folder1, which requests can be formatted and redirected by the redirection driver 212 to the CDR Server 214 per the CDR framework.
- the illustrated I/O responses conveyed to the redirection driver 212 by the CDR server 214 can be subsequently forwarded by the redirection driver to the operating system 230 of the virtual desktop to produce the directory listing.
- an I/O request (QUERY_DIRECTORY (enumerate all files in Folder1)) requesting to list or enumerate all the files contained in Folder1 can be redirected by the redirection driver to the CDR server.
- the request may be generated by the virtual desktop OS and be redirected by the redirection driver to the CDR server.
- the CDR server can convey the request to the CDR client to be executed on the client device. For example, this can be a request such as IRP_MN_QUERY_DIRECTORY with parameter: *, requesting to enumerate all files in the directory.
- the CDR Client can query the client device and retrieve the requested information including a file order list of files in Folder1, which can identify files in Folder1.
- the CDR Client can then convey the information back to the CDR Server.
- the CDR Server can save the file order list and use it to determine and generate certain expected I/O requests, as will be described further below.
- the CDR server can then convey the file order list to the redirection driver, which can further convey it to the OS of the virtual desktop to use in performing the directory listing.
- the redirection driver can convey an I/O request (CREATE (open Folder1)) to the CDR Server to open Folder1.
- the CDR server can convey the I/O request to the CDR client, which can execute the request and send a corresponding I/O response back to the CDR server, which can then forward the response to the redirection driver.
- the redirection driver can send a query information I/O request (QUERY_INFO (query StandardInfo of Folder1)) to the CDR server for standard information about Folder1.
- query information I/O requests e.g., IRP_MJ_QUERY_INFORMATION requests
- IRP_MJ_QUERY_INFORMATION requests can be requests for enumeration information of a particular file or subdirectory, such as requests for metadata about a particular file or a particular directory.
- this can be a request such as IRP_MJ_QUERY_INFORMATION (query StandardInfo of Folder1), requesting standard information of Folder1.
- the “standard information” may be metadata information such as the number of bytes allocated to Folder1.
- the redirection driver can forward the I/O request to the CDR server and the CDR server can produce a merged query information request by appending additional query information I/O requests to the received query information I/O request before forwarding it to the CDR client.
- the appended additional query information I/O requests can be requests that are expected to be received later from the redirection driver, such as requests to query Folder1 for more classes of information.
- the CDR server can append a query information I/O request for basic information about Folder1.
- the “basic information” may be metadata information such as the creation time of Folder1. Accordingly, both I/O requests, the standard (e.g., per the RDP protocol) I/O request for standard information and the appended I/O request for the basic information, can be conveyed by the CDR server to the CDR client in the single merged message (e.g., in a single packet).
- the merged query information request containing the standard (e.g., per the protocol) I/O request for standard information (QUERY_INFO (query StandardInfo of Folder1)) and the appended I/O request for the basic information (QUERY_INFO (query BasicInfo of Folder1)) can be conveyed to the CDR client.
- the CDR client can separate and parse the merged I/O request and execute each constituent I/O request to produce corresponding I/O responses, one I/O response containing the standard information of Folder1 (QUERY_INFO (Folder1, data of StandardInfo)) and the other I/O response containing the basic information of Folder1 (QUERY_INFO (Folder1, data of BasicInfo)).
- the CDR client can then produce a merged I/O response containing both I/O responses and convey the merged response to the CDR server.
- the merged I/O response can include a standard (per protocol) I/O response for the standard I/O request (i.e., the QUERY_INFO (query StandardInfo of Folder1) request) to which the responses to the appended requests (e.g., the QUERY_INFO (Folder 1, data of BasicInfo) response) can be appended.
- a standard (per protocol) I/O response for the standard I/O request i.e., the QUERY_INFO (query StandardInfo of Folder1) request
- the responses to the appended requests e.g., the QUERY_INFO (Folder 1, data of BasicInfo) response
- the CDR server can receive the merged response, separate the contained I/O responses, and convey the standard I/O response for the Folder1 standard information (QUERY_INFO (Folder1, data of StandardInfo)) to the redirection driver.
- the CDR server can store the appended I/O response for the Folder1 basic information (QUERY_INFO (Folder 1, data of BasicInfo)) in cache memory (e.g., directory cache 216 ) so it can be used to respond to later queries that may be received from the redirection driver.
- cache memory e.g., directory cache 216
- the cache can have a very short timeout value (e.g., if it is intended to be consumed only for I/O requests of a subsequently accessed file). Once the timeout time expires, the cache can be erased.
- the redirection driver can send a query information I/O request (QUERY_INFO (query BasicInfo of Folder1)) to the CDR server for basic information about Folder1.
- QUERY_INFO query information of Folder1
- the CDR server would at this point send the I/O request to the CDR client and receive a corresponding I/O response, thereby incurring another cross-network trip.
- the CDR server can now retrieve the I/O response for the Folder1 basic information (QUERY_INFO (Folder 1, data of BasicInfo)) from the directory cache and return it to the redirection driver in response.
- the redirection driver can send a query directory I/O request (QUERY_DIRECTORY (enumerate file1)) to the CDR server for metadata information (enumeration information) of file1 in Folder1.
- query directory I/O requests e.g., IRP_MJ_DIRECTORY_CONTROL requests
- IRP_MJ_DIRECTORY_CONTROL requests can be requests for enumeration information of subitems in a directory, such as metadata of subitems in a directory (e.g., metadata of a contained file or subdirectory).
- this can be a request such as IRP_MJ_QUERY_DIRECTORY (enumerate file1), requesting enumeration or metadata information of file1 in Folder1.
- the redirection driver can forward the query directory I/O request (which can be a standard request per the RDP protocol) to the CDR server and the CDR server can produce a merged query directory request by appending additional query directory I/O requests (for other files in the folder) to the forwarded query directory I/O request for file1.
- the CDR server can determine/identify files in Folder1 for which the additional query directory I/O requests should be produced based on the file order list that it stored previously. As illustrated, in this case the CDR server can append a query directory I/O request for each subsequent file after file1 in the folder (i.e., files file2 through fileN).
- a query directory I/O request for enumeration information of file2 (QUERY_DIRECTORY (enumerate file2)) and other contained files in Folder1 through fileN (QUERY_DIRECTORY (enumerate fileN)) can be generated by the CDR server, and all the query directory I/O requests can be appended to the initial standard query directory I/O request for file1 metadata (e.g., into one packet) so they can be conveyed to the CDR client together in the merged I/O request, as illustrated.
- the CDR client can receive the merged query directory I/O request, parse it, and execute each of the constituent query directory I/O requests for metadata of files file1 through fileN to retrieve the requested data and produce corresponding I/O responses.
- a query directory I/O response for each query directory I/O request in the merged I/O request can be produced.
- a query directory I/O response for file1 containing metadata/enumeration information of file1 QUERY_DIRECTORY (directory entry info for file1)
- QUERY_DIRECTORY directory entry info for file1
- QUERY_DIRECTORY directory entry info for file1-fileN
- the merged query directory I/O response can include a standard (per protocol) I/O response for the standard I/O request (i.e., the QUERY_INFO (QUERY_DIRECTORY (enumerate file1)) request) to which the responses to the appended requests for file2 through fileN can be appended.
- a standard I/O response for the standard I/O request i.e., the QUERY_INFO (QUERY_DIRECTORY (enumerate file1)) request
- the CDR server can receive the merged response, read or decode the merged I/O response and extract individual I/O responses.
- the CDR server can then convey the standard query directory I/O response for file1 (QUERY_DIRECTORY (directory entry info for file1)) to the redirection driver in response to the query directory I/O request for file1 (QUERY_DIRECTORY (enumerate file1)).
- the CDR server can store the other query directory I/O responses (for files file2 through fileN) in the cache memory so they can be used to respond to later queries that may be received from the redirection driver.
- the redirection driver can convey an I/O request to the CDR Server to close Folder1 (CLOSE (close Folder1)), as illustrated.
- CLOSE close Folder1
- the CDR server can convey the I/O request to the CDR client, which can execute the request and send a corresponding I/O response back to the CDR server, which can then forward the response to the redirection driver.
- the system has enumerated file1 (which was performed in steps from time T2 to T6) and can move forward to enumerating file2 (which will be performed in steps from time T7 to T11).
- the redirection driver can convey an I/O request (CREATE (open Folder1)) to the CDR server to open Folder1.
- the CDR server can convey the I/O request to the CDR client, which can execute the request and send a corresponding I/O response back to the CDR server, which can then forward the response to the redirection driver.
- the redirection driver can send a query information I/O request to the CDR server for standard information about Folder1. Because the response to this I/O request was fetched and cached previously, the CDR server can retrieve the I/O response for the Folder1 standard information (QUERY_INFO (Folder 1, data of StandardBasicInfo)) from the directory cache and return it to the redirection driver in response, as illustrated.
- QUERY_INFO Fuller 1, data of StandardBasicInfo
- the redirection driver can send a query information I/O request to the CDR server for basic information about Folder1. Because the response to this I/O request was fetched and cached previously, the CDR server can retrieve the I/O response for the Folder1 basic information (QUERY_INFO (Folder 1, data of BasicInfo)) from the directory cache and return it to the redirection driver in response, as illustrated.
- QUERY_INFO Fuller 1, data of BasicInfo
- the redirection driver can send a query directory I/O request (QUERY_DIRECTORY (enumerate file2)) to the CDR server for metadata information (enumeration information) of file2 in Folder1.
- QUERY_DIRECTORY encode file2
- metadata information encode information
- the CDR server would at this point forward the I/O request to the CDR client and receive a corresponding I/O response.
- the CDR server can now retrieve the query directory I/O response containing the directory entry info for file2 (QUERY_DIRECTORY (directory entry info for file2)) from the directory cache and return it to the redirection driver in response.
- the redirection driver can convey an I/O request to the CDR Server to close Folder1 (CLOSE (close Folder1)), as illustrated.
- CLOSE close Folder1
- the CDR Server can convey the I/O request to the CDR client, which can execute the request and send a corresponding I/O response back to the CDR server, which can then forward the response to the redirection driver.
- the system has enumerated file2 (which was performed in steps from time T7 to T11). Because the query directory and query information I/O responses were prefetched and made available in cache, the number of cross network trips (between the CDR server and CDR client) was drastically reduced. The process can continue in a similar way to enumerated the remaining files in Folder1 (file3 through fileN), where the query directory I/O request for the files in the folder can be fulfilled from cache as described above instead of making cross-network trips. Similarly, the query information I/O requests can be fulfilled from cache. As a result, the directory listing phase can be completely significantly more efficiently than with previous technologies.
- FIG. 4 A is a diagram illustrating an example of a merged I/O request packet format, in accordance with various embodiments.
- This example may correspond to a merged query directory I/O request, such as the merged query directory I/O request generated and conveyed by the CDR server to the CDR client in the example of FIG. 3 .
- a merged query directory I/O request such as the merged query directory I/O request generated and conveyed by the CDR server to the CDR client in the example of FIG. 3 .
- the redirection driver can convey a standard (e.g., per the RDP protocol) query directory I/O request for metadata of file1 (QUERY_DIRECTORY (enumerate file1)) to the CDR server, which can generate additional query directory I/O requests for metadata of other files in the folder (e.g., file2-fileN) and append those requests (QUERY_DIRECTORY (enumerate file2) . . . QUERY_DIRECTORY (enumerate fileN)) to the standard query directory I/O request (QUERY_DIRECTORY (enumerate file1)) that it received from the redirection driver.
- the CDR server can then pass the merged query directory I/O request to the CDR client.
- the example of FIG. 4 A illustrates an example packet format of such a merged query directory I/O request.
- the first portion 418 of the merged I/O request packet can represent the standard (e.g., following the RDP protocol) query directory I/O request for metadata of file1 (QUERY_DIRECTORY (enumerate file1)) conveyed by the redirection driver.
- these portions can represent the IRP_MJ_DIRECTORY_CONTROL (minor type is IRP_MN_QUERY_DIRECTORY) request defined by the RDP protocol.
- the standard request can contain a “DeviceIoRequest” field 400 , a “FsInformationClass” field 402 , an “InitialQuery” field 404 , a Path Length field 406 , as well as padding 408 , and a path field 410 .
- the merged I/O request can further include an extension portion containing a merged I/O request buffer 412 .
- This added buffer 412 can contain appended query directory I/O requests that were generated by the CDR server for querying and pre-fetching data for files other than the file in the received standard query directory I/O request.
- this portion can contain query directory I/O requests for files file2-fileN (file1 metadata is queried in the initial standard portion 418 of the merged I/O request).
- the CDR server receives the standard query directory I/O request for metadata of file1, it can determine other files present (e.g., file2-fileN) in the directory based on the previously received file order list and generate query directory I/O requests for metadata of those files.
- the CDR server can then encode or embed the generated query directory I/O requests into the merged I/O request buffer 412 and append the buffer 412 to the received standard query directory I/O request for file1 portion 418 to produce the merged query directory I/O request.
- the merged I/O request buffer 412 can follow a self-defined protocol and be encoded with serialization library as a buffer.
- the merged I/O can be an extension to the original I/O packet following the RDP protocol definition, and it can be delivered and handled with the original RDPDR I/O request packet.
- the CDR client When the CDR client receives the merged query directory I/O request on the client side, it can first separate the merged I/O packet into the standard portion 418 and the appended I/O extension portion 412 .
- the standard portion 418 can be executed, e.g., metadata for the requested file in the subdirectory (file1 in Folder1) can be retrieved and a corresponding query directory I/O response can be produced (QUERY_DIRECTORY (directory entry info for file1)).
- the CDR client can parse (or decode) the merged I/O request buffer portion 412 and execute corresponding I/O operation defined in the merged I/O extension 412 (e.g., query directory I/O requests for file2 through fileN). For example, when the I/O operations in the extension 412 are executed, the CDR client can execute each constituent query directory I/O request in the extension buffer 412 to retrieve metadata of other files (file2-fileN) in the directory and the CDR client can produce corresponding query directory I/O responses.
- I/O operation defined in the merged I/O extension 412 e.g., query directory I/O requests for file2 through fileN.
- the CDR client can execute each constituent query directory I/O request in the extension buffer 412 to retrieve metadata of other files (file2-fileN) in the directory and the CDR client can produce corresponding query directory I/O responses.
- FIG. 4 B is a diagram illustrating an example of a merged I/O response packet format, in accordance with various embodiments.
- This example may correspond to a merged query directory I/O response, which the CDR client can produce in response to the merged I/O request illustrated in FIG. 4 A .
- the merged I/O response can contain a standard I/O response portion 428 (e.g., which can likewise follow the standard RDP protocol) that, for example, can contain a “DeviceIoReply” field 420 , a length field 422 , and a buffer field 424 .
- This standard portion 428 can be the standard query directory I/O response to the standard query directory I/O request (e.g., the QUERY_DIRECTORY (enumerate file1) request) per the RDP protocol and include metadata of file1, for example.
- the CDR client can generate this portion 428 after it executes the standard query directory I/O request.
- the example merged I/O response further contains a merged I/O data buffer 426 .
- the CDR client executes the merged I/O request buffer 412 of the merged I/O request, it can retrieve corresponding information (metadata for file2 through fileN) and produce corresponding I/O responses to the appended I/O requests in the buffer 412 .
- the CDR client can embed or encode these responses into the merged I/O data buffer 426 and append the data buffer 426 to the standard response 428 portion to produce the merged I/O response.
- the CDR server When the CDR server receives the merged I/O response from the CDR client, it can separate the standard portion of the response 428 and convey it to the redirection driver in response to the previous query directory I/O request for file1 enumeration information as a standard (e.g., per protocol) query directory I/O response (e.g., QUERY_DIRECTORY (directory entry info for file1) in the example of FIG. 3 ). The CDR server can then parse or decode the merged I/O data buffer 426 to extract the embedded query directory I/O responses for the other files (e.g., file2 to fileN) and store these I/O responses in the cache so that future query directory I/O requests for this information can be quickly completed using this information from the cache.
- a standard (e.g., per protocol) query directory I/O response e.g., QUERY_DIRECTORY (directory entry info for file1) in the example of FIG. 3 ).
- the CDR server can then pars
- the CDR server can receive a standard query information I/O request for a class of information (e.g., standard information of a folder or file).
- the CDR server can generate additional query information I/O requests for additional information classes (e.g., basic information, attribute information, etc.), embed those requests into a buffer and attach the buffer to the packet containing the received standard query information I/O request, to produce the merged query information I/O request.
- additional information classes e.g., basic information, attribute information, etc.
- the CDR client can embed query information I/O responses into a buffer and attach the buffer to a standard query information I/O response.
- a merged I/O request does not necessarily need to be produced by appending additional requests to an I/O request received from the redirection driver (which redirects the I/O request from the virtual desktop OS).
- the merged I/O request can be produced in other ways, for example, by embedding multiple I/O request in a merged I/O request and sending it independently to the client device (to the CDR client) without appending it to an existing or pending I/O request received from the redirection driver or the OS.
- the client can then likewise respond with a merged I/O response containing responses to the I/O requests contained in the merged I/O request.
- FIG. 5 illustrates an example process flow for efficient directory listing in client drive redirection on virtual desktops, in accordance with various embodiments.
- the process can begin in operation 502 , where a request can be received in the virtual desktop to enumerate a directory in a shared client drive.
- the shared client drive may be physically located on the client device and be redirected from the client device to the virtual desktop via CDR, as described above.
- the request to enumerate the directory in the virtual desktop can result from a user input, such as an input to copy a folder from the shared drive to the virtual desktop.
- the virtual desktop OS can initiate a sequence of I/O requests for obtaining enumeration information. For example, in response to the instruction to enumerate the directory, the virtual desktop OS can begin making I/O requests to the shared client drive to obtain enumeration information for enumerating the directory.
- the I/O requests can be formatted and redirected by a redirection driver to a CDR server, which can send the requests to a CDR client on the client device.
- the CDR client can be configured to produce responses to the I/O requests and convey the responses back to the CDR server, which can forward them to the redirection driver, which can finally convey them to the OS (the I/O responses can be reformatted as necessary for the OS).
- a merged I/O request can be produced (e.g., by the CDR server) comprising expected I/O requests.
- I/O requests that are expected to be produced by the OS (and then forwarded by the redirection driver) can be determined (e.g., some expected requests such as query directory requests can be determined based on a file order list) and embedded into a merged I/O request in a single packet.
- the merged I/O request can combine query directory I/O requests for metadata of different files contained in the enumerated directory, query information requests for different types of metadata of the enumerated directory itself, and other types of requests.
- the merged requests can be produced by appending additional requests to a received I/O request from the OS via the redirection driver.
- the merged I/O request can be conveyed to the client device.
- the merged I/O request can be conveyed to the CDR client on the client device.
- the client device can then parse the merged request to extract the individual I/O requests and execute each constituent request to generate corresponding I/O responses.
- the client device can then merge the responses to produce a merged I/O response, which can be in a single packet.
- the virtual desktop can receive (e.g., vis CDR server) from the client device the merged I/O response comprising I/O responses to the expected I/O requests.
- the virtual desktop can parse the merged I/O response to separate the contained I/O response and in operation 512 , the received I/O responses can be cached in cache memory on the virtual desktop.
- the merged I/O response contains a response to a pending I/O request from the OS to which the expected I/O requests were appended, then the corresponding I/O response for the pending I/O request can be forwarded to the redirection driver, which can then forward it to the OS.
- an I/O request for enumeration information can be received from the OS on the virtual desktop (e.g., the I/O request may be produced by the OS and redirected by the redirection driver to the CDR server).
- the process can proceed to operation 516 , where a decision is made on whether a response to the received I/O request is available in the cache.
- the CDR server can check whether the response is available in the cache (e.g., whether the information has been pre-fetched).
- the process can proceed to operation 520 , where the corresponding I/O response can be retrieved from the cache and forwarded to the OS (via the redirection driver, and formatted as necessary) to be used in the directory enumeration.
- the process can then return to operation 514 , where a subsequent I/O request is received from the OS.
- the process can proceed to operation 518 , where the I/O request can be forwarded to the client device, a corresponding I/O response can be received from the client device, and the I/O response can be forwarded to the virtual desktop OS (via the redirection driver, and formatted as necessary) to be used in the directory enumeration.
- the process can then return to operation 514 , where a subsequent I/O request is received from the OS. The process can continue in this fashion until the directory is fully enumerated.
- FIG. 6 illustrates an example of some general components of a computing device, in accordance with various embodiments.
- the device includes one or more processors (e.g., central processing units (CPUs) 602 for executing instructions that can be stored in a storage medium component.
- the storage medium can include many types of memory, persistent data storage, or non-transitory computer-readable storage media.
- the storage medium may take the form of random access memory (RAM) 601 storing program instructions for execution by the processor(s) 602 , a persistent storage (e.g., disk or SSD) 600 , a removable memory for sharing information with other devices and/or the like.
- RAM random access memory
- a persistent storage e.g., disk or SSD
- removable memory for sharing information with other devices and/or the like.
- the computing device typically can further comprise a display component 603 , such as a monitor, a touch screen, liquid crystal display (LCD), or the like.
- the computing device will include at least one input device 605 able to receive conventional input from a user.
- This conventional input can include, for example, a push button, touch pad, touch screen, wheel, joystick, keyboard, mouse, keypad, or any other such device or element whereby a user can input a command to the device.
- the computing device can include a network interface component (NIC) 604 for communicating over various networks, such as a Wi-Fi, Bluetooth, RF, wired, or wireless communication systems.
- the device in many embodiments can communicate over a network, such as the Internet, and may be able to communicate with other devices connected to the same or other network.
- Various embodiments described herein can be implemented in a wide variety of environments, which in some cases can include one or more user computers, computing devices, or processing devices which can be used to operate any of a number of applications.
- User or client devices can include any of a number of general purpose personal computers, such as desktop or laptop computers running a standard operating system, as well as cellular, wireless, and handheld devices running mobile software and capable of supporting a number of networking and messaging protocols.
- Such a system also can include a number of workstations running any of a variety of commercially-available operating systems and other known applications for purposes such as development and database management.
- These devices also can include other electronic devices, such as dummy terminals, thin-clients, gaming systems, and other devices capable of communicating via a network.
- the network can be, for example, a local area network, a wide-area network, a virtual private network, the Internet, an intranet, an extranet, a public switched telephone network, an infrared network, a wireless network, and any combination thereof.
- the various environments in which the embodiments can be implemented may include a variety of data stores and other memory and storage media, as discussed above. These can reside in a variety of locations, such as on a storage medium local to one or more of the computers or remote from any or all of the computers across the network. In some embodiments, the information may reside in a storage-area network (“SAN”) familiar to those skilled in the art. Similarly, any necessary files for performing the functions attributed to the computers, servers, or other network devices may be stored locally and/or remotely, as appropriate.
- SAN storage-area network
- each such device can include hardware elements that may be electrically coupled via a bus, the elements including, for example, at least one central processing unit (CPU), at least one input device (e.g., a mouse, keyboard, controller, touch screen, or keypad), and at least one output device (e.g., a display device, printer, or speaker).
- CPU central processing unit
- input device e.g., a mouse, keyboard, controller, touch screen, or keypad
- at least one output device e.g., a display device, printer, or speaker
- Such a system may also include one or more storage devices, such as disk drives, optical storage devices, and solid-state storage devices such as random access memory (“RAM”) or read-only memory (“ROM”), as well as removable media devices, memory cards, flash cards, etc.
- ROM read-only memory
- Such devices can include a computer-readable storage media reader, a communications device (e.g., a modem, a network card (wireless or wired), an infrared communication device, etc.), and working memory as described above.
- the computer-readable storage media reader can be connected with, or configured to receive, a computer-readable storage medium, representing remote, local, fixed, and/or removable storage devices as well as storage media for temporarily and/or more permanently containing, storing, transmitting, and retrieving computer-readable information.
- the system and various devices also typically will include a number of software applications, modules, services, or other elements located within at least one working memory device, including an operating system and application programs, such as a client application or Web browser. It should be appreciated that alternate embodiments may have numerous variations from that described above. For example, customized hardware might also be used and/or particular elements might be implemented in hardware, software (including portable software, such as applets), or both. Further, connection to other computing devices such as network input/output devices may be employed.
- Storage media and computer readable media for containing code, or portions of code can include any appropriate media known or used in the art, including storage media and communication media, such as but not limited to volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage and/or transmission of information such as computer readable instructions, data structures, program modules, or other data, including RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by a system device.
- RAM random access memory
- ROM read only memory
- EEPROM electrically erasable programmable read-only memory
- flash memory electrically erasable programmable read-only memory
- CD-ROM compact disc read-only memory
- DVD digital versatile disk
- magnetic cassettes magnetic tape
- magnetic disk storage magnetic disk storage devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
IRP_MJ_CREATE |
IRP_MJ_QUERY_INFORMATION (FileBasicInformation) |
IRP_MJ_QUERY_INFORMATION (FileStandardInformation) |
IRP_MJ_QUERY_INFORMATION (FileAttributeInformation) |
... ... |
IRP_MJ_QUERY_VOLUME_INFOMATION |
IRP_MJ_READ (offset 0) |
... .. |
IRP_MJ_READ (end of file) |
IRP_MJ_CLOSE |
Listing file1: |
IRP_MJ_CREATE (open testF) |
IRP_MJ_QUERY_INFORMATION (FileBasicInformation) (query info of testF) |
IRP_MJ_QUERY_INFORMATION (FileStandardInformation) (query info of testF) |
IRP_MJ_DIRECTORY_CONTROL (IRP_MN_QUERY_DIRECTORY) (query info of file1) |
IRP_MJ_CLOSE |
Listing file2: |
IRP_MJ_CREATE (open testF) |
IRP_MJ_QUERY_INFORMATION (FileBasicInformation) (query info of testF) |
IRP_MJ_QUERY_INFORMATION (FileStandardInformation) (query info of testF) |
IRP_MJ_DIRECTORY_CONTROL (IRP_MN_QUERY_DIRECTORY) (query info of file2) |
IRP_MJ_CLOSE |
... ... |
Listing fileN: |
IRP_MJ_CREATE (open testF) |
IRP_MJ_QUERY_INFORMATION (FileBasicInformation) (query info of testF) |
IRP_MJ_QUERY_INFORMATION (FileStandardInformation) (query info of testF) |
IRP_MJ_DIRECTORY_CONTROL(IRP_MN_QUERY_DIRECTORY) (query info fileN) |
IRP_MJ_CLOSE |
As can be seen in this example, several duplicated or related I/O requests are conveyed. Further, because the I/O handling is serialized (i.e., the system waits for a response to a request before proceeding to the next one), the network bandwidth is not efficiently utilized. The performance can be particularly poor on slow networks due to the numerous I/O round trips, many of which are duplicated and similar.
Claims (20)
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2023071014 | 2023-01-06 | ||
WOPCT/CN2023/071014 | 2023-01-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
US20240232106A1 US20240232106A1 (en) | 2024-07-11 |
US12287744B2 true US12287744B2 (en) | 2025-04-29 |
Family
ID=91761478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US18/309,385 Active 2043-10-30 US12287744B2 (en) | 2023-01-06 | 2023-04-28 | Merged input/output for accelerating directory listing phase in client drive redirection |
Country Status (1)
Country | Link |
---|---|
US (1) | US12287744B2 (en) |
Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110202714A1 (en) | 2010-02-17 | 2011-08-18 | Lloyd Leon Burch | Techniques for dynamic disk personalization |
US20110251992A1 (en) | 2004-12-02 | 2011-10-13 | Desktopsites Inc. | System and method for launching a resource in a network |
US8131825B2 (en) | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US20120324365A1 (en) | 2011-03-03 | 2012-12-20 | Citrix Systems, Inc. | Reverse Seamless Integration Between Local and Remote Computing Environments |
US20160299697A1 (en) * | 2015-04-08 | 2016-10-13 | Prophetstor Data Services, Inc. | Workload-aware i/o scheduler in software-defined hybrid storage system |
US20160342519A1 (en) | 2015-05-21 | 2016-11-24 | Dell Products L.P. | File-based client side cache |
US20160352750A1 (en) | 2015-05-28 | 2016-12-01 | Eyal Dotan | Scalable application-as-a-service environment and systems and methods useful in conjunction therewith |
US20170220777A1 (en) | 2016-02-02 | 2017-08-03 | Vmware, Inc. | Consistent snapshots and clones in an asymmetric virtual distributed file system |
US20170235950A1 (en) | 2016-02-12 | 2017-08-17 | Nutanix, Inc. | Self-healing virtualized file server |
US20180113676A1 (en) | 2016-10-20 | 2018-04-26 | Cortical.Io Gmbh | Methods and Systems for Identifying a Level of Similarity Between a Plurality of Data Representations |
US20180123795A1 (en) | 2015-05-07 | 2018-05-03 | Appbus, Inc. | Secure Container Platform for Resource Access and Placement on Unmanaged and Unsecured Devices |
US10200499B1 (en) * | 2015-01-30 | 2019-02-05 | Symantec Corporation | Systems and methods for reducing network traffic by using delta transfers |
US20190132381A1 (en) | 2012-03-02 | 2019-05-02 | Citrix Systems, Inc. | Reverse Seamless Integration Between Local and Remote Computing Environments |
US20200204589A1 (en) | 2017-09-22 | 2020-06-25 | Acronis International Gmbh | Systems and methods for preventive ransomware detection using file honeypots |
US20210019070A1 (en) | 2019-07-18 | 2021-01-21 | Pure Storage, Inc. | Virtual storage system architecture |
US20210173588A1 (en) * | 2010-09-15 | 2021-06-10 | Pure Storage, Inc. | Optimizing storage device access based on latency |
US20220019385A1 (en) | 2019-07-18 | 2022-01-20 | Pure Storage, Inc. | Creating a virtual storage system |
US20220030062A1 (en) | 2020-07-23 | 2022-01-27 | Pure Storage, Inc. | Replication handling among distinct networks |
US20220100582A1 (en) | 2020-09-25 | 2022-03-31 | Intel Corporation | Disaggregated computing for distributed confidential computing environment |
US20220156303A1 (en) | 2020-11-19 | 2022-05-19 | Cortical.Io Ag | Methods and systems for reuse of data item fingerprints in generation of semantic maps |
US20220229922A1 (en) * | 2021-01-18 | 2022-07-21 | Vmware, Inc. | Optimized directory enumeration and data copy for client drive redirection in virtual desktops |
-
2023
- 2023-04-28 US US18/309,385 patent/US12287744B2/en active Active
Patent Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110251992A1 (en) | 2004-12-02 | 2011-10-13 | Desktopsites Inc. | System and method for launching a resource in a network |
US8131825B2 (en) | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US20110202714A1 (en) | 2010-02-17 | 2011-08-18 | Lloyd Leon Burch | Techniques for dynamic disk personalization |
US20210173588A1 (en) * | 2010-09-15 | 2021-06-10 | Pure Storage, Inc. | Optimizing storage device access based on latency |
US20120324365A1 (en) | 2011-03-03 | 2012-12-20 | Citrix Systems, Inc. | Reverse Seamless Integration Between Local and Remote Computing Environments |
US20190132381A1 (en) | 2012-03-02 | 2019-05-02 | Citrix Systems, Inc. | Reverse Seamless Integration Between Local and Remote Computing Environments |
US10200499B1 (en) * | 2015-01-30 | 2019-02-05 | Symantec Corporation | Systems and methods for reducing network traffic by using delta transfers |
US20160299697A1 (en) * | 2015-04-08 | 2016-10-13 | Prophetstor Data Services, Inc. | Workload-aware i/o scheduler in software-defined hybrid storage system |
US20180123795A1 (en) | 2015-05-07 | 2018-05-03 | Appbus, Inc. | Secure Container Platform for Resource Access and Placement on Unmanaged and Unsecured Devices |
US20160342519A1 (en) | 2015-05-21 | 2016-11-24 | Dell Products L.P. | File-based client side cache |
US20160352750A1 (en) | 2015-05-28 | 2016-12-01 | Eyal Dotan | Scalable application-as-a-service environment and systems and methods useful in conjunction therewith |
US20170220777A1 (en) | 2016-02-02 | 2017-08-03 | Vmware, Inc. | Consistent snapshots and clones in an asymmetric virtual distributed file system |
US20170235950A1 (en) | 2016-02-12 | 2017-08-17 | Nutanix, Inc. | Self-healing virtualized file server |
US20180113676A1 (en) | 2016-10-20 | 2018-04-26 | Cortical.Io Gmbh | Methods and Systems for Identifying a Level of Similarity Between a Plurality of Data Representations |
US20200204589A1 (en) | 2017-09-22 | 2020-06-25 | Acronis International Gmbh | Systems and methods for preventive ransomware detection using file honeypots |
US20210019070A1 (en) | 2019-07-18 | 2021-01-21 | Pure Storage, Inc. | Virtual storage system architecture |
US20220019385A1 (en) | 2019-07-18 | 2022-01-20 | Pure Storage, Inc. | Creating a virtual storage system |
US20220030062A1 (en) | 2020-07-23 | 2022-01-27 | Pure Storage, Inc. | Replication handling among distinct networks |
US20220100582A1 (en) | 2020-09-25 | 2022-03-31 | Intel Corporation | Disaggregated computing for distributed confidential computing environment |
US20220156303A1 (en) | 2020-11-19 | 2022-05-19 | Cortical.Io Ag | Methods and systems for reuse of data item fingerprints in generation of semantic maps |
US20220229922A1 (en) * | 2021-01-18 | 2022-07-21 | Vmware, Inc. | Optimized directory enumeration and data copy for client drive redirection in virtual desktops |
Non-Patent Citations (1)
Title |
---|
"IFileOperation interface (shobjidl_core.h)"; Published Dec. 5, 2018; https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ifileoperation; Retrieved Feb. 24, 2021. |
Also Published As
Publication number | Publication date |
---|---|
US20240232106A1 (en) | 2024-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8924592B2 (en) | Synchronization of server-side cookies with client-side cookies | |
US11099865B2 (en) | Auditing clipboard operations in virtual desktop environments | |
US10963287B2 (en) | Reducing request latency in a multi-tenant web service host | |
US11042338B2 (en) | Font processing during printer redirection in virtual desktop environments | |
US20090287772A1 (en) | Systems and methods for remoting multimedia plugin calls | |
US9479564B2 (en) | Browsing session metric creation | |
US11017013B2 (en) | Image cache collaboration between clients in remote desktop environments | |
US20170116009A1 (en) | Provisioning virtual desktops with stub virtual disks | |
US10936352B2 (en) | High performance application delivery to VDI desktops using attachable application containers | |
US10402364B1 (en) | Read-ahead mechanism for a redirected bulk endpoint of a USB device | |
US11755765B2 (en) | Optimized directory enumeration and data copy for client drive redirection in virtual desktops | |
CN108055298A (en) | Method and device for controlling message queue | |
KR20140036229A (en) | Techniques for adapting an interpretive run time application to multiple clients | |
US10791103B2 (en) | Adapting remote display protocols to remote applications | |
Zhang et al. | Separating computation and storage with storage virtualization | |
US10263830B2 (en) | Optimized data transfer for redirected UASP devices | |
US20080270480A1 (en) | Method and system of deleting files from a remote server | |
US12287744B2 (en) | Merged input/output for accelerating directory listing phase in client drive redirection | |
US10430371B1 (en) | Accelerating redirected USB devices that perform bulk transfers | |
US12282792B2 (en) | File copy and paste between local and remote system in virtual desktops via clipboard redirection | |
US12190089B2 (en) | Application installation on a remote desktop using local installation files | |
US20240403100A1 (en) | Unifying and connecting multiple virtual desktops | |
US11934314B2 (en) | Method to improve copy performance of client drive redirection with per-thread merged input/output | |
US20250021358A1 (en) | Unifying and connecting multiple virtual desktops in a client window | |
US11188463B2 (en) | Reduced downtime for a virtual machine content-based read cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: VMWARE INC, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:BAI, WU;ZHAO, HAIWEI;HUANG, WEIGANG;AND OTHERS;SIGNING DATES FROM 20230412 TO 20230418;REEL/FRAME:063482/0464 |
|
FEPP | Fee payment procedure |
Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
AS | Assignment |
Owner name: VMWARE LLC, CALIFORNIA Free format text: CHANGE OF NAME;ASSIGNOR:VMWARE, INC.;REEL/FRAME:067239/0402 Effective date: 20231121 |
|
AS | Assignment |
Owner name: UBS AG, STAMFORD BRANCH, CONNECTICUT Free format text: SECURITY INTEREST;ASSIGNOR:OMNISSA, LLC;REEL/FRAME:068118/0004 Effective date: 20240701 |
|
AS | Assignment |
Owner name: OMNISSA, LLC, CALIFORNIA Free format text: PATENT ASSIGNMENT;ASSIGNOR:VMWARE LLC;REEL/FRAME:068327/0365 Effective date: 20240630 |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS |