I'm trying to use usr LEDs on BeagleBone Green Wireless on Debian 8.6 (default image from http://beagleboard.org/green with kernel 4.4.26-ti-r59) for my own debug purposes, but some script make it impossible. It is caused most likely by a JS script (after uninstalling nodejs leds stopped beating, but JS is crucial for me).
I've already tried to switch mode of led blink to none:
# cd /sys/class/leds/beaglebone\:green\:usr0
# echo none > trigger
# cat trigger
[none] rc-feedback kbd-scrollock ...
and to control brightness:
# echo 0 > brightness
# cat brightness
0
# echo 255 > brightness
# cat brightness
0
# cat brightness
1
As you can see - value of brightness is simply being overwritten by another program (script) running in loop. Does anyone have an idea which script may cause this situation?
Related
I need to retrieve the real architecture of a Mac regardless of if the process is running through Rosetta or not.
Right now in Node.js, process.arch returns x64 and in shell, uname -m returns x86_64.
Thanks to #Ouroborus, this note describes how to figure out if your app is translated.
If it's translated:
$ sysctl sysctl.proc_translated
sysctl.proc_translated: 1
If not:
$ sysctl sysctl.proc_translated
sysctl.proc_translated: 0
On non-ARM Macs:
$ sysctl sysctl.proc_translated
sysctl: unknown oid 'sysctl.proc_translated'
As #Elmo's answer indicates, the command line sysctl -n sysctl.proc_translated or the native equivalent sysctlbyname() call will indicate whether you are running under Rosetta.
Two other sysctl values are relevant. On M1 hardware without Rosetta, these values are returned:
hw.cputype: 16777228
hw.cpufamily: 458787763
hw.cputype is 0x0100000C (CPU_TYPE_ARM64) and hw.cpufamily is 0x1b588bb3 (CPUFAMILY_ARM_FIRESTORM_ICESTORM).
However, when executed under Rosetta, the low-level machine code which collects CPUID takes precendence and following two values are returned, both via sysctlbyname() and the command line:
hw.cputype: 7
hw.cpufamily: 1463508716
These correspond to 0x7 (CPU_TYPE_X86) and 0x573b5eec (INTEL_WESTMERE).
It appears Rosetta reports an x86-compatible Westmere chip under Rosetta, but this choice seems consistent everywhere I've seen. This "virtual architecture" may be useful information for some programs.
Another possibility presents itself in the IO Registry. While the default IOService plane collects data in real-time, the IODeviceTree plane is stored at boot, and includes these entries in the tree (command line ioreg -p IODeviceTree or ioreg -c IOPlatformDevice):
cpu0#0 <class IOPlatformDevice, id 0x10000010f, registered, matched, active, busy 0 (180 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,icestorm","ARM,v8">
(for CPUs 0-3)
and
cpu4#100 <class IOPlatformDevice, id 0x100000113, registered, matched, active, busy 0 (186 ms), retain 8>
| | | {
...
| | | "compatible" = <"apple,firestorm","ARM,v8">
(for CPUs 4-7)
This clearly indicates the ARMv8 Firestorm + Icestorm M1 chip.
The same approach should work for the M1 Pro and M1 Max.
We are building an hybrid Razor HTML5/Xamarin Android application. The rendering of the views in an Android.Webkit.WebView itself works pretty well and we got many forms designed properly, but we got a problem with the performance of the javascript execution in the single views.
I'll try to describe what's happening. We call the webview, generate the razor html template with the view specific model. After that we call the view with "LoadDataWithBaseUrl" which works. The view gets loaded by the webview control. Now I'll try to use buttons which are implemented in the view. The onclick handlers of the buttons are implemented in the views header section script tag in javascript. Example implementation:
...
function ClearInput() {
var input = document.getElementById('page-text-input');
input.value = "";
}
...
<input type="button" class="numeric-input-function" onclick="ClearInput();"/>
The problem that occurs is that we aren't able to use the button directly after the view has been rendered by the webview control. It seems like the javascript isn't directly available. There is no click event thrown for the first button click in the process. The second click and following ones work.
As a result of this misbehavior we have restricted usability.
To clarify: The user sees the view but isn't able to operate properly because the click event for the first click isn't recognized.
Does anybody else have the same kind of issue or a solution for that problem?
Edit:
We tried to disable the forms with a loading screen while it isn't fully loaded but that wasn't the solution were looking for. The problem still remains.
It seems like the webview isn't focused on start and the first click is needed to setup the focus.
Edit 2:
I made some more tests and recognized that the input channel is destroyed right after its constructed everytime I call the webview. The corresponding debug output looks as follows:
08-16 16:50:01.583 D/InputTransport(31313): Input channel constructed: fd=144
08-16 16:50:01.583 D/InputTransport(31313): Input channel destroyed: fd=132
08-16 16:50:03.813 D/Mono (31313): GC_BRIDGE waiting for bridge processing to finish
08-16 16:50:03.856 I/art (31313): Starting a blocking GC Explicit
08-16 16:50:03.894 I/art (31313): Explicit concurrent mark sweep GC freed 18081(2MB) AllocSpace objects, 87(4MB) LOS objects, 14% free, 91MB/107MB, paused 559us total 38.349ms
08-16 16:50:03.927 D/Mono (31313): GC_TAR_BRIDGE bridges 6498 objects 8686 opaque 242 colors 6492 colors-bridged 6479 colors-visible 6479 xref 101 cache-hit 0 cache-semihit 0 cache-miss 13 setup 0.72ms tarjan 7.96ms scc-setup 2.09ms gather-xref 0.36ms xref-setup 0.07ms cleanup 0.76ms
08-16 16:50:03.927 D/Mono (31313): GC_BRIDGE: Complete, was running for 114.00ms
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR: (LOS overflow) time 102.71ms, stw 104.75ms los size: 27552K in use: 23334K
08-16 16:50:03.927 D/Mono (31313): GC_MAJOR_SWEEP: major size: 10240K in use: 8427K
08-16 16:50:07.126 D/ViewRootImpl#22ae52[CoordinatorActivity](31313): Relayout returned: oldFrame=[0,0][2048,1536] newFrame=[0,0][2048,1536] result=0x1 surface={isValid=true -913786880} surfaceGenerationChanged=false
08-16 16:50:08.112 D/ViewRootImpl#22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.215 D/ViewRootImpl#22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.732 D/ViewRootImpl#22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 0
08-16 16:50:08.800 D/ViewRootImpl#22ae52[CoordinatorActivity](31313): ViewPostImeInputStage processPointer 1
08-16 16:50:08.818 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.824 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.828 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
08-16 16:50:08.831 D/InputMethodManager(31313): HSI from window - flag : 0 Pid : 31313
Edit 3:
I tried different flags, settings for focusable and focusableInTouchMode and ontouch / onfocuschanged event handlers but nothing seems to work. Nobody got an idea about how to fix that problem?
I've found the solution. The reason was that "system_ui_flag_hide_navigation" was set. I don't know why that side effect occured, but after I removed the line, it worked. Just in case somebody else also runs into that problem.
We have a SPA running on Chrome Browser. It is Crashing intermittently after using the application for some time. I am getting the Aw Snap error Page.
I enabled the logs in the Chrome and found out following information in the log files. Additionally, Google Chrome doesn't generate a Dump file even after enabling the Dump file setting in Chrome.
Error Message in Chrome Logs
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph 6f
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph b3
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph 11b
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph bf
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph 48
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph 46
[0226/100630:INFO:SkScalerContext.cpp(170)] --- no context for glyph 23
[0226/100630:INFO:SkCanvas.cpp(747)] Unable to create device for layer.
[0226/100630:INFO:SkCanvas.cpp(747)] Unable to create device for layer.
[0226/100630:INFO:SkCanvas.cpp(747)] Unable to create device for layer.
Can anyone give some pointers as to what the error message "Unable to create device for layer." and "no context for glyph" means and what can be the possible reasons for this error message?
Since the crash happens after using the application for some time, i am suspecting a memory leak. Is it possible that the error is happening because of memory leak?
EDIT 1:
There seems to be memory leak as the Javascript Memory is increasing. Also, the Heap Allocation shows the increasing memory which is not getting Cleared. However, the SPA itself is little complex and having a lot of Objects and i will analyze what Objects are Preventing other Objects from GC.
Additionally, the Chrome creates a 0Kb dump file in the CrashReports folder.
Moreover, i took a process dump and analyzed using windbg. Following is the output from !analyze-v command. I am analyzing the memory dumps and from the windbg it seems that an access violation exception is raised and it seems that no memory is available for allocating the Bitmap. Does this dump information point to any other useful information as well?
FAULTING_IP:
chrome_1490000!skia::CrashForBitmapAllocationFailure+70 [c:\b\build\slave\chrome-official\build\src\skia\ext\platform_canvas_win.cc # 46]
01956d67 mov dword ptr ds:[3],0
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 01956d67 (chrome_1490000!skia::CrashForBitmapAllocationFailure+0x00000070)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 00000003
Attempt to write to address 00000003
PROCESS_NAME: chrome.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_PARAMETER1: 00000001
EXCEPTION_PARAMETER2: 00000003
WRITE_ADDRESS: 00000003
FOLLOWUP_IP:
chrome_1490000!skia::CrashForBitmapAllocationFailure+70 [c:\b\build\slave\chrome-official\build\src\skia\ext\platform_canvas_win.cc # 46]
01956d67 mov dword ptr ds:[3],0
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
FAULTING_THREAD: 00002fac
BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE
PRIMARY_PROBLEM_CLASS: NULL_CLASS_PTR_DEREFERENCE
DEFAULT_BUCKET_ID: NULL_CLASS_PTR_DEREFERENCE
LAST_CONTROL_TRANSFER: from 014ef4ed to 01956d67
STACK_TEXT:
003deb9c 014ef4ed 000004cc 000000d6 00000057 chrome_1490000!skia::CrashForBitmapAllocationFailure+0x70 [c:\b\build\slave\chrome-official\build\src\skia\ext\platform_canvas_win.cc # 46]
003debc0 0160893b 000004cc 000000d6 00000001 chrome_1490000!skia::PlatformCanvas::initialize+0x97 [c:\b\build\slave\chrome-official\build\src\skia\ext\platform_canvas_win.cc # 107]
003debe4 016086ef 000004cc 000000d6 003ded54 chrome_1490000!TransportDIB::GetPlatformCanvas+0x3f [c:\b\build\slave\chrome-official\build\src\ui\gfx\surface\transport_dib_win.cc # 74]
003dec04 0160696b 035f4774 000000d6 003dedd8 chrome_1490000!RenderProcessImpl::GetDrawingCanvas+0x4d [c:\b\build\slave\chrome-official\build\src\content\renderer\render_process_impl.cc # 169]
003ded80 01606488 035f4700 017ec98a 003def0c chrome_1490000!RenderWidget::DoDeferredUpdate+0x49b [c:\b\build\slave\chrome-official\build\src\content\renderer\render_widget.cc # 843]
003ded88 017ec98a 003def0c 035f4700 03606ab8 chrome_1490000!RenderWidget::DoDeferredUpdateAndSendInputAck+0x8 [c:\b\build\slave\chrome-official\build\src\content\renderer\render_widget.cc # 731]
003dedb4 017ec725 015d826f 1d660a04 035f4700 chrome_1490000!RenderWidget::OnUpdateRectAck+0xe1 [c:\b\build\slave\chrome-official\build\src\content\renderer\render_widget.cc # 383]
003dedb8 015d826f 1d660a04 035f4700 035f4700 chrome_1490000!IPC::Message::Dispatch<RenderWidget,RenderWidget>+0x1a [c:\b\build\slave\chrome-official\build\src\ipc\ipc_message.h # 138]
003def0c 015c10c8 1d660a04 1d660a04 1d660a04 chrome_1490000!RenderWidget::OnMessageReceived+0xb0 [c:\b\build\slave\chrome-official\build\src\content\renderer\render_widget.cc # 201]
003df420 0154d34f 1d660a04 03613d84 0154d329 chrome_1490000!RenderViewImpl::OnMessageReceived+0x1381 [c:\b\build\slave\chrome-official\build\src\content\renderer\render_view_impl.cc # 764]
003df42c 0154d329 1d660a04 0150aed5 1d660a04 chrome_1490000!MessageRouter::RouteMessage+0x23 [c:\b\build\slave\chrome-official\build\src\content\common\message_router.cc # 47]
003df434 0150aed5 1d660a04 003df510 00000000 chrome_1490000!MessageRouter::OnMessageReceived+0x1b [c:\b\build\slave\chrome-official\build\src\content\common\message_router.cc # 39]
003df490 014c39f0 1d660a04 00000002 014c0c8a chrome_1490000!ChildThread::OnMessageReceived+0x178 [c:\b\build\slave\chrome-official\build\src\content\common\child_thread.cc # 201]
003df49c 014c0c8a 1d6609f0 00000000 1d6609f4 chrome_1490000!base::internal::Invoker<2,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall quota::QuotaManagerProxy::*)(GURL const &)>,void __cdecl(quota::QuotaManagerProxy *,GURL const &),void __cdecl(quota::QuotaManagerProxy *,GURL)>,void __cdecl(quota::QuotaManagerProxy *,GURL const &)>::Run+0x16 [c:\b\build\slave\chrome-official\build\src\base\bind_internal.h # 1254]
003df4e8 014c0962 003df748 003df510 003df748 chrome_1490000!MessageLoop::RunTask+0x21e [c:\b\build\slave\chrome-official\build\src\base\message_loop.cc # 460]
003df758 01493ffd 0a805c60 00000051 00000004 chrome_1490000!MessageLoop::DoWork+0x2d1 [c:\b\build\slave\chrome-official\build\src\base\message_loop.cc # 661]
003df860 014a5d87 035f0780 035f0788 035f0788 chrome_1490000!tcmalloc::ThreadCache::Deallocate+0x2c [c:\b\build\slave\chrome-official\build\src\third_party\tcmalloc\chromium\src\thread_cache.h # 346]
003df930 014a86c6 00000014 0000001f 03613d84 chrome_1490000!std::_Allocate<unsigned short>+0x71 [c:\program files (x86)\microsoft visual studio 9.0\vc\include\xmemory # 44]
003df98c 014b03f0 00000000 00000008 00000000 chrome_1490000!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare+0x4b [c:\program files (x86)\microsoft visual studio 9.0\vc\include\xstring # 2051]
003df9a8 014b1fe4 003dfa20 003dfab0 00000000 chrome_1490000!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::compare+0x26 [c:\program files (x86)\microsoft visual studio 9.0\vc\include\xstring # 2027]
003df9bc 014a54b4 003dfa78 003dfa20 003dfab0 chrome_1490000!`anonymous namespace'::RunNamedProcessTypeMain+0x42 [c:\b\build\slave\chrome-official\build\src\content\app\content_main.cc # 264]
003dfa98 014a5244 01360000 003dfb98 003dfab0 chrome_1490000!content::ContentMain+0x224 [c:\b\build\slave\chrome-official\build\src\content\app\content_main.cc # 457]
003dfacc 01385239 01360000 003dfb98 003dfba0 chrome_1490000!ChromeMain+0x1e [c:\b\build\slave\chrome-official\build\src\chrome\app\chrome_main.cc # 28]
003dfb44 0138471d 01360000 003dfb98 fffffffe chrome!MainDllLoader::Launch+0xf1 [c:\b\build\slave\chrome-official\build\src\chrome\app\client_util.cc # 343]
003dfba4 013a33ff 01360000 00000000 005e2fa4 chrome!wWinMain+0x60 [c:\b\build\slave\chrome-official\build\src\chrome\app\chrome_exe_main_win.cc # 37]
003dfc34 76fb343d 7efde000 003dfc80 777f9832 chrome!__tmainCRTStartup+0x112 [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c # 263]
003dfc40 777f9832 7efde000 77d58cd7 00000000 kernel32!BaseThreadInitThunk+0xe
003dfc80 777f9805 013a346a 7efde000 00000000 ntdll!__RtlUserThreadStart+0x70
003dfc98 00000000 013a346a 7efde000 00000000 ntdll!_RtlUserThreadStart+0x1b
STACK_COMMAND: ~0s; .ecxr ; kb
FAULTING_SOURCE_CODE:
No source found for 'c:\b\build\slave\chrome-official\build\src\skia\ext\platform_canvas_win.cc'
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: chrome!skia::CrashForBitmapAllocationFailure+70
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: chrome_1490000
IMAGE_NAME: chrome.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 4f331615
FAILURE_BUCKET_ID: NULL_CLASS_PTR_DEREFERENCE_c0000005_chrome.dll!skia::CrashForBitmapAllocationFailure
BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE_chrome!skia::CrashForBitmapAllocationFailure+70
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/chrome_exe/18_0_1025_11/4f331682/chrome_dll/18_0_1025_11/4f331615/c0000005/004c6d67.htm?Retriage=1
Followup: MachineOwner
---------
Note: This error in not coming in the latest Chrome & Canary Build. We are getting this error on the Older version of Chrome (32 bit).
The messages you see in the log file are probably unrelated and not serious, considering that they say INFO at the beginning.
A memory leak could absolutely be what's causing the tab crashes. As a quick test, you can open Chrome's process manager and check if memory consumption of the tab in question grows over time.
Once you have confirmed the suspicion that there is a memory leak, the DevTools are your best friend for figuring out what's going on. Two approaches that are often useful are:
Take a heap snapshot, perform some sequence of operations where afterwards memory consumption should be the same as it was before you started (i.e. navigate somewhere and back, or the like), take a second heap snapshot, and use the comparison tool to compare them. Anything that's in the second snapshot but not in the first could point you towards the leak.
Use the "allocation timeline" feature. It indicates when objects are allocated, and which of them are still around.
If you believe that the leak is in Chrome rather than your own app, please file a bug at crbug.com/new and include instructions on how to reproduce the problem. If you post the bug number here, I can make sure it gets looked at. A quick test to determine whether the cause is likely your own app or the browser is to run it in another browser and see if you observe the same crash (and/or increase in memory consumption) there.
My question is, what is the most efficient configuration for PhantomJS tests.
Currently I have 1 instance of PhantomJS running and every instance can have 2 tabs opened (dev env).
Is it better to have more instance of phantomjs or opened tabs, and if tabs, what is the upper limit of PhantomJS.
CPU:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i5-3210M CPU # 2.50GHz
stepping : 9
microcode : 0x19
cpu MHz : 2494.316
cache size : 3072 KB
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx rdrand hypervisor lahf_lm
bogomips : 4988.63
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
Memory:
total used free shared buffers cached
Mem: 2515896 1155828 1360068 0 171648 622668
More information:
I would like to handle multiple tests at once with as less memory as possible. Now I am running two pages per phantom instance, and already I am having issues with network requests. I have a timeout of 20s and if a specific network request is not finished in that time, test fails.
Test is successful if I only run one page in one PhantomJS instance, but that is not optimal, because we will be running more then 1000 tests, and I would like to arrange tests in multiple pages across multiple phantomjs instances.
Example:
10 phantomjs instances
every phantomjs instance can run 30 pages
Now why when running multiple pages in one instance, does the network request lag so much?
I would like to test how loading external javascripts affect the page when remote servers are slow to respond.
I looked for tools that can slow down connection for specific sites but I could only find tools that slow down the whole network or that don't exist for Mac (like here or here)
Are there tools like that?
Using the Detours App for Mac, you can redirect certain hosts to your own local web server. From your server, you can then fetch the resource (via curl, etc.), sleep for a certain amount of time, and then return the response.
Its not the easy way out, but you could use IPTABLES (unix ip-router) in conjunction with TC (traffic control)?
This is quite extensive if you dont know how terminal bash-scripting works but you will need a terminal 100% for a proper solution.
If this does not work for you, try a simpler method: http://lartc.org/howto/lartc.ratelimit.single.html
Store this in for instance your home folder, call it bwm.sh
#!/bin/bash
# through this interface
IF=$1
# on this HOST
HOST=$2
# get the IP from HOST
HOSTIP="`nslookup $HOST|grep Address|grep -v "#"|cut -d " " -f2`"
# with this rate
your_rate=$3
# defaults /sbin/tc
TC="`whereis tc | sed 's/[^\ ]*.\([^\ ]*\).*/\1/'`"
# defaults /sbin/iptables
IPTABLES="`whereis iptables | sed 's/[^\ ]*.\([^\ ]*\).*/\1/'`"
#some number
PRIO="123"
# you create a new rule in the mangle table
IPT="$IPTABLES -t mangle"
echo "Program locations found: iptables: $IPTABLES and tc: $TC"
echo "down-rating bandwidth\n on $HOST\n to $your_rate whilst marking packages that origins\n from $HOSTIP\n with $PRIO on interface\n named $IF"
echo -n "starting setup.."
# apply custom filter
$IPT -N myfilter
# add it to the POSTROUTING chain
$IPT -A POSTROUTING -j myfilter
# if conntrack is used - restore a mark and allow the packets, which already have been marked, through - no need to check again
$IPT -A myfilter -p tcp -j CONNMARK --restore-mark
$IPT -A myfilter -m mark --mark $PRIO -j ACCEPT
# add to it your matching rule
$IPT -A myfilter -p tcp -s $HOSTIP -j MARK --set-mark $PRIO
# conntrack it optionally, so not every packet has to be rematched
$IPT -A myfilter -j CONNMARK --save-mark
# use that mark in a tc filter rule
echo qdisc add
$TC qdisc add dev $IF root handle 1: htb default 30
echo class add
$TC class add dev $IF parent 1: classid 1:1 htb rate $your_rate # <<<<<<<< fill in rate
echo sfq add
# add an SFQ qdisc to the end - to which you then attach the actual filter
$TC qdisc add dev $IF parent 1:1 sfq perturb 10
echo filter add
$TC filter add dev $IF parent 1:1 prio 1 handle $PRIO fw flowid 1:1
echo "done"
Now open terminal window and achieve root permissions
finder > terminal > open, we will go to user home and enter super user
cd; su
enter root password
start program with Interface, Hostname, Rate parameters
sh bwm.sh IF HOST RATE