Traffic Shaping and Policing in Cisco IOS

Your ads will be inserted here by

Easy AdSense Lite.

Please go to the plugin admin page to paste your ad code.

I needed to setup bandwidth shaping on a router recently for testing purposes and decided on the below configuration on my Cisco router.  I know this drops packets and I don’t really care;  this is a guest network and it isn’t mission critical.

policy-map POLICY_GUEST_OUT
 class CLASS_GUEST_OUT
  shape average 1000000
policy-map POLICY_GUEST_IN
 class CLASS_GUEST_IN
  police 1000000 1000 1000 conform-action transmit  exceed-action set-qos-transmit 4 violate-action drop

class-map match-all CLASS_GUEST_IN
 match any
class-map match-any CLASS_GUEST_OUT
 match any

interface GigabitEthernet0/1.102
 encapsulation dot1Q 102
 service-policy input POLICY_GUEST_IN
 service-policy output POLICY_GUEST_OUT

Confirming things are working:

ciscorouter# sh policy-map interface
 GigabitEthernet0/1.102

  Service-policy input: POLICY_GUEST_IN

    Class-map: CLASS_GUEST_IN (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
      police:
          cir 1000000 bps, bc 1000 bytes, be 1000 bytes
        conformed 0 packets, 0 bytes; actions:
          transmit
        exceeded 0 packets, 0 bytes; actions:
          set-qos-transmit 4
        violated 0 packets, 0 bytes; actions:
          drop
        conformed 0000 bps, exceeded 0000 bps, violated 0000 bps

    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

  Service-policy output: POLICY_GUEST_OUT

    Class-map: CLASS_GUEST_OUT (match-any)
      3284 packets, 2742876 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
      Queueing
      queue limit 64 packets
      (queue depth/total drops/no-buffer drops) 0/28/0
      (pkts output/bytes output) 3161/2741698
      shape (average) cir 1000000, bc 4000, be 4000
      target shape rate 1000000

    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

      queue limit 64 packets
      (queue depth/total drops/no-buffer drops) 0/0/0
      (pkts output/bytes output) 0/0

References:

Posted in Networking | Tagged , , , , , | Leave a comment

MSDN Bug Check Code Reference

Your ads will be inserted here by

Easy AdSense Lite.

Please go to the plugin admin page to paste your ad code.

Bug Check Code Reference from MSDN

http://msdn.microsoft.com/en-us/library/windows/hardware/hh406232(v=vs.85).aspx

Great site with lots of collected information from an MVP

http://www.carrona.org/bsodindx.html

I once had a complete listing with search capability (http://www.techish.net/bugcodes/) but I no longer have this.  I will soon recreate it.

Posted in Windows | Tagged , , , | Leave a comment

Visualizing SQLIO: Disk benchmark results using a PivotChart

Your ads will be inserted here by

Easy AdSense Lite.

Please go to the plugin admin page to paste your ad code.

This is a quick video of what I was working on for a little today. I created a batch script that will benchmark a disk(s) using SQLIO and record the output to a single file (or multiple, if necessary). After benchmarking completes, I run SQLIOResults and choose the output file that was created by my batch script.

Once SQLIOResults parses the SQLIO output and finishes inserting it into Excel, I create a PivotChart to compare the disk(s) IOPS and MB/s at each of the different test levels.

Hopefully someone else will find this useful. Also, if anyone knows how I can create a pivot chart in Powershell (if there’s a COM call), please let me know so I can completely automate this!

Posted in Windows | Tagged , , , , , | Leave a comment

SQL Performance Monitoring

I have read numerous articles all over the ‘net regarding performance counters to monitor, etc.

This is a snapshot of a typical performance monitoring session I use to track down performance issues or review the system at any given point.

SQL and System Performance Counters

 

Posted in Windows | Tagged , , , , | Leave a comment

SQLIO Scripts and Graphs

One of probably hundreds of SQL scripts out there. This is what I made and use… and I like it.

There are a lot of other scripts out there that are available and even an SQLIO GUI.  Here are a few I looked at myself.

SQLIOToolSet
SQLIO GUI (screenshot)
SQLIO.Scripts

My script is a basic DOS batch file that automates collecting statistics on a few different drives when you’re testing.  You need to make sure you have created the %TESTFILE% on the root of the drives you want to test.  I create, and I suspect most others do as well, a testfile.dat on the root of each drive I test.  You’ll need to create this before running the script or it will break!

If you want to extend this script, it’s easy.  All the testing is put into a function called RUN_BENCHMARK which is called and passed a drive letter argument.  So if you want to add more tests, feel free.  Just mimic the existing code in that stanza and you should be ok.

SQLIO Batch Script

 

Finish SQLIO Benchmarking

SQLIOResults Combined Disk IOPS Graph

@echo off
setlocal

: This script will benchmark a HDD using SQLIO and store results in the
: RESULTS_LOGFILE_NAME%_%X.txt where X is the drive letter(s) benchmarked
: in the current path and TIME is the timestamp the script was run.

: YOU MUST HAVE CREATED THE %TESTFILE% ON EACH DRIVE.

: Set duration of each test in seconds
set DURATION=30
: Set the buffering.  N=none, Y=all, H=hdwr, S=sfwr
set BUFFERING=H
: Set latencies from (S=system, P=processor) timer
set LATENCY=S
: Filename of test file created already.  You can specify a full path if needed.  If spaces
: exist in path or name, use quotes.
set TESTFILE=testfile.dat
: The log file name (prepend) - log file is stored in the same location this script is run
: from.  You could specifiy a path if you wanted.
set RESULTS_LOGFILE_NAME=%COMPUTERNAME%_%TIME::=%_results
: Drive(s) to run the tests on.  Separate each drive with a comma.
set TEST_DRIVES=E,F,G
: Set the log to either 1-combine or 0-separate.  If separated, a file will be generated
: for each TEST_DRIVES disk.
set COMBINE_LOG=1

: I should do some error checking, but I'm not going to.
: Future plans:

IF ["%TEST_DRIVES%"]==[] call:MissingDrive & goto EOF

cls
color 1F
echo Benchmark of drive(s) %TEST_DRIVES% start:  %DATE% %TIME%
echo.
echo.
echo This will take some time.  The background will become green once the
echo benchmarking completes.  Go grab some coffee and read up on the latest
echo news of the world.
echo.
echo.

for /D %%D in (%TEST_DRIVES%) do (call:RUN_BENCHMARK %%D)
GOTO END

:RUN_BENCHMARK
IF [%1]==[] call:MissingDrive

IF [%COMBINE_LOG%]==[1] (
set APPEND=COMBINED
) ELSE (
set APPEND=%1
)

echo Benchmark [%1] begin:  %DATE% %TIME%
echo [%1] RANDOM WRITES (64K)
sqlio -d%1 -B%BUFFERING% -kW -frandom -t1 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -frandom -t2 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -frandom -t4 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -frandom -t8 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
echo [%1] RANDOM READS (64K)
sqlio -d%1 -B%BUFFERING% -kR -frandom -t1 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t2 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t4 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o2 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o4 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o8 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o16 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o32 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o64 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -frandom -t8 -o128 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
echo [%1] SEQUENTIAL READS (64K)
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t1 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t2 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t4 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o1 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o2 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o4 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o8 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o16 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o32 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o64 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kR -fsequential -t8 -o128 -s%DURATION% -b64 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
echo [%1] SEQUENTIAL WRITES (8K blocks to mimic SQL Logfiles)
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t1 -o1 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t2 -o1 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t4 -o1 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o1 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o2 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o4 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o8 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o16 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o32 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o64 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
sqlio -d%1 -B%BUFFERING% -kW -fsequential -t8 -o128 -s%DURATION% -b8 -L%LATENCY% %TESTFILE% >>%RESULTS_LOGFILE_NAME%_%APPEND%.txt
echo Benchmark [%1] complete:  %DATE% %TIME%
echo.
echo.
GOTO EOF

:MissingDrive
color CF
echo Missing drive.  Specify %%TEST_DRIVE%% variable please.
goto EOF

:END
color 2F
echo Benchmark of drive(s) [%TEST_DRIVES%] completed:  %DATE% %TIME%

endlocal

:EOF
Posted in Windows | Tagged , , | 1 Comment