рд╕реВрдЪреА:
рдПрдХрджреЛрддреАрди╬╝Torrent
рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдордЬреЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рдЙрдЪреНрдЪ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХреЗ рд╕рд╛рде, рд▓реЗрдЦрдХ рдпрд╛ рддреЛ
рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкрдврд╝ рдирд╣реАрдВ рдкрд╛рдП рдпрд╛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПред рдпрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
рд╕реНрдЯреНрд░реАрдо 4600 рд╕рд┐рд╕реНрдЯрдо рдХреИрд╢ рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЦреБрд▓рддрд╛ рд╣реИред рдФрд░ рд╕рдм рдХреБрдЫ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдХрдо рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдореИрдВ рдЯреЛрд░реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЕрдХреНрд╖рд╛рдВрд╢реЛрдВ рдореЗрдВ рдлрд╝реАрдб рдЪреИрдирд▓ рдмрд▓реНрдХрд┐ рд╕рдВрдХреАрд░реНрдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдореНрдпреВрдЯ-рдЯреЙрд░реЗрдВрдЯ рдХрд╛ "рдПрдореБрд▓реЗрдЯрд░" рд▓рд┐рдЦрдирд╛ рдерд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг" рдиреЗ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдЪрд╛рдЯреБрдХрд╛рд░ рдкрд░ рд▓рд┐рдЦрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛):
using System;
using System.IO;
using System.Threading;
namespace abuseio
{
class Program
{
static void Main(string[] args)
{
for (var i = 0; i < 10; i++)
{
(new Thread(() => {
var file = File.OpenRead(args[0]);
var chunkSize = 16384;
var chunks = (int)(file.Length / chunkSize);
var rnd = new Random();
var buffer = new byte[chunkSize];
while (true) {
long index = rnd.Next(chunks);
file.Seek(index * chunkSize, SeekOrigin.Begin);
file.Read(buffer, 0, chunkSize);
}
})).Start();
}
}
}
}
( ). :
. :
( , ) Active , . Standby priority 7 :
, , shell32.dll:
┬л ┬╗:
, , . , - ┬л┬╗ , . , .
┬л┬╗ :
using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading;
using Microsoft.Win32.SafeHandles;
namespace abuseio
{
class Program
{
[Flags]
enum FileAttributes : uint
{
Readonly = 0x00000001,
Hidden = 0x00000002,
System = 0x00000004,
Directory = 0x00000010,
Archive = 0x00000020,
Device = 0x00000040,
Normal = 0x00000080,
Temporary = 0x00000100,
SparseFile = 0x00000200,
ReparsePoint = 0x00000400,
Compressed = 0x00000800,
Offline = 0x00001000,
NotContentIndexed = 0x00002000,
Encrypted = 0x00004000,
Write_Through = 0x80000000,
Overlapped = 0x40000000,
NoBuffering = 0x20000000,
RandomAccess = 0x10000000,
SequentialScan = 0x08000000,
DeleteOnClose = 0x04000000,
BackupSemantics = 0x02000000,
PosixSemantics = 0x01000000,
OpenReparsePoint = 0x00200000,
OpenNoRecall = 0x00100000,
FirstPipeInstance = 0x00080000
}
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern SafeFileHandle CreateFile(
string fileName,
[MarshalAs(UnmanagedType.U4)] FileAccess fileAccess,
[MarshalAs(UnmanagedType.U4)] FileShare fileShare,
IntPtr securityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes flags,
IntPtr template);
static void Main(string[] args)
{
for (var i = 0; i < 10; i++)
{
(new Thread(() => {
var fileHandle = CreateFile(args[0], FileAccess.Read, FileShare.Read, IntPtr.Zero, FileMode.Open, FileAttributes.NoBuffering, IntPtr.Zero);
var file = new FileStream(fileHandle, FileAccess.Read);
var chunkSize = 16384;
var chunks = (int)(file.Length / chunkSize);
var rnd = new Random();
var buffer = new byte[chunkSize];
while (true) {
long index = rnd.Next(chunks);
file.Seek(index * chunkSize, SeekOrigin.Begin);
file.Read(buffer, 0, chunkSize);
}
})).Start();
}
}
}
}
┬л┬╗ (, ):
1. -
2. . тАФ
3.
4. Last but not least, . , ┬л┬╗ .
, . :
using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading;
using Microsoft.Win32.SafeHandles;
namespace abuseio
{
class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();
enum ThreadPriority
{
THREAD_MODE_BACKGROUND_BEGIN = 0x00010000,
THREAD_MODE_BACKGROUND_END = 0x00020000,
THREAD_PRIORITY_ABOVE_NORMAL = 1,
THREAD_PRIORITY_BELOW_NORMAL = -1,
THREAD_PRIORITY_HIGHEST = 2,
THREAD_PRIORITY_IDLE = -15,
THREAD_PRIORITY_LOWEST = -2,
THREAD_PRIORITY_NORMAL = 0,
THREAD_PRIORITY_TIME_CRITICAL = 15
}
[DllImport("kernel32.dll")]
static extern bool SetThreadPriority(IntPtr hThread, ThreadPriority nPriority);
static void Main(string[] args)
{
for (var i = 0; i < 10; i++)
{
(new Thread(() => {
SetThreadPriority(GetCurrentThread(), ThreadPriority.THREAD_MODE_BACKGROUND_BEGIN);
var file = File.OpenRead(args[0]);
var chunkSize = 16384;
var chunks = (int)(file.Length / chunkSize);
var rnd = new Random();
var buffer = new byte[chunkSize];
while (true) {
long index = rnd.Next(chunks);
file.Seek(index * chunkSize, SeekOrigin.Begin);
file.Read(buffer, 0, chunkSize);
}
})).Start();
}
}
}
}
, , :
┬л┬╗ , :
, , . , 1-2-3.
1. :
2. :
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utorrent.exe]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utorrent.exe\PerfOptions]
"IoPriority"=dword:00000000
"PagePriority"=dword:00000001
3.
:
.
swappiness
, ┬л ┬╗. (aging/trimming, ) тАФ . swappiness , low latency , swappiness
:
Decrease /proc/sys/vm/swappiness?
Swapout is good. It frees up unused memory. I run my desktop machines at
swappiness=100.
. , , . , , .
тАФ .
.