Win32 API 日本語リファレンス
ホームStorage.Nvme › LATENCY_STAMP

LATENCY_STAMP

構造体
サイズx64: 96 バイト / x86: 96 バイトパッキング1

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
Trim3ULONGLONG8+0+0バケット3のTrim操作のレイテンシ計測タイムスタンプ。
Write3ULONGLONG8+8+8バケット3の書き込み操作のレイテンシタイムスタンプ。
Read3ULONGLONG8+16+16バケット3の読み取り操作のレイテンシタイムスタンプ。
Trim2ULONGLONG8+24+24バケット2のTrim操作のレイテンシタイムスタンプ。
Write2ULONGLONG8+32+32バケット2の書き込み操作のレイテンシタイムスタンプ。
Read2ULONGLONG8+40+40バケット2の読み取り操作のレイテンシタイムスタンプ。
Trim1ULONGLONG8+48+48バケット1のTrim操作のレイテンシタイムスタンプ。
Write1ULONGLONG8+56+56バケット1の書き込み操作のレイテンシタイムスタンプ。
Read1ULONGLONG8+64+64バケット1の読み取り操作のレイテンシタイムスタンプ。
Trim0ULONGLONG8+72+72バケット0のTrim操作のレイテンシタイムスタンプ。
Write0ULONGLONG8+80+80バケット0の書き込み操作のレイテンシタイムスタンプ。
Read0ULONGLONG8+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 Structure
import 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: uint64
align(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