There are few scripts in my test lab which I am using while running tests. While most of them are very specific, there is one which may be of interest for you. This script is specific to T-series servers (T2 and T2 Plus processors) running Oracle VM Server for SPARC. This script allows you to verify if any CPU core is shared between two or more logical domains. If CPU threads from the same CPU core are assigned to different logical domains, then this can reduce the efficiency of these CPU threads. The reason for this is that single CPU core have memory cache shared between CPU threads belonging to this core. Cache Thrashing occurs when two programs are using cache for different memory pages and the load is very heavy.
Lets check how it works:
First, we have two guest domains configured and each guest domain have 16 CPU threads assigned to it.
Cores are distributed between domains in the following way as script reports:
# ./check_core_assignment.pl Core 0 used by primary Core 1 used by primary Core 2 used by primary Core 12 used by ldg2 Core 13 used by ldg2 Core 14 used by ldg1 Core 15 used by ldg1Lets add 1 CPU thread to domain ldg1 and ldg2:
# ldm add-vcpu 1 ldg1 # ldm add-vcpu 1 ldg2 # ldm ls NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-cv- SP 24 8000M 0.4% 1d 2h 47m ldg1 active -n---- 5000 17 15996M 2.4% 1d 37m ldg2 active -n---- 5001 17 15996M 7.7% 2d 3h 8mAnd check what script will report:
# ./check_core_assignment.pl Core 0 used by primary Core 1 used by primary Core 2 used by primary Core 3 used by ldg1 ldg2 MultiUsage detected Core 12 used by ldg2 Core 13 used by ldg2 Core 14 used by ldg1 Core 15 used by ldg1Oops, looks like some threads of core 3 assigned to domain ldg1 and some to domain ldg2. This might lead to performance impact.
To avoid this situation always add/remove CPU threads in multiplies of 8 (number of CPU threads in CPU core on T2 and T2 Plus platform).The script itself:
# cat check_core_assignment.pl #!/usr/bin/perl @AllCores = (); open(DOM, "ldm ls -p|") || die "failed to get domains"; while (<DOM>) { if ( m/DOMAIN\|name=([^\|]*)/ ) { $domain = $1; open(CPU, "ldm ls-bindings -p $domain|") || die "failed to get cpus for $domain\n"; while (<CPU>) { if ( m/\|vid=\d*\|pid=(\d*)/ ) { $core = int($1 / 8); push (@AllCores, $core) unless $seen{$core}++; push (@{$Usage[$core]}, $domain) unless $seen{$core, $domain}++; } } } } foreach $c (sort {$a <=> $b} @AllCores) { my $mu = 0; print "Core $c used by "; foreach $k (sort @{$Usage[$c]}) { print "$k "; $mu++; }; if ($mu > 1) { print "MultiUsage detected"; } print "\n"; }See:
Here's a quote: The handset is disappointing with Java being the Operating System and not Symbian. the battery life is a little lower than usual... The phone will be available with white silver, dark metal, petrol blue and lilac colours. So, Java ME technology is a lot of things to many people and can function in many different roles (as a certain company up Highway 101 can attest). But, it is NOT the Operating System on the new Nokia X3-02. (And, it is NOT disappointing, but that's beside the point). The Nokia Series 40 (or aka S40) is the Operating System on the Nokia X3-02, and that means it is based on Symbian.
The fun and cool social apps and IM client may be the source of the confusion, since I believe those are Java ME MIDlets based on MIDP 2.1 and use the crazy delicious Java ME JSRs on the device. But, ya doesn't necessarily callz dat an Operating System, duz ya? So, in summary the Nokia X3-02 is cool and rad, because it has Java ME and Nokia Series 40. OK? Glad to get that straightened out...
Complete administration, from web console to rich command line (asadmin) has always been a strong set of features in GlassFish and often a key differentiator versus other application servers.
Jason Lee takes you in his blog entry through the basics and the recent development of a more recent administration feature - the RESTful admin interface.
As the name implies this feature exposes administrative and monitoring resources to HTTP clients with responses served in XML, HTML or JSON formats. Pretty much anything you can do with the web console or asadmin, you can do with this interface - observe pool usage, create data sources, deploy applications, etc.
Jason explains how this is all being enhanced in the current development of version 3.1 with dynamic instrumentation using asm and how you can use the __debug HTTP header for pretty-printing. Keep an eye on Jason's blog for more advanced topics. Grab a recent promoted build and try for yourself!
Rename is one of the most useful refactorings at all. The developer can alter the name of a selected type, type member, function, constant in the code. Users of NetBeans PHP IDE could use Instant Rename feature since 6.5 and now in daily builds the Rename Refactoring was improved to be able to rename elements not only in the scope of one file but rather lookup all appropriate occurrences in the whole project and then rename them. Simply put caret on the identifier and press Ctrl+R. Local changes are still made instantly in-place by Instant Rename, which is true e.g. for local variables, parameters in functions or methods and the same for private type members.
So pressing Ctrl+R for $mainModule variable invokes in-place editing, but not the same if e.g. class name should be renamed:
Although the same shortcut Ctrl+R was used, the behavior and UI is different for renaming the class name as shown on the picture above - comparing to rename of parameter. After pressing "Preview" button the individual changes will be listed like on the next picture:
Purpose of checkboxes is probably obvious - include/exclude appropriate changes. By going through the list the individual diffs are shown:
Use "Do refactoring" to apply changes. To revert the changes Refactoring > Undo should help.
All the issues or enhancements please report in NetBeans Bugzilla
Contexts & Dependency Injection (CDI) in Java EE 6 provides type-safe dependency injection. The type-safety part comes from the fact that no String-based identifiers are used for dependency injection. Instead CDI runtime uses the typing information that is already available in the Java object model.
Java EE 5 already had resource injection available in terms of PersistenceContext, PersistenceUnit, Resource, and others. But they require String-based identifiers to identify the resource to be injected. For example:
The main proposition of CDI is type-safety. This Tip Of The Day explains how @Produces annotation provided by CDI can be used to centralize all these String-based resource injection and add a facade of type-safety on them. Specifically, it shows how type-safety can be achieved for @PersistenceUnit. A similar approach can be taken for other String-based resource injections as well.
This procedure can be repeated for other String-based resources as well and thus centralize all of them at one place. And now your application becomes more type-safe! With this TOTD, you can use @Inject for injecting your container- and application-managed resources easily.
Read the latest documentation on Weld (Reference Implementation for CDI and included in GlassFish) for more details.
Technorati: totd cdi javaee6 glassfish weld produces typesafety
Contexts & Dependency Injection (CDI) in Java EE 6 provides type-safe dependency injection. The type-safety part comes from the fact that no String-based identifiers are used for dependency injection. Instead CDI runtime uses the typing information that is already available in the Java object model.
Java EE 5 already had resource injection available in terms of PersistenceContext, PersistenceUnit, Resource, and others. But they require String-based identifiers to identify the resource to be injected. For example:
The main proposition of CDI is type-safety. This Tip Of The Day explains how @Produces annotation provided by CDI can be used to centralize all these String-based resource injection and add a facade of type-safety on them. Specifically, it shows how type-safety can be achieved for @PersistenceUnit. A similar approach can be taken for other String-based resource injections as well.
This procedure can be repeated for other String-based resources as well and thus centralize all of them at one place. And now your application becomes more type-safe! With this TOTD, you can use @Inject for injecting your container- and application-managed resources easily.
Read the latest documentation on Weld (Reference Implementation for CDI and included in GlassFish) for more details.
Technorati: totd cdi javaee6 glassfish weld produces typesafety
Here is the completed version of the Customer Application referred to during today's class.
And this is where the slides are found and here is today's homework.
See:
Here's a quote: The tool set also comes with features for "standard" tracking, as well as tracking debug statements, error statements, generic actions, startup, shutdown and event types. Nokia said it plans to adapt the software to provide usage statistics from mobile Web sites and applications running on Java- based mobile devices... Cool. My Java ME app can start analysis. I think it might do it some good...
When directly manipulating or generating Java bytecode, it's not too hard to end up with bytecode that will not verify. The JVM will catch this code at runtime. However, the verifier in a JVM exists primarily to ensure secure execution of Java code, not to assist with bytecode-level programming. As a result, the verification error messages printed by a JVM are typically not so useful when trying to figure out why exactly your manipulated/generated bytecode does not verify. This is a well known problem and there already exists a number of standalone verifiers that provide very informative error messages. The ASM Java bytecode manipulation and analysis framework includes a builtin class verifier as does the BCEL library.
In the Maxine VM project, we use bytecode generation/manipulation as an alternative to writing assembler code. For example, we implement JNI stubs via generated bytecode (using a couple of bytecode extensions specific to Maxine). As such, we run into the usual issues of ensuring that the bytecode we generated was verifiable. Initially, we considered using one of the aforementioned libraries to address this. However, given that our goal is to develop a specification compliant JVM implementation we had to implement a verifier anyway. So, with the help of a sharp intern (thanks Dave!) we wrote one. Actually, we wrote two - one that performs type inferencing for class files with a version number less than 50 and one that does type checking for more recent class files (those compliant with the class file changes specified in JSR202). Now we have a verifier that not only passes the relevant JCK tests but is also a development aid whenever we do bytecode-level programming in the VM.
Useful functionality in the Maxine code base that can be made to work standalone is exposed by a the max script. So, for anyone wanting yet another offline verifier, this script includes a verify sub-command. Here's how to get the usage message for this command:
~/maxine$ bin/max help verify max verify [options] patterns... verifies a set methods using the Maxine bytecode verifier Run the Maxine verifier over a set of specified methods available on the class path. To extend the class path, use one of the global "-cp/p:" or "-cp/a:" options. See Patterns below for a description of the format expected for "patterns..." Use "max verify -help" to see what other options this command accepts. --- Patterns --- A pattern is a class name pattern followed by an optional method name...Here's the output of using it to verify a negative-test (i.e. expected to cause a failure) from the JCK:
~/maxine$ bin/max -cp/a:/Volumes/JCK-runtime-6/classes verify javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn:m Initializing verifier system... Initialized verifier system Finding specified methods... Found 1 methods Exception in thread "main" VerifyError: Missing stackmap frame for bytecode position 26 (branch target) while verifying javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn.m() at bytecode position 1 at com.sun.max.vm.classfile.ErrorContext.verifyError(ErrorContext.java:179) at com.sun.max.vm.verifier.MethodVerifier.verifyError(MethodVerifier.java:124) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.frameAt(TypeCheckingMethodVerifier.java:209) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.performBranch(TypeCheckingMethodVerifier.java:317) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier$Interpreter.lookupswitch(TypeCheckingMethodVerifier.java:1579) at com.sun.max.vm.bytecode.BytecodeScanner.scanInstruction(BytecodeScanner.java:991) at com.sun.max.vm.bytecode.BytecodeScanner.scan(BytecodeScanner.java:1197) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.verifyBytecodes(TypeCheckingMethodVerifier.java:145) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.verify(TypeCheckingMethodVerifier.java:112) at com.sun.max.vm.verifier.TypeCheckingVerifier.verify(TypeCheckingVerifier.java:71) at test.com.sun.max.vm.verifier.CommandLineVerifier.main(CommandLineVerifier.java:106)To see the abstract interpreter in action, use the -verbose option:
~/maxine$ bin/max -cp/a:/Volumes/JCK-runtime-6/classes verify -verbose=3 javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn:m Initializing verifier system... Initialized verifier system Finding specified methods... Found 2 methods Verifying javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn.m() Input bytecode: Stack=1, Locals=1 0: iconst_1 | 4 1: lookupswitch default:20 1:26 | 171 0 0 0 0 0 19 0 0 0 1 0 0 0 1 0 0 0 25 20: return | 177 StackMapTable: number of entries = 1 20: frame_type = 255 /* full_frame */ offset_delta = 20 number_of_locals = 1 locals = [ javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn ] number_of_stack_items = 0 stack = [ ] StackMapTable frames: 0: local[0] = javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn 20: local[0] = javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn Interpreting bytecode: local[0] = javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn 0: iconst_1 stack[0] = int local[0] = javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn 1: lookupswitch Exception in thread "main" VerifyError: Missing stackmap frame for bytecode position 26 (branch target) while verifying javasoft.sqe.tests.vm.classfmt.ins.instr_006.instr_00601m1t.instr_00601m1tn.m() at bytecode position 1 at com.sun.max.vm.classfile.ErrorContext.verifyError(ErrorContext.java:179) at com.sun.max.vm.verifier.MethodVerifier.verifyError(MethodVerifier.java:122) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.frameAt(TypeCheckingMethodVerifier.java:209) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.performBranch(TypeCheckingMethodVerifier.java:317) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier$Interpreter.lookupswitch(TypeCheckingMethodVerifier.java:1579) at com.sun.max.vm.bytecode.BytecodeScanner.scanInstruction(BytecodeScanner.java:991) at com.sun.max.vm.bytecode.BytecodeScanner.scan(BytecodeScanner.java:1197) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.verifyBytecodes(TypeCheckingMethodVerifier.java:145) at com.sun.max.vm.verifier.TypeCheckingMethodVerifier.verify(TypeCheckingMethodVerifier.java:112) at com.sun.max.vm.verifier.TypeCheckingVerifier.verify(TypeCheckingVerifier.java:71) at test.com.sun.max.vm.verifier.CommandLineVerifier.main(CommandLineVerifier.java:106)The verify sub-command is available as of version 4278 in the main Maxine repository.
This notification describes vulnerabilities fixed in third-party components that are included in Sun's product distribution.
Information about vulnerabilities affecting Oracle Sun products can be found on Oracle Critical Patch Updates and Security Alerts page.
The room is as full as it could be. 16 paid students, all from various organizations. About half of them are from defense contractor Saab, who create applications for the South African National Defense Force. Part of what they're going to be doing is plugging into KITT, about which there will be a demonstration on Wednesday. Other students (well, actually, fulltime Java professionals) are working at, among other organizations, Fermel, creating mining-related applications, jemstep, it platforms, and Core Freight Systems.
The range of experience is quite large, from newbies to Java to some who already have various applications on the NetBeans Platform, hoping to provide screenshots of those soon.
The topics discussed during the first day ranged from getting started to modules, Lookup, and System FileSystem (central registry). Tomorrow we'll cover window systems, nodes & explorer views, and the Visual Library.
Unfortunately, in all the excitement, I forgot to take a photo of the group, hope to do so tomorrow. The homework for the evening was to complete the text filter sample that the group had started working on during the course:
http://platform.netbeans.org/tutorials/nbm-quick-start.html
The same course will be delivered next week in Stellenbosch, at the offices of ISS International, an organization creating applications for seismological analysis. There are still a few places left over, so write to mark at jumpingbean dot co dot za to join up.
The display protocol between Sun Ray DTUs (or the software application Oracle Virtual Desktop Client) and the Oracle VDI servers is ALP, the Appliance Link Protocol. ALP is a latency friendly protocol and very efficient in Wide Area Networks. Between the Oracle VDI servers and the Virtual Desktops, hosted on the virtualization infrastructure, the RDP protocol is used and implemented through the Sun Ray Connector for Windows.
The Oracle VDI broker uses standard RDP settings that you may change as an Oracle VDI administrator. This is done per pool configuration and available through the Oracle VDI GUI or via CLI-commands. In the below picture you see how to navigate in the Oracle VDI GUI to the pool settings: select Pools in the left column, select the Pool you want to customize (in my case Windows XP Pool) and select the tab Settings.
If you scroll down on the Pool Settings page you see the section for Sun Ray specific pool settings and the option to customize the settings for RDP. Pay attention to the order of selecting the options:
In the case you have changed the Sun Ray RDP settings and the result is still different then what you were expecting, you can go to the Oracle VDI server command-line (via SSH or Putty) to do some trouble-shooting. As you may know already, the RDP client for a Sun Ray session is called uttsc in Solaris. The desired RDP settings that you configured in the GUI are passed as arguments through this uttsc process on the server.
A very nice tool in the trouble-shooting process is the Solaris pargs CLI-command, which gives you information about the arguments that are passed to a Solaris process (identified by a Process ID).
In my example (see below) I want to investigate the RDP settings for a Sun Ray user with userid jaapr. I have to find out to which server Jaap's Sun Ray session is connected (press the three audio-keys on a Sun keyboard), I connect to this server with SSH/Putty and with the process ID of the uttsc process (better to use uttsc-bin for this) I investigate the RDP settings:
root@vdiserver:~# ps -ef|grep jaapr|grep uttsc-bin utku5 28223 28204 0 17:42:11 ? 0:00 /opt/SUNWuttsc/lib/uttsc-bin -m -u jaapr ... root@vdiserver:~# pargs 28223 28223: /opt/SUNWuttsc/lib/uttsc-bin -m -u jaapr -S 5 -d SUNVDI -i -r usb:on -E wallpap argv[0]: /opt/SUNWuttsc/lib/uttsc-bin argv[1]: -m argv[2]: -u argv[3]: jaapr argv[4]: -S argv[5]: 5 argv[6]: -d argv[7]: SUNVDI argv[8]: -i argv[9]: -r argv[10]: usb argv[11]: -E argv[12]: wallpaper argv[13]: -E argv[14]: theming argv[15]: 192.168.4.157 root@vdiserver:~#And here you have the complete listing of the RDP settings that are used for a specific Desktop session in a selected VDI pool.
8월 2일~6일 일정으로 베이징에 있는 오라클 솔루션 센터(구. 썬 솔루션 센터)에 다녀왔습니다. 솔루션 센터는 썬의 시스템 및 소프트웨어를 갖추고 각종 데모, 벤치마크 테스트 및 PoC(Proof of Concept)를 진행하는 곳으로 새로운 오라클 솔루션 센터는 아시아에서는 베이징 및 시드니에 전산실을 갖추고 있습니다.
한국 썬과 같이 각 지역에서도 데모를 위한 시스템을 확보하고 있기 때문에 이 곳에서는 주로 각국 별로 공유하는 대형 시스템-스토리지를 이용한 데모, BMT를 위하여 사용되며 인터넷을 통하여 접속할 수 있는 환경이 구성되어 있습니다.
베이징에서도 가장 중심지에 해당하는 Central Place에 위치하여 고객 방문에 상당히 좋은 환경을 갖추고 있고 하이엔드 시스템들 특히 최근 썬과 오라클의 하모니로 새로 출시된 Exadata 시스템이 Full Rack 구성된 것을 볼 수 있어 인상적이었습니다. 사진에는 전면만 있지만 매우 복잡하지 않을까 생각했던 후면이 Infiniband 케이블로 전면 만큼이나 심플한 모습이어서 어플라이언스 제품으로써 소프트웨어-하드웨어 아키텍쳐 뿐만 아니라 물리적인 구성마저도 이토록 최적화되어 있는 모습에 깜짝 놀랐습니다.
- 베이징 오라클 솔루션 센터의 안내데스크 및 정문 -
- 붉은 색의 중국 등을 상징하는 장식물 및 전산실 입구 -
- 하이엔드 시스템이 즐비한 전산실과 Exadata 머신 -
- 듀얼헤드 구성의 썬레이와 사무실에서 내다 본 풍경 -
U hebt onze strategie gehoord en begrijpt onze visie. Kom dan nu kijken hoe een en ander in de praktijk werkt!
De efficiency van het datacenter is voor iedereen een uiterst belangrijk onderwerp, waarmee allerlei technologieën gemoeid zijn.
Kom naar onze Solution Days, waar we de voordelen van Oracle’s belangrijkste oplossingen binnen ons gezamenlijke aanbod live demonstreren. In één middag komen telkens drie belangrijke onderwerpen aan bod. U krijgt de voordelen van onze oplossingen in de praktijk te zien:
Deze twee DCE Solution Days zijn technisch georiënteerd en volgen een praktische aanpak. We hopen u dat u erbij kunt zijn!
Schrijf u nu inSchrijf u nu in voor deze praktijkbijeenkomsten
Sun Microsystems Nederland
Saturnus 1
3824 ME Amersfoort
Netherlands
- 31 augustus
- 18 november
The Sun Storage 6180 array is more than 1.9 times better in price-performance compared to the IBM DS5020 system as measured by the SPC-1 benchmark.
The Sun Storage 6180 array delivers 50% more SPC-1 IOPS than the previous generation Sun Storage 6140 array and IBM DS4700 on the SPC-1 benchmark.
The Sun Storage 6180 array is more than 3.1 times better in price-performance compared to the NetApp FAS3040 system as measured by the SPC-1 benchmark.
The Sun Storage 6180 array betters the Hitachi 2100 system by 34% in price-performance on the SPC-1 benchmark.
The Sun Storage 6180 array has 16% better IOPS/disk drive performance than the Hitachi 2100 on the SPC-1 benchmark.
Select results for the SPC-1 benchmark comparing competitive systems (ordered by performance), data as of August 6th, 2010 from the Storage Performance Council website.
Sponsor System SPC-1 IOPS $/SPC-1
SPC-1 IOPS = the Performance Metric
$/SPC-1 IOPS = the Price-Performance Metric
ASU Capacity = the Capacity Metric
Data Protection = Data Protection Metric
TSC Price = Total Cost of Ownership Metric
Results Identifier = A unique identification of the result Metric
Complete SPC-1 benchmark results may be found at http://www.storageperformance.org.
Results and Configuration SummaryStorage Configuration:
Server Configuration:
Software Configuration:
SPC1 is built to:
SPC-1, SPC-1 IOPS, $/SPC-1 IOPS reg tm of Storage Performance Council (SPC). More info www.storageperformance.org, results as of 8/6/2010. Sun Storage 6180 array 26,090.03 SPC-1 IOPS, ASU Capacity 5,145.060GB, $/SPC-1 IOPS $4.37, Data Protection Mirroring, Cost $114,042, Ident. A00084.