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