|
Dan
They are each creating an independant array.
Each thread, and I have to create 7 (256*256*256*6) arrays & write to file, has a different set of parameters for the equations which fill in the arrays.
|
|
|
|
|
One more snippet of info.
As I said I have to run the subr (thread) 7 times.
It's just now started the seventh (odd number) so only one thread is running & CPU is therefore 50%.
Now the Task Manager reports 20Mb memory in use.
This should be at least 100Mb.
Does it report the malloc'd mem at all ???
|
|
|
|
|
'Mem Usage' in Task Manager is the process working set. That's the set of physical memory pages currently used by the process.
When physical memory is tight, Windows will trim - remove pages from - the working set of processes. However, it doesn't completely discard them from memory, just sets them as available. Pages that the process has written to are put on a 'modified' list to be written to disk (to the page file, if a private memory allocation like this one). Pages not written to since last brought into the working set are put onto a 'standby' list. After written to disk - which happens after the modified list reaches 800 pages, or after 5 minutes - 'modified' pages go on the 'standby' list.
If the program then references a page that's on the standby list, a page fault still occurs (and gets counted in the page fault counters for the process) but Windows simply updates the page table to point to the page that's still in memory - it doesn't need to access the disk.
In practice almost every Windows system has 'tight' physical memory, and therefore trims working sets, because of the way that pages read from and written to disk via the file system cache end up in memory on the standby or modified list. The file system cache is simply another working set.
For completeness: there are also two other lists, the 'free' list and the 'zero page' list. The 'free' pages are not connected to any working set, so the data they contain is effectively inaccessible. The 'zero page' list contains pages that are full of zeroes - every single byte in the page is zero. Windows gives out zero pages to user-mode processes for private allocations (VirtualAlloc ) to ensure that processes can't read each others' data. For kernel-mode allocations, and where the page needs to be filled by data from disk (memory-mapped files), it uses free pages so that the effort to zero the page isn't wasted.
Pages are moved from the Standby list to the Free list if the number of pages on the free list falls below a threshold. Windows has to disconnect them from the working set they used to belong to. Pages are zeroed by a thread that only runs if a processor would otherwise be idle. It only does this if the number of zero pages falls below a threshold - otherwise the processor goes to sleep to save power.
If the free or zero list are empty when a new page is needed, Windows will first try the other one (zeroing the page if necessary). Then it tries the Standby list, then if that's empty it takes a page from the Modified list, writes it to disk, and moves it to the new working set. If the Modified list is also empty (pathological case) it then has to trim a working set to get a page it can use.
If your threads are writing from start to end of your array, the pages at the start could well be out of the working set (but still probably on the modified or standby lists) at the end of the program. Windows is supposed to pay attention to a 'maximum working set size' variable but in practice it simply trims the processes that are using the most memory. If you want to try changing this variable, call SetProcessWorkingSetSize .
|
|
|
|
|
Mike
Thanks for that - I'll have to read & digest.
The program runs six nested FOR loops feeding these six parameters plus those supplied as args to the subr/thread producing fairly random hits throughout the 256*256*256 space. So I'm not marching through from start to end.
Evn though I have a Gig of ram is XP still pageing ??
Thanks again
|
|
|
|
|
Yes, it seems like Windows is always using the page file, no matter how much physical memory is available - more physical memory means it takes longer to be swapped out, but restoring a window that was minimized for 10 minutes is always going to the disk. You can that by disabling the page file if you are sure your physical memory is enough for the OS, all applications and the disk cache.
|
|
|
|
|
Finally it happened! After five years of activity, I can proudly announce that my main web site has been victim of a DDoS attack that brought IIS to its knees. Right now, I have set a null route so that incoming traffic will not reach my machine anymore for a couple of hours, and I'm wondering what can I do to prevent or mitigate the effects of other attacks.
I took a quick look to the IIS logs and found out that the majority of the requests come from a handful of IPs. Is there some settings in IIS to drop requests from them? Even better, can I limit each IP to - say - 10 requests per minute?
Do you have other suggestions?
Thank you in advance
Luca
The Price of Freedom is Eternal Vigilance.
|
|
|
|
|
You really can't do anything localy on the machine. No matter what you do to IIS, you'll still be getting the requests and your internet connection will still be flooded with them. You have to contact your ISP to get them to filter out that traffic at their router.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
How can I know the ports opened to the outside of my router ?. Any commands ? I am using windows XP P SP2. Thanks
JIJO BABY - Lets Play C#
|
|
|
|
|
Get out the manual on your router. There is nothing standard that you can type on your XP machine to find out.
Most routers either have a web-based interface that you can get to and find this information, or a Telnet deamon, or a specific configuration utility you run.
Try opening a browser and typing in the IP address of your router, usually 192.168.0.1. If that doesn't work, dig out the manula on the router to find out how to configure it and find the information you need.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
jijobaby wrote: How can I know the ports opened to the outside of my router ?.
There is only one way, that's to audit it from the outside, try this site http://www.auditmypc.com/[^]
I'd love to help, but unfortunatley I have prior commitments monitoring the length of my grass. :Andrew Bleakley:
|
|
|
|
|
Is there a tool/utility that can tell the amount of memory (RAM) an application is utilising on Windows 2000 systems ?
Programming from a spec is like walking on water ......
Its Easier once frozen
|
|
|
|
|
Start / Programs / Accessories / Administrative Tools / Performance Monitor.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Performance Monitor?
Not on my system (Windows 2000 Professional)
Programming from a spec is like walking on water ......
Its Easier once frozen
|
|
|
|
|
That's where the icon normally is on a 2000 box.
You can also just click Start/Run and type perfmon.msc .
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi all
I just had a security problem & hope anyone of u can help me.
I'm using a trial desktop program that connets to SQL server & while it's open my antivirus kept popping up a message saying that there is a port opened by SQL server.
So is there any patch to solve this?
Thanks a lot
Happy
|
|
|
|
|
Normally SQL Server opens ports when it's started, if configured to do so. I suppose it's possible that the desktop program is starting the SQL Server service and the ports are being opened at that point.
You can configure the network settings of SQL Server using the Server Network Utility from the Microsoft SQL Server program group. If this isn't on your start menu, look for svrnetcn.exe typically in the C:\Program Files\Microsoft SQL Server\80\Tools\Binn folder. Disable all network protocols you're not using - if you don't need remote access to this instance of SQL Server, disable everything except Shared Memory. Shared Memory may not actually be shown in this list - if not, just disable everything.
If you still get the problem, it may be that SQL Server has not been upgraded to SP3 or later. Earlier versions still opened UDP port 1434 (used to map instance names to TCP ports) even if the TCP/IP protocol was disabled. If the version installed is actually MSDE (shown as Desktop Engine or Desktop Edition) and it was installed using the merge modules, it may not be possible to apply the downloadable SP4. You should check with the program's author.
|
|
|
|
|
Hi Mike
Thanks a loooooot.
But I had another question,how can the program author solve this??
Should he download SP4 and then re-compile the program?
Thanks again
Happy
|
|
|
|
|
SP4 and recompiling won't make any difference.
Does your app come with and install MSDE or SQL Express??
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi Dave
It installs MSDE.. So what is the solution??
|
|
|
|
|
MSDE installs with network protocols turned on by default. You can turn them off at installation time in either of two ways:
If your installing MSDE as part of a Merge Module in your applications Setup:
MSDE Deployment Toolkit[^]
MSDE Deployment Toolkit in Action article[^]
Or, if you're running the MSDE Setup yourself, you can turn the networking protocols off from the Setup command line. See "Customizing Desktop Engine Setup.exe[^]" for more information. But, in the simplest form, the MSDE Setup command line could look something like this:
setup DISABLENETWORKPROTOCOLS=1
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi, I just purchase toshiba laptop which has 256Mb RAM. And this machine could upgrade to 2048Mb of RAM. Now I want to upgrade the RAM to the maximum value (2048Mb). But the computer store do not have an accessory (RAM) from toshiba. They have the RAM which produce by another company.
From here, my question is: If I use RAM which is difference from toshiba machine, does it is often cause the system to display blue screen error? Because I know that the blue screen error occure when there is dump memory.
|
|
|
|
|
Typically, as long as it has compatible speeds and timings, you should be fine. Even in systems with generic memory modules, however, you get some dud chips or modules - where the data written isn't stored correctly - which the manufacturer's tests don't always pick up when they're tested in isolation.
After installing new RAM, I therefore normally run a RAM test. You can use memtest86[^], memtest86+[^], or Microsoft's Windows Memory Diagnostic[^]. Run them for as long as you think necessary, but probably for at least an hour (a couple of passes). Leaving it overnight will probably be enough for any problems to show up - I had to limit our DC testing to an hour because it needed to go back into service, but since this is your laptop, you can probably spare more time.
|
|
|
|
|
Mike Dimmick wrote: You can use memtest86[^], memtest86+[^], or Microsoft's Windows Memory Diagnostic[^]
Thank you very much for your comment. Which tool is better to use. In my opinion, I prefer Windows Memory Diagnostic. If an error found, could this tool solve the problem for me or just identify the problem only.
|
|
|
|
|
They're all good for testing RAM. All they do is excersize memory, using various patterns and methods, over and over again, making sure that what was read from each location was what was written to it. None of them are any better or any worse than the others.
If a problem is found, the only thing you can do is replace the bad RAM module. No piece of software can ever fix a failed piece of hardware like that.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Thank you very much for your comment.
|
|
|
|