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

MEASURED_LATENCY

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

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

フィールド

フィールドサイズx64x86説明
Trim3WORD2+0+0バケット3のTrim操作で計測されたレイテンシ値。
Write3WORD2+2+2バケット3の書き込み操作で計測されたレイテンシ値。
Read3WORD2+4+4バケット3の読み取り操作で計測されたレイテンシ値。
Trim2WORD2+6+6バケット2のTrim操作で計測されたレイテンシ値。
Write2WORD2+8+8バケット2の書き込み操作で計測されたレイテンシ値。
Read2WORD2+10+10バケット2の読み取り操作で計測されたレイテンシ値。
Trim1WORD2+12+12バケット1のTrim操作で計測されたレイテンシ値。
Write1WORD2+14+14バケット1の書き込み操作で計測されたレイテンシ値。
Read1WORD2+16+16バケット1の読み取り操作で計測されたレイテンシ値。
Trim0WORD2+18+18バケット0のTrim操作で計測されたレイテンシ値。
Write0WORD2+20+20バケット0の書き込み操作で計測されたレイテンシ値。
Read0WORD2+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 Structure
import 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: uint16
align(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