The present disclosure relates to storage systems, and more particularly, to collecting information regarding workloads executed by storage systems.
A storage server is a processing system that is used to store and retrieve data on behalf of one or more computing systems (also referred to as “hosts” or host computing systems) in a network. The storage server operates on behalf of computer systems to store and manage data in a set of mass storage devices, e.g., magnetic or optical storage-based disks, solid state devices, or tapes. Some storage servers are designed to service file-level requests from hosts, as is commonly the case with file servers used in network attached storage (NAS) environments. Other storage servers are designed to service block-level requests from hosts, as with storage controllers used in a storage area network (SAN) environment. Still other storage servers are capable of servicing both file-level requests and block-level requests.
In order to evaluate and improve storage server (or storage system) performance, it is helpful to collect data regarding workloads that are handled by the storage server. The term workload as used herein means processing of input/output (I/O) requests for reading and writing information from and to storage devices. Continuous efforts are being made to efficiently collect workload information.
Various systems, methods, and machine-readable media are disclosed herein for real-time activity tracing in a storage environment. For example, in one aspect, a machine implemented method includes: opening a network socket for listening to a connection request from a computing device; accepting the connection request from the computing device over the network socket; enabling selective data collection based on a network connection with the computing device over the network socket, where the network connection based selective data collection includes obtaining information regarding a plurality of input/output (I/O) requests and responses and performance information of a storage server for processing the I/O requests; sub-sampling the network connection based collected data; and sending at least a portion of the network connection based collected data over the network socket connection to the computing device.
According to another aspect, a non-transitory, machine-readable storage medium having stored thereon instructions for performing a method is disclosed, wherein the instructions comprise machine executable code which when executed by at least one machine, causes the machine to: open a network socket for listening to a connection request from a computing device; accept the connection request from the computing device over the network socket; enable selective data collection based on a network connection with the computing device over the network socket, where the network connection based selective data collection includes obtaining information regarding a plurality of input/output (I/O) requests and responses and performance information of a storage server for processing the I/O requests; sub-sample the network connection based collected data; and send at least a portion of the network connection based collected data over the network socket connection to the computing device.
In yet another aspect, a system is disclosed that includes: a memory containing machine readable medium comprising machine executable code having stored thereon instructions; and a processor module coupled to the memory, the processor module configured to execute the machine executable code to: open a network socket for listening to a connection request from a computing device; accept the connection request from the computing device over the network socket; enable selective data collection based on a network connection with the computing device over the network socket, where the network connection based selective data collection includes obtaining information regarding a plurality of input/output (I/O) requests and responses and performance information of a storage server for processing the I/O requests; sub-sample the network connection based collected data; and send at least a portion of the network connection based collected data over the network socket connection to the computing device.
This brief summary has been provided so that the nature of this disclosure may be understood quickly. A more complete understanding of the disclosure can be obtained by reference to the following detailed description of the various aspects thereof in connection with the attached drawings.
The foregoing features and other features will now be described with reference to the drawings of the various aspects. In the drawings, the same components have the same reference numerals. The illustrated aspects are intended to illustrate, but not to limit the present disclosure. The drawings include the following Figures:
As a preliminary note, the terms “component”, “module”, “system,” and the like as used in this disclosure are intended to refer to a computer-related entity, either programmable instructions-executing general purpose processor, hardware, firmware and a combination thereof. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer.
By way of illustration, both an application running on a server and the server can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers. Also, these components can execute from various computer readable media having various data structures stored thereon. The components may communicate via local and/or remote processes such as in accordance with a signal having one or more data packets (e.g., data from one component interacting with another component in a local system, distributed system, and/or across a network such as the Internet with other systems via the signal).
Computer executable components can be stored, for example, on non-transitory, computer readable media including, but not limited to, an ASIC (application specific integrated circuit), CD (compact disc), DVD (digital video disk), ROM (read only memory), floppy disk, hard disk, EEPROM (electrically erasable programmable read only memory), memory stick, flash memory device or any other non-volatile memory device, or any other storage device, in accordance with the claimed subject matter.
It is desirable that active storage servers be disrupted as little as possible so that most resources are dedicated to the storage server's primary tasks of storing and retrieving information. It is also very useful to track and analyze real-time or near real-time workload data of storage servers (or systems). As such, a workload capture mechanism that minimizes storage server-side setup and overhead and is flexible enough to support agile real-time analytics and tuning is disclosed herein.
Systems and methods are provided for a storage server (may also be referred to as a storage controller) to efficiently capture workload data for a management console or other client for analysis. In some aspects, data that needs to be collected is sub-sampled which reduces the impact of data collection on computing resources, such as network communications. Various other aspects help provide high integrity data tracking while limiting the resource burden on storage server resources. In general, it is desirable to have an “always on” workload capture capability while trying to reduce consumption of an active storage server's resources—including storage space, buffer cache, and input/output (I/O) bandwidth, as described below in detail.
Aspects of the disclosure herein can also be applied to consolidate workload data in multiple storage server environments. In general, systems and methods are provided that capture I/O workload data and pass it to a management console or other interested client device over a network connection, where that network connection preferably avoids interfering with standard I/O operations handled by a storage server.
System 100:
As illustrated in the example of
Although illustrated as distributed systems, in some aspects the storage server 108 and the mass storage subsystem 105 can be physically contained and/or otherwise located in the same enclosure. For example, the storage server 108 and the mass storage subsystem 105 can together be one of the E-series storage system products available from NetApp®, Inc., the assignee of the present application. The E-series storage system products can include one or more embedded controllers (or storage servers) and disks. Furthermore, the storage system can, in some aspects, include a redundant pair of controllers that can be located within the same physical enclosure with the disks. In another aspect, the storage server 108 can be, for example, one of the FAS-series of storage server products available from NetApp®, Inc.
The storage server 108 may also be connected to other storage systems and/or to disks within or outside of the enclosure via a serial attached SCSI (SAS)/Fibre Channel (FC) protocol. Other protocols for communication are also possible including combinations and/or variations thereof.
The client computing systems 104 may be connected to the storage server 108 via the network 106, which can be a packet-switched network, for example, a local area network (LAN) or a wide area network (WAN), a storage area network (SAN), a converged network, combinations of the same, or the like. The various aspects of the present disclosure are not limited to any particular network type.
Further, the storage server 108 can be connected to the storage devices 112 via a switching fabric (not illustrated), which can be a fiber distributed data interface (FDDI) network, for example. It is noted that, within the network data storage environment, any other suitable number of storage servers and/or mass storage devices, and/or any other suitable network technologies, may be employed.
The storage server 108 can make some or all of the storage space on the storage devices 112 available to the client systems 104 in a conventional manner. For example, each of the storage devices 112 can be implemented as an individual disk, multiple disks (e.g., a Redundant Array of Independent (or Inexpensive) Disks (RAID) group) or any other suitable mass storage device(s) including combinations and/or variations thereof. Storage of information in the mass storage subsystem 105 can be implemented as one or more storage volumes that comprise a collection of physical storage devices 112 cooperating to define an overall logical arrangement of volume block number (VBN) space on the volume(s). Each logical volume is generally, although not necessarily, associated with its own file system either in the client for a SAN device or in the storage server 108 for a NAS device.
The storage devices within a logical volume/file system are typically organized as one or more groups, wherein each group may be operated as a RAID. Most RAID implementations, e.g., a RAID-6 level implementation, enhance the reliability/integrity of data storage through the redundant writing of data “stripes” across a given number of physical disks in the RAID group, and the appropriate storing of data protection information with respect to the striped data.
The storage server 108 can receive and respond to read and write requests (i.e. I/O requests) from applications 103 executed by the client systems 104, directed to data stored in or to be stored in the storage subsystem 105. Applications 103 may be an email application, a database application, a management application and any other application type.
Although the storage server 108 is illustrated as a single unit in
The storage server 108 can be configured to implement one or more virtual storage servers. Virtual storage servers allow the sharing of the underlying physical storage controller resources, (e.g., processors and memory, between virtual storage servers while allowing each virtual storage server to run its own operating system) thereby providing functional isolation. With this configuration, multiple server operating systems that previously ran on individual servers, (e.g., to avoid interference) are able to run on the same physical server because of the functional isolation provided by a virtual storage server implementation. This can be a cost effective way of providing storage server solutions to multiple customers than providing separate physical servers for each customer.
As illustrated in the example of
Further, in one aspect, storage server 108 includes a data collection module 107 that is configured to collect information regarding incoming I/O requests and other workload data. In one aspect, the data collection module 107 interfaces with the management application 111 and provides collected data for analysis, as described herein.
Storage Controller:
The interconnect 260 is an abstraction that represents any one or more separate physical buses, point-to-point connections, or both, connected by appropriate bridges, adapters, or controllers. The interconnect 260, therefore, may include, for example, a system bus, a form of Peripheral Component Interconnect Express(PCIe) bus, a HyperTransport or industry standard architecture (ISA) bus, a small computer system interface (SCSI) bus, a universal serial bus (USB), TIC (12C) bus, or an Institute of Electrical and Electronics Engineers (IEEE) standard 1394 bus, also called “Firewire,” FibreChannel, Thunderbolt, and/or any other suitable form of physical connection including combinations and/or variations thereof.
The memory 220 illustratively comprises storage locations that are addressable by the processor(s) 210 and adapters 240 and 250 for storing software program code and data associated with the technology introduced here. For example, some of the storage locations of memory 220 can be used to store a storage operating system (may also be referred to as controller firmware) 222 that preferably implements a high-level module, called a storage manager, to logically organize data as a hierarchical structure of named volumes, directories, files, and/or data “blocks” on the storage devices 112. A block can be a sequence of bytes of specified length.
Additionally, the memory may include a data collection module 224 (similar to data collection module 107,
In one aspect, the collected data includes I/O statistics data—i.e., for example, the number of read and write requests, the number of I/O operations serviced from a cache, or other statistics relating to the handling of I/O operations by the storage server. In one aspect, the collected data includes I/O trace data—i.e., for example, a list of I/O commands including source and target data or other metadata related to the commands, such as a sequence identifier. I/O trace data generally will not include data payloads of the I/O commands. I/O trace data may also be referred to as I/O messaging data herein.
In one aspect, memory collected data 226 is collected regardless of the net-enabled collected data, whereas net-enabled collected data 223 is collected when a client has established a network connection, as described below. Net-enabled collected data 223 may be stored at a memory buffer before being sent over a network connection as described herein.
In one aspect, the data collection module 224 may store I/O messaging data as net-enabled collected data 223 and in-memory collected data 226 utilizing double buffering or other multi-buffering techniques. It is also noteworthy that in one aspect, the data collection module 224 may only manage one data collection, such as in-memory collected data 226, but still use the data for different functions as described herein for the net-enabled collected data 223 and in-memory collected data 226, for example.
In one aspect, some or all of the storage operating system 222, data collection module 224, connection module 225, and the collected datas 223, 224 may be stored in long term storage either resident on the storage controller 200 (not shown) or in, for example, the connected mass storage subsystem 105. Portions—or all—of these modules and data can then be loaded into memory 220 for operation by the processor(s) 210, for example.
The storage operating system 222, portions of which are typically resident in memory and executed by the processing elements, functionally organizes the storage server 108 by (among other functions) invoking storage operations in support of the storage service provided by the storage server 108. It will be apparent to those skilled in the art that other processing and memory implementations, including various other non-transitory media, e.g., computer readable media, may be used for storing and executing program instructions pertaining to the technology introduced here. In one aspect, the storage operating system 222 can be distributed, with modules of the storage system running on separate physical resources.
The network adapter 240 may include multiple ports to couple the storage server 108 with one or more clients 104, one or more management consoles 110, or other storage servers, over point-to-point links, wide area networks, virtual private networks implemented over a public network (e.g., the Internet) or a shared local area network. One of the ports may be used to communicate with management console 110 for sending data collected by data collection module 224 (in one aspect, net-enable collected data 223).
The network adapter 240 includes mechanical components as well as the electrical and signaling circuitry needed to connect the storage server 108 to the network 106. Illustratively, the network 106 can be embodied as an Ethernet network, a Fibre Channel network or any other network type. Each client 104 can communicate with the storage server 108 over the network 106 by exchanging packets or frames of data according to pre-defined protocols, e.g., Transmission Control Protocol/Internet Protocol (TCP/IP). It is noteworthy that clients 104 may be coupled to the storage server 108 directly without having to go through a network adapter or network 106. The various aspects described herein are not limited to a network or a direct connection.
The storage adapter 250 cooperates with the storage operating system 222 to access information requested by clients 104. The information may be stored on any type of attached array of writable storage media, e.g., magnetic disk or tape, optical disk (e.g., CD-ROM or DVD), flash memory, SSD, HDD, SSHD, RAM, micro-electro mechanical and/or any other similar media adapted to store information, including data and data protection information. However, as illustratively described herein, the information is stored on storage devices 112. The storage adapter 250 includes multiple ports having I/O interface circuitry that couples with the disks over an I/O interconnect arrangement, e.g., a conventional high-performance, Fibre Channel link topology or Serial Attached SCSI (SAS) topology.
The storage operating system 222 facilitates clients' access to data stored on the storage devices 112. In certain aspects, the storage operating system 222 implements a write-anywhere file system that cooperates with one or more virtualization modules to “virtualize” the storage space provided by storage devices 112. In certain aspects, a storage manager element (for example, 410,
As set forth generally above, the storage server 108 can capture I/O trace information and provide it to a management console 110, management application 111, or a client 104 by connecting through a network connection. In one aspect, the connection module 225 executed by or interfacing with the storage server 108 manages these connections. A connection hierarchy 262 that may carry out the connection and data transfer tasks, in one aspect, is illustrated in
Connection module 225 works uses a connection socket 230 to establish a communications link through network adapter 240 port. Connection socket 230, in one aspect, is characterized by the storage server 108′s IP (Internet Protocol or any other address type) address and a port number of the network adapter 240 port and listens for connection requests from, for example a client 104 or the management console 110. In one aspect, the connection socket 230 uses a dedicated management network port for sending collected data. In general, the connection socket will follow a specific transport protocol, such as, for example the TCP/IP protocol. However, it will be understood that other protocols may also be utilized in carrying out the teachings described herein.
When a request for a connection comes in through the network adapter 240, the connection socket 230 accepts the request. In some aspects, the connection manager 225 may start a new connection socket 230 so that it can continue to listen for additional connection requests. The use of connection socket 230 and the hierarchy of
Data Collection Process: In
At block B304, the data collection module 224 begins collecting (or logging) I/O activity data in memory 220 as in-memory collected data 226. In one aspect, the I/O activity data may comprise I/O trace data, including, in one aspect, data identifying a sequence of I/O operations issued to the controller 200 (or storage server 108) and the responses for the I/O operations.
At block B306, trace and I/O statistics are written for a storage volume, when volume collection is enabled. Statistics may include, in one aspect, performance data, such as, for example, IOPS (number of input/output operations that are processed per second), CPU utilization, cache statistics, and the like. Other relevant statistics that can be derived from the I/O activity may also be stored and/or reported in various aspects. In one aspect, the I/O statistics data may be obtained from the storage operating system 222.
Volume collection is an optional feature, which when enabled is used to store I/O trace data and statistics for a storage volumes instead of sending them out on a network connection. This feature may be enabled via the management application. In one aspect, when volume collection is enabled, two additional volumes are created within persistent storage subsystem 105—one for I/O trace data and one for statistics data. This data may be buffered in memory, such as in-memory collected data 226 before transfer to the persistent storage subsystem via a storage connection or it may be transferred more immediately in various aspects. In-memory collected data 226, in one aspect, is overwritten to limit the amount of storage and resources that are required. In one aspect, the in-memory data is over-written after a threshold amount of data has been collected.
At block B308, the connection module 225 opens a network connection socket 230 to allow “net enable” collection. The network connection socket 230 “listens” for a connection request, such as from a management console 110. As an example, the network connection socket 230 is a logical entity that is maintained by connection module 225 to detect connection requests from an offload entity (for example, client system 104 and/or management console 110). The network connection socket 230 structure may be defined by a transport protocol that is used by the network adapter 240 to communicate via network 106, for example, the TCP protocol.
At block B310, the network connection socket 230 accepts a connection request from the offload entity, to connect to the storage server 108 via the network 106. A dedicated socket for the requested connection is opened, for example, a TCP socket. In one aspect, a client system 104; the management console 110 or any other attached computer system may connect via network 106 or any other means. Once the connection is established, the connection module 225 can begin sending captured I/O trace data across the socket connection (as described below with respect to block B314).
In one aspect, collected data is stored at one or more memory buffers at memory 220. The connection module 225 may overrun the buffers and the data collection module 107 may drop information if the collected data is not processed immediately i.e. the socket is not drained efficiently. To mitigate this problem, in block B312, the collected I/O trace data can be sub-sampled when enabled. Sub-sampling means that only a certain subset of I/O operations and responses are maintained as I/O trace data at memory buffers, while others are ignored or dropped during processing.
In one aspect, the I/O trace data can be sub-sampled by masking a sequence identifier (ID) value for I/O operations. Each I/O operation includes or is assigned a sequence ID that allows the storage server 108 to associate a response to an original I/O request. As an example, in one aspect, a sequence ID may also be associated with I/O operations for packet ordering when transmissions across a network may not ensure that I/O packets arrive together or are in a proper order. In this way, both requests and replies for I/O operations are captured (or dropped) which helps to ensure more usable I/O trace data. Masking the sequence ID is also useful in that the requests and replies can both be captured without a look-up operation being needed. That reduces processing burdens on the data collection module 224 and thus the storage server 108 as a whole. In various aspects, the subsampling can reduce data trace size by 2^n. It has been found that subsampling with a sequence masking in this manner can still preserve sequence patterns at least when n<=3. As such, in one aspect, subsample tracing can be reduced as much as 8 times, while still preserving I/O sequence patterns and providing high quality trace data for the management console's evaluation.
At block B314, the connection module 225 begins sending the captured I/O traffic-synchronously. With a network connection established, the data collection module 224 may save the trace data as “net-enabled” collected data 223, which may be the data sent by the connection module 225. In one aspect, this may be a net flush operation which empties existing I/O trace data and statistics data in an active buffer and then sends the data via the network. This data may be sent periodically within a defined time interval (for example, every 2 minutes), allowing some build-up of the net-enabled collected data 223 in memory 220. In other aspects, the collected data 223 is streamed to the client or management console with limited or no delay. The management console 110 or other connected device can then save the I/O trace data and use it to test the storage server 108 performance, determine efficiencies and how the system might be better configured, for example. In one aspect, statistics data may also be flushed across the network connection.
In one aspect, the client can store the trace/statistics data 223 in a system readable file that can be exchanged via standard methods to other systems for archival purposes. This allows the trace data to be used as needed for replay as well as analysis. The client can also analyze the data in real time in an environment that is more suited for processing.
In one aspect, at block B316, the connection module 225 closes the connection socket on which the I/O trace data is being transmitted. This may be based on a “close” command from the client, a “net disable” command from a system administrator, or the like. In one aspect, the socket 230 may remain open or be reopened to listen for other connections.
At block B318, the data collection module 224 collects in-memory data 226 (also referred to as in-memory logging), while waiting for a new network connection.
This data collection process produces a number of advantages for storage systems. It allows real-time capture of I/O trace data and near real time testing of storage system settings using real world, production data with little to no impact on an in-production storage server 108. As described, the process uses I/O trace data rather than full I/O commands with payloads to reduce processing and network traffic, yet push computationally intensive tasks off the storage server to the management console or other interested client system. System managers can use real production I/O workload data to more accurately plan for storage server capacities, troubleshooting, and quality of service evaluations.
Storage Operating System:
The storage operating system 222 can be implemented as programmable circuitry programmed with software and/or firmware, or as specially designed non-programmable circuitry (i.e., hardware), or in a combination and/or variation thereof. In the illustrated aspect, the storage operating system 222 includes several modules, or layers. These layers include a storage manager (or file system manager) 410, which is a functional element of the storage operating system 222. The storage manager 410 imposes a structure (e.g., one or more file systems) on the data managed by the storage server 108 and services read and write requests from clients 104. In one aspect, the data collection module 224 interacts with the storage manager 410 layer of the storage operating system 222 to see I/O request and response traffic.
To allow the storage server to communicate over the network 106 (e.g., with clients 104), the storage operating system 222 can also include a multi-protocol layer 420 and a network access layer 430, logically under the storage manager 410. The multi-protocol layer 420 implements various higher-level network protocols, e.g., Network File System (NFS), Common Internet File System (CIFS), Hypertext Transfer Protocol (HTTP), Fibre Channel, InfiniBand, Serial Attached Small Computer System Interface (SAS) and/or Internet small computer system interface (iSCSI), to make data stored on the storage devices 112 available to users and/or application programs. The network access layer 430 includes one or more network drivers that implement one or more lower-level protocols to communicate over the network, e.g., Ethernet, Internet Protocol (IP), TCP/IP, Fibre Channel Protocol and/or User Datagram Protocol/Internet Protocol (UDP/IP).
Also, to allow the device to communicate with a storage subsystem (e.g., storage subsystem 105 of
Also shown in
In one aspect, the data collection module 224 “listens” to the read and write operation path 415 to gather trace data for the I/O operations and responses. This trace data can then be passed through multi-protocol 420 and network access 430 as net-enabled collected data 223. In another aspect, the data collection module 224 makes a copy of the I/O requests and responses and may then send them in bulk through multi-protocol 420 and network access 430 to send them over a network socket connection to a tracking client or management console as described herein.
Computer System 500:
In one aspect, memory 504 illustratively comprises storage locations that are addressable by the processor 502 and network adapter 512 for storing software program code (instructions 506) and data. For example, instructions 506 may comprise an application 103 of a client system 104 or a management application 111 of a management console 110. In one aspect, the at least one I/O devise comprises a display, a keyboard, a mouse, speakers, or the like for accepting input from or presenting output to a user, such as a network administrator. As such, most computer systems 500 are likely to have multiple I/O devices 508.
As described with reference to the storage server and persistent storage subsystem, the mass storage 510 may be any of a variety of volatile or non-volatile memory devices, such as HDDs, SSDs, or the like for storing data. Additionally the network adapter 512 enables communications across a network, such as starting and ending socket connections with the storage server 108 for tracing I/O data as described herein.
The processes described herein are organized as sequences of operations in the flowcharts. However, it should be understood that at least some of the operations associated with these processes potentially can be reordered, supplemented, or substituted for, while still performing the same overall technique.
The technology introduced above can be implemented by programmable circuitry programmed or configured by software and/or firmware, or they can be implemented entirely by special-purpose “hardwired” circuitry, or in a combination of such forms. Such special-purpose circuitry (if any) can be in the form of, for example, one or more application-specific integrated circuits (ASICs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), etc.
Software or firmware for implementing the technology introduced here may be stored on a machine-readable storage medium and may be executed by one or more general-purpose or special-purpose programmable microprocessors. A “machine-readable medium”, as the term is used herein, includes any mechanism that can store information in a form accessible by a machine (a machine may be, for example, a computer, network device, cellular phone, personal digital assistant (PDA), manufacturing tool, any device with one or more processors, etc.). For example, a machine-accessible medium includes recordable/non-recordable media (e.g., read-only memory (ROM); random access memory (RAM); magnetic disk storage media; optical storage media; flash memory devices; etc.), etc. The term “logic”, as used herein, can include, for example, special-purpose hardwired circuitry, software and/or firmware in conjunction with programmable circuitry, or a combination thereof.
While the present disclosure is described above with respect to what is currently considered its preferred aspects, it is to be understood that the disclosure is not limited to that described above. To the contrary, the disclosure is intended to cover various modifications and equivalent arrangements within the spirit and scope of the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
7953878 | Trimble | May 2011 | B1 |
8040811 | Edwards | Oct 2011 | B2 |
8914480 | Jones et al. | Dec 2014 | B1 |
20030212801 | Yang-Huffman | Nov 2003 | A1 |
20050076341 | Bauman et al. | Apr 2005 | A1 |
20050210096 | Bishop et al. | Sep 2005 | A1 |
20060173854 | Ottaviani et al. | Aug 2006 | A1 |
20070050591 | Boyd et al. | Mar 2007 | A1 |
20110270966 | Zhou | Nov 2011 | A1 |
20130091266 | Bhave | Apr 2013 | A1 |
20130326033 | Gomez | Dec 2013 | A1 |
Entry |
---|
PCT International Searching Authority, Notification of Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, or the Declaration, Application No. PCT/US2016/0023639 mailed Jun. 10, 2016, 9 pages. |
Hewlett Packard. Unix Command Equivalents Reference Card. 2003. [retrieved on May 18, 2016] Retrieved from the internet: URL:http://h20565.www2.h pe.com/h psc/doc/public/display? docId=emr—na-c04623358, 6 pages. |
Number | Date | Country | |
---|---|---|---|
20160283340 A1 | Sep 2016 | US |