ホーム › Storage.Nvme › MEASURED_LATENCY
MEASURED_LATENCY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Trim3 | WORD | 2 | +0 | +0 | バケット3のTrim操作で計測されたレイテンシ値。 |
| Write3 | WORD | 2 | +2 | +2 | バケット3の書き込み操作で計測されたレイテンシ値。 |
| Read3 | WORD | 2 | +4 | +4 | バケット3の読み取り操作で計測されたレイテンシ値。 |
| Trim2 | WORD | 2 | +6 | +6 | バケット2のTrim操作で計測されたレイテンシ値。 |
| Write2 | WORD | 2 | +8 | +8 | バケット2の書き込み操作で計測されたレイテンシ値。 |
| Read2 | WORD | 2 | +10 | +10 | バケット2の読み取り操作で計測されたレイテンシ値。 |
| Trim1 | WORD | 2 | +12 | +12 | バケット1のTrim操作で計測されたレイテンシ値。 |
| Write1 | WORD | 2 | +14 | +14 | バケット1の書き込み操作で計測されたレイテンシ値。 |
| Read1 | WORD | 2 | +16 | +16 | バケット1の読み取り操作で計測されたレイテンシ値。 |
| Trim0 | WORD | 2 | +18 | +18 | バケット0のTrim操作で計測されたレイテンシ値。 |
| Write0 | WORD | 2 | +20 | +20 | バケット0の書き込み操作で計測されたレイテンシ値。 |
| Read0 | WORD | 2 | +22 | +22 | バケット0の読み取り操作で計測されたレイテンシ値。 |
各言語での定義
#include <windows.h>
// MEASURED_LATENCY (x64 24 / x86 24 バイト)
#pragma pack(push, 1)
typedef struct MEASURED_LATENCY {
WORD Trim3;
WORD Write3;
WORD Read3;
WORD Trim2;
WORD Write2;
WORD Read2;
WORD Trim1;
WORD Write1;
WORD Read1;
WORD Trim0;
WORD Write0;
WORD Read0;
} MEASURED_LATENCY;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct MEASURED_LATENCY
{
public ushort Trim3;
public ushort Write3;
public ushort Read3;
public ushort Trim2;
public ushort Write2;
public ushort Read2;
public ushort Trim1;
public ushort Write1;
public ushort Read1;
public ushort Trim0;
public ushort Write0;
public ushort Read0;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure MEASURED_LATENCY
Public Trim3 As UShort
Public Write3 As UShort
Public Read3 As UShort
Public Trim2 As UShort
Public Write2 As UShort
Public Read2 As UShort
Public Trim1 As UShort
Public Write1 As UShort
Public Read1 As UShort
Public Trim0 As UShort
Public Write0 As UShort
Public Read0 As UShort
End Structureimport ctypes
from ctypes import wintypes
class MEASURED_LATENCY(ctypes.Structure):
_pack_ = 1
_fields_ = [
("Trim3", ctypes.c_ushort),
("Write3", ctypes.c_ushort),
("Read3", ctypes.c_ushort),
("Trim2", ctypes.c_ushort),
("Write2", ctypes.c_ushort),
("Read2", ctypes.c_ushort),
("Trim1", ctypes.c_ushort),
("Write1", ctypes.c_ushort),
("Read1", ctypes.c_ushort),
("Trim0", ctypes.c_ushort),
("Write0", ctypes.c_ushort),
("Read0", ctypes.c_ushort),
]#[repr(C, packed(1))]
pub struct MEASURED_LATENCY {
pub Trim3: u16,
pub Write3: u16,
pub Read3: u16,
pub Trim2: u16,
pub Write2: u16,
pub Read2: u16,
pub Trim1: u16,
pub Write1: u16,
pub Read1: u16,
pub Trim0: u16,
pub Write0: u16,
pub Read0: u16,
}import "golang.org/x/sys/windows"
type MEASURED_LATENCY struct {
Trim3 uint16
Write3 uint16
Read3 uint16
Trim2 uint16
Write2 uint16
Read2 uint16
Trim1 uint16
Write1 uint16
Read1 uint16
Trim0 uint16
Write0 uint16
Read0 uint16
}type
MEASURED_LATENCY = packed record
Trim3: Word;
Write3: Word;
Read3: Word;
Trim2: Word;
Write2: Word;
Read2: Word;
Trim1: Word;
Write1: Word;
Read1: Word;
Trim0: Word;
Write0: Word;
Read0: Word;
end;const MEASURED_LATENCY = extern struct {
Trim3: u16,
Write3: u16,
Read3: u16,
Trim2: u16,
Write2: u16,
Read2: u16,
Trim1: u16,
Write1: u16,
Read1: u16,
Trim0: u16,
Write0: u16,
Read0: u16,
};type
MEASURED_LATENCY {.packed.} = object
Trim3: uint16
Write3: uint16
Read3: uint16
Trim2: uint16
Write2: uint16
Read2: uint16
Trim1: uint16
Write1: uint16
Read1: uint16
Trim0: uint16
Write0: uint16
Read0: uint16align(1)
struct MEASURED_LATENCY
{
ushort Trim3;
ushort Write3;
ushort Read3;
ushort Trim2;
ushort Write2;
ushort Read2;
ushort Trim1;
ushort Write1;
ushort Read1;
ushort Trim0;
ushort Write0;
ushort Read0;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MEASURED_LATENCY サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; Trim3 : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; Write3 : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Read3 : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; Trim2 : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; Write2 : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; Read2 : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; Trim1 : WORD (+12, 2byte) wpoke st,12,値 / 値 = wpeek(st,12)
; Write1 : WORD (+14, 2byte) wpoke st,14,値 / 値 = wpeek(st,14)
; Read1 : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; Trim0 : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; Write0 : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; Read0 : WORD (+22, 2byte) wpoke st,22,値 / 値 = wpeek(st,22)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MEASURED_LATENCY, pack=1
#field short Trim3
#field short Write3
#field short Read3
#field short Trim2
#field short Write2
#field short Read2
#field short Trim1
#field short Write1
#field short Read1
#field short Trim0
#field short Write0
#field short Read0
#endstruct
stdim st, MEASURED_LATENCY ; NSTRUCT 変数を確保
st->Trim3 = 100
mes "Trim3=" + st->Trim3