Skip to content

Instantly share code, notes, and snippets.

View szaydel's full-sized avatar

Sam Zaydel szaydel

  • RackTop Systems
  • Moss Beach
View GitHub Profile
#!/usr/bin/env bash
runtime=60
interval=10
while getopts i:t: name; do
case $name in
i) interval="$OPTARG";;
t) runtime="$OPTARG";;
?) printf "Usage: %s: [-i <value>] [-t <value>]\n" "$0"
#!/usr/sbin/dtrace -Cs
#pragma D option quiet
#define SD_TO_DEVINFO(un) ((struct dev_info *)((un)->un_sd->sd_dev))
#define DEV_NAME(un) \
stringof(`devnamesp[SD_TO_DEVINFO(un)->devi_major].dn_name) /* ` */
#define DEV_INST(un) (SD_TO_DEVINFO(un)->devi_instance)
#define SD_GET_XBUF(bp) ((struct sd_xbuf *)((bp)->b_private))
#define SD_GET_UN(bp) ((SD_GET_XBUF(bp))->xb_un)
#define DEVI_ADDR(un) (SD_TO_DEVINFO(un)->devi_addr_buf)
#!/usr/sbin/dtrace -Cs
#pragma D option quiet
#define NSECS_IN_MSEC 1000000
:zfs:dmu_tx_wait:entry {
self->in = timestamp;
self->spa = (string)((char *)args[0]->tx_pool->dp_spa->spa_name);
}
:zfs:dmu_tx_wait:return /self->in/ {
this->delta = timestamp - self->in;
#!/usr/sbin/dtrace -Cs
#include <sys/scsi/scsi_pkt.h> /* command completion defines */
#pragma D option quiet
#define SD_TO_DEVINFO(un) ((struct dev_info *)((un)->un_sd->sd_dev))
#define DEV_NAME(un) \
stringof(`devnamesp[SD_TO_DEVINFO(un)->devi_major].dn_name) /* ` */
#define DEV_INST(un) (SD_TO_DEVINFO(un)->devi_instance)
#define SD_GET_XBUF(bp) ((struct sd_xbuf *)((bp)->b_private))
#define SD_GET_UN(bp) ((SD_GET_XBUF(bp))->xb_un)
#!/usr/sbin/dtrace -Cs
#pragma D option quiet
#define SD_TO_DEVINFO(un) ((struct dev_info *)((un)->un_sd->sd_dev))
#define DEV_NAME(un) \
stringof(`devnamesp[SD_TO_DEVINFO(un)->devi_major].dn_name) /* ` */
#define DEV_INST(un) (SD_TO_DEVINFO(un)->devi_instance)
#define SD_GET_XBUF(bp) ((struct sd_xbuf *)((bp)->b_private))
#define SD_GET_UN(bp) ((SD_GET_XBUF(bp))->xb_un)
@szaydel
szaydel / sd-test-unit-ready.d
Last active September 5, 2022 13:22
Script enables monitoring of the TUR commands, their latency and errors returned from the calls.
#!/usr/sbin/dtrace -Cs
#pragma D option quiet
#define SD_TO_DEVINFO(un) ((struct dev_info *)((un)->un_sd->sd_dev))
#define DEV_NAME(un) \
stringof(`devnamesp[SD_TO_DEVINFO(un)->devi_major].dn_name) /* ` */
#define DEV_INST(un) (SD_TO_DEVINFO(un)->devi_instance)
::sd_send_scsi_TEST_UNIT_READY:entry {
self->un = args[0]->ssc_un;
@szaydel
szaydel / touch.c
Last active July 5, 2022 21:04
This utility is useful for cases where a really large number of files needs to be created, and the cost of loops in bash or some other shell is prohibitively high.
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
int touch_file(const char *prefix, const char *suffix, size_t index) {
char filename[1024] = {0};
#!/usr/sbin/dtrace -qCs
#define NT_STATUS_WRONG_PASSWORD 0xC000006A
#define NT_STATUS_LOGON_FAILURE 0xC000006D
BEGIN
{
printf("%-32s %s\n", "USER", "IP");
}
@szaydel
szaydel / client.c
Created June 17, 2022 18:57
This was created to validate that on MACOS fixed source port makes it impossible to immediately restart the client due to the socket going into TIME_WAIT state for 30 seconds or so.
#include <assert.h>
#include <ctype.h>
#include <ifaddrs.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
dtrace -qn '
::sdopen:entry { self->in_open = 1; }
::ddi_get_soft_state:entry /self->in_open/ { self->inst = args[1]; }
::ddi_get_soft_state:return /self->in_open/ {
printf("sd%d %d\n", self->inst, ((struct sd_lun *)args[1])->un_detach_count);
self->in_open = 0;
self->inst = 0;
}'