473,320 Members | 2,000 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Problem in running .Net Service on a Quad Processor

Dear All,
I have created a .Net service in 2.0 and running it on a machine that
has a Quad Processor.
It is failing with the following error.
"Error 1053: The service did not respond to the start or control
request in a timely fashion"
This is what I saw in event Viewer.
Timeout (30000 milliseconds) waiting for the MyService Server service
to connect.

The following is the System Information of my server
OS Name Microsoft(R) Windows(R) Server 2003, Standard Edition
Version 5.2.3790 Service Pack 1 Build 3790
Other OS Description Not Available
OS Manufacturer Microsoft Corporation
System Name TEST_SRV
System Manufacturer IBM
System Model IBM x3850-[88631RA]-
System Type X86-based PC
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
Processor x86 Family 15 Model 4 Stepping 9 GenuineIntel ~3169 Mhz
BIOS Version/Date IBM -[ZUE154BUS-1.09]-, 6/15/2006

Is this due to compilation problem? Please help.

Thanks & regards
Sunil

Jan 9 '07 #1
11 2284
<su***@volcanomail.comwrote in message
news:11**********************@42g2000cwt.googlegro ups.com...
Dear All,
I have created a .Net service in 2.0 and running it on a machine that
has a Quad Processor.
It is failing with the following error.
"Error 1053: The service did not respond to the start or control
request in a timely fashion"
This is what I saw in event Viewer.
Timeout (30000 milliseconds) waiting for the MyService Server service
to connect.
This is because your OnStart method did not return in a timely fashion, once the Onstart is
called the SCM waits for a maximum of 30 seconds for it to return, if OnStart doesn't return
within this 30 secs., then the SCM considers the service has failed to start, logs a message
and kill the service.
So, you have to investigate your OnStart and try to find out why it takes longer than 30
seconds to return.

Willy.

Jan 9 '07 #2
Thanks Willy,
But what baffles me is that on my machine it does not give this timeout
This is my system configuration:
OS Name Microsoft Windows XP Professional
Version 5.1.2600 Service Pack 2 Build 2600
OS Manufacturer Microsoft Corporation
System Name USER_XP
System Manufacturer Dell Inc.
System Model OptiPlex GX620
System Type X86-based PC
Processor x86 Family 15 Model 6 Stepping 4 GenuineIntel ~3391 Mhz
Processor x86 Family 15 Model 6 Stepping 4 GenuineIntel ~3391 Mhz
BIOS Version/Date Dell Inc. A07, 31/03/2006
SMBIOS Version 2.3
Windows Directory C:\WINDOWS
System Directory C:\WINDOWS\system32
Boot Device \Device\HarddiskVolume1
Locale United States
Hardware Abstraction Layer Version = "5.1.2600.2180
(xpsp_sp2_rtm.040803-2158)"
Total Physical Memory 2,048.00 MB
Available Physical Memory 1.52 GB
Total Virtual Memory 2.00 GB
Available Virtual Memory 1.96 GB
Page File Space 3.85 GB
Page File C:\pagefile.sys

Is this something got to also do with OS? In fact shouldn't my service
be faster on a QuadProc machine?
Also when I compiled the service and debugmode it ran on the
QuadProcessor machine without any errors.
I need to answer these questions before I advice my peers any changes.
Please help.

Thanks a lot.

Many regards
Sunil

Willy Denoyette [MVP] wrote:
<su***@volcanomail.comwrote in message
news:11**********************@42g2000cwt.googlegro ups.com...
Dear All,
I have created a .Net service in 2.0 and running it on a machine that
has a Quad Processor.
It is failing with the following error.
"Error 1053: The service did not respond to the start or control
request in a timely fashion"
This is what I saw in event Viewer.
Timeout (30000 milliseconds) waiting for the MyService Server service
to connect.

This is because your OnStart method did not return in a timely fashion, once the Onstart is
called the SCM waits for a maximum of 30 seconds for it to return, if OnStart doesn't return
within this 30 secs., then the SCM considers the service has failed to start, logs a message
and kill the service.
So, you have to investigate your OnStart and try to find out why it takes longer than 30
seconds to return.

Willy.
Jan 10 '07 #3
I would have a tendency to say it was something else that is different on
the two machines then the number of processor. Does you service log event
as to it state, how far is it getting? If you comment out your code so the
service starts but does nothing do you still get the error?

Regards,
John

<su***@volcanomail.comwrote in message
news:11**********************@k58g2000hse.googlegr oups.com...
Thanks Willy,
But what baffles me is that on my machine it does not give this timeout
This is my system configuration:
OS Name Microsoft Windows XP Professional
Version 5.1.2600 Service Pack 2 Build 2600
OS Manufacturer Microsoft Corporation
System Name USER_XP
System Manufacturer Dell Inc.
System Model OptiPlex GX620
System Type X86-based PC
Processor x86 Family 15 Model 6 Stepping 4 GenuineIntel ~3391 Mhz
Processor x86 Family 15 Model 6 Stepping 4 GenuineIntel ~3391 Mhz
BIOS Version/Date Dell Inc. A07, 31/03/2006
SMBIOS Version 2.3
Windows Directory C:\WINDOWS
System Directory C:\WINDOWS\system32
Boot Device \Device\HarddiskVolume1
Locale United States
Hardware Abstraction Layer Version = "5.1.2600.2180
(xpsp_sp2_rtm.040803-2158)"
Total Physical Memory 2,048.00 MB
Available Physical Memory 1.52 GB
Total Virtual Memory 2.00 GB
Available Virtual Memory 1.96 GB
Page File Space 3.85 GB
Page File C:\pagefile.sys

Is this something got to also do with OS? In fact shouldn't my service
be faster on a QuadProc machine?
Also when I compiled the service and debugmode it ran on the
QuadProcessor machine without any errors.
I need to answer these questions before I advice my peers any changes.
Please help.

Thanks a lot.

Many regards
Sunil

Willy Denoyette [MVP] wrote:
><su***@volcanomail.comwrote in message
news:11**********************@42g2000cwt.googlegr oups.com...
Dear All,
I have created a .Net service in 2.0 and running it on a machine that
has a Quad Processor.
It is failing with the following error.
"Error 1053: The service did not respond to the start or control
request in a timely fashion"
This is what I saw in event Viewer.
Timeout (30000 milliseconds) waiting for the MyService Server service
to connect.

This is because your OnStart method did not return in a timely fashion,
once the Onstart is
called the SCM waits for a maximum of 30 seconds for it to return, if
OnStart doesn't return
within this 30 secs., then the SCM considers the service has failed to
start, logs a message
and kill the service.
So, you have to investigate your OnStart and try to find out why it takes
longer than 30
seconds to return.

Willy.

Jan 10 '07 #4
<su***@volcanomail.comwrote in message
news:11**********************@k58g2000hse.googlegr oups.com...
Thanks Willy,
But what baffles me is that on my machine it does not give this timeout
Forget about the hw configuration and concentrate on the OnStart method, there is something
preventing it to return in a timely fashion? It's impossible for us to tell you what's
happening without seeing any code, so please show us at least how your OnStart looks like.

Willy.

Jan 10 '07 #5
Hi Willy,
The following is the code snippet that my Service Executes onStart
public static void Start( bool isConsole, string[] args )
{
try
{
AppDomain curr = AppDomain.CurrentDomain;
AppDomainSetup info = new AppDomainSetup();

info.ApplicationBase = curr.BaseDirectory;
info.ApplicationName = typeof( ServiceRuntime ).FullName;
info.ApplicationBase = curr.BaseDirectory;
info.ConfigurationFile =
curr.SetupInformation.ConfigurationFile.Replace( ".CmdLine.", "." );
info.ShadowCopyFiles = "false";

_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );
}
catch( Exception e )
{
throw;
}
}

In _Start I am creating a few threads...
for( int i = 0; i < nThreads; i++ )
{
t = new Thread ( new ThreadStart ( this.ThreadProc ) ) ;
t.Name = "Job Processor Engine Thread(" + i.ToString() + ")";
t.Start () ;
this.threads.Add ( t ) ;
}
and doing some db activites....
But why is this failing on a QuadProc machine and working well on other
machines? Is there some setting I need to tune/change? Please help...

Thanks & regards
Sunil
news:11**********************@k58g2000hse.googlegr oups.com...
Thanks Willy,
But what baffles me is that on my machine it does not give this timeout

Forget about the hw configuration and concentrate on the OnStart method, there is something
preventing it to return in a timely fashion? It's impossible for us to tell you what's
happening without seeing any code, so please show us at least how your OnStart looks like.

Willy.
Jan 11 '07 #6
<su***@volcanomail.comwrote in message
news:11**********************@77g2000hsv.googlegro ups.com...
Hi Willy,
The following is the code snippet that my Service Executes onStart
public static void Start( bool isConsole, string[] args )
{
try
{
AppDomain curr = AppDomain.CurrentDomain;
AppDomainSetup info = new AppDomainSetup();

info.ApplicationBase = curr.BaseDirectory;
info.ApplicationName = typeof( ServiceRuntime ).FullName;
info.ApplicationBase = curr.BaseDirectory;
info.ConfigurationFile =
curr.SetupInformation.ConfigurationFile.Replace( ".CmdLine.", "." );
info.ShadowCopyFiles = "false";

_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );
}
catch( Exception e )
{
throw;
}
}

In _Start I am creating a few threads...
for( int i = 0; i < nThreads; i++ )
{
t = new Thread ( new ThreadStart ( this.ThreadProc ) ) ;
t.Name = "Job Processor Engine Thread(" + i.ToString() + ")";
t.Start () ;
this.threads.Add ( t ) ;
}
and doing some db activites....
But why is this failing on a QuadProc machine and working well on other
machines? Is there some setting I need to tune/change? Please help...

Thanks & regards
Sunil
Well I can't tell, first I asked to post your "OnStart()" code, instead you post Start, it's
not clear at all how you call this from OnStart().
It looks like you don't run this "Start" in another thread, that means that OnStart only
returns to the SCM when Start returns. Now, if you DB activity takes more than 30 seconds
(possibly a connection cannot be made because your connection parameters aren't valid or the
security context is invalid etc...), the SCM will get nervous and kill the "OnStart" thread
and bail out. Keep in mind that OnStart runs on an SCM thread not on a CLR thread, the SCM
is the master of the game here, you have to obey his rules ;-)
So, I would suggest you run this "Start" method on a separate background thread from OnStart
and return from OnStart when the thread has started. Also, you should code more defensively,
You should add tracing and logging to your methods, your exception handling should also
largely be improved.

Willy.

Jan 11 '07 #7
Hi Willy,
The OnStart method calls the Start method. I had actually left out the
exception handling as it was not needed to be posted...:-) well I did a
trace of the application and found that the maximum time taken was for
just invoking the _init & the _Start method...
_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );
After the AppDomain is created and the call to _init takes more than
40sec...I put a trace statement before the function call, in the first
line of the function and at end of the function...
00000007 11.30131397 [2864] JOBServer: Init Call
00000382 41.83827053 [2864] JOBServer: Init Function Start
00001228 71.89844367 [2864] JOBServer: Init Function end
00001229 71.89849695 [2864] JOBServer: Init invoked successfully
00001242 101.93207238 [2864] JOBServer: Begin of ServiceRuntime _Start

00001284 103.17994353 [2864] JOBServer: End of ServiceRuntime _Start
Why is calling an AppDomain function taking such a long time? Is there
some CAS done? It is fast on my Windows XP machine.
Any clues?

Thanks & regards
Sunil

Willy Denoyette [MVP] wrote:
<su***@volcanomail.comwrote in message
news:11**********************@77g2000hsv.googlegro ups.com...
Hi Willy,
The following is the code snippet that my Service Executes onStart
public static void Start( bool isConsole, string[] args )
{
try
{
AppDomain curr = AppDomain.CurrentDomain;
AppDomainSetup info = new AppDomainSetup();

info.ApplicationBase = curr.BaseDirectory;
info.ApplicationName = typeof( ServiceRuntime ).FullName;
info.ApplicationBase = curr.BaseDirectory;
info.ConfigurationFile =
curr.SetupInformation.ConfigurationFile.Replace( ".CmdLine.", "." );
info.ShadowCopyFiles = "false";

_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );
}
catch( Exception e )
{
throw;
}
}

In _Start I am creating a few threads...
for( int i = 0; i < nThreads; i++ )
{
t = new Thread ( new ThreadStart ( this.ThreadProc ) ) ;
t.Name = "Job Processor Engine Thread(" + i.ToString() + ")";
t.Start () ;
this.threads.Add ( t ) ;
}
and doing some db activites....
But why is this failing on a QuadProc machine and working well on other
machines? Is there some setting I need to tune/change? Please help...

Thanks & regards
Sunil

Well I can't tell, first I asked to post your "OnStart()" code, instead you post Start, it's
not clear at all how you call this from OnStart().
It looks like you don't run this "Start" in another thread, that means that OnStart only
returns to the SCM when Start returns. Now, if you DB activity takes more than 30 seconds
(possibly a connection cannot be made because your connection parameters aren't valid or the
security context is invalid etc...), the SCM will get nervous and kill the "OnStart" thread
and bail out. Keep in mind that OnStart runs on an SCM thread not on a CLR thread, the SCM
is the master of the game here, you have to obey his rules ;-)
So, I would suggest you run this "Start" method on a separate background thread from OnStart
and return from OnStart when the thread has started. Also, you should code more defensively,
You should add tracing and logging to your methods, your exception handling should also
largely be improved.

Willy.
Jan 15 '07 #8
<su***@volcanomail.comwrote in message
news:11*********************@38g2000cwa.googlegrou ps.com...
Hi Willy,
The OnStart method calls the Start method. I had actually left out the
exception handling as it was not needed to be posted...:-) well I did a
trace of the application and found that the maximum time taken was for
just invoking the _init & the _Start method...
>_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );

After the AppDomain is created and the call to _init takes more than
40sec...I put a trace statement before the function call, in the first
line of the function and at end of the function...
00000007 11.30131397 [2864] JOBServer: Init Call
00000382 41.83827053 [2864] JOBServer: Init Function Start
00001228 71.89844367 [2864] JOBServer: Init Function end
00001229 71.89849695 [2864] JOBServer: Init invoked successfully
00001242 101.93207238 [2864] JOBServer: Begin of ServiceRuntime _Start

00001284 103.17994353 [2864] JOBServer: End of ServiceRuntime _Start
Why is calling an AppDomain function taking such a long time? Is there
some CAS done? It is fast on my Windows XP machine.
Any clues?
I can't answer this, guess you're dealing with some time-out situation, what framework and
OS are you running this on?
Again, don't do all this in the OnStart method, simply create a new thread and run your
Start in this thread, once this thread is started return from OnStart. This way you make the
SCM happy and you run your code on a thread that's not entered from unmanaged code.

Willy.

Jan 15 '07 #9
Hi Willy,
Finally I could find a solution to this problem...this seems to be
related to Windows2003 Server sp1...
I set the value of the registry value 'State' under the following
registry key as '23e00'.
KEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\WinTr ust\Trust
Providers\Software Publishing
and my Service started within a few seconds...no code changes done..I
guess this is something to do with digital signature/ security...Can
someone throw some light on this issue?

Thanks & regards
Sunil

Willy Denoyette [MVP] wrote:
<su***@volcanomail.comwrote in message
news:11*********************@38g2000cwa.googlegrou ps.com...
Hi Willy,
The OnStart method calls the Start method. I had actually left out the
exception handling as it was not needed to be posted...:-) well I did a
trace of the application and found that the maximum time taken was for
just invoking the _init & the _Start method...
_domain = AppDomain.CreateDomain( info.ApplicationName,
curr.Evidence, info );
_runtime = (ServiceRuntime)_domain.CreateInstanceAndUnwrap(
typeof( ServiceRuntime ).Assembly.GetName().FullName,
typeof( ServiceRuntime ).FullName
);

_runtime.Init( isConsole );
_runtime._Start( args );
After the AppDomain is created and the call to _init takes more than
40sec...I put a trace statement before the function call, in the first
line of the function and at end of the function...
00000007 11.30131397 [2864] JOBServer: Init Call
00000382 41.83827053 [2864] JOBServer: Init Function Start
00001228 71.89844367 [2864] JOBServer: Init Function end
00001229 71.89849695 [2864] JOBServer: Init invoked successfully
00001242 101.93207238 [2864] JOBServer: Begin of ServiceRuntime _Start

00001284 103.17994353 [2864] JOBServer: End of ServiceRuntime _Start
Why is calling an AppDomain function taking such a long time? Is there
some CAS done? It is fast on my Windows XP machine.
Any clues?

I can't answer this, guess you're dealing with some time-out situation, what framework and
OS are you running this on?
Again, don't do all this in the OnStart method, simply create a new thread and run your
Start in this thread, once this thread is started return from OnStart. This way you make the
SCM happy and you run your code on a thread that's not entered from unmanaged code.

Willy.
Jan 15 '07 #10
<su***@volcanomail.comwrote in message
news:11**********************@s34g2000cwa.googlegr oups.com...
Hi Willy,
Finally I could find a solution to this problem...this seems to be
related to Windows2003 Server sp1...
I set the value of the registry value 'State' under the following
registry key as '23e00'.
KEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\WinTr ust\Trust
Providers\Software Publishing
and my Service started within a few seconds...no code changes done..I
guess this is something to do with digital signature/ security...Can
someone throw some light on this issue?
Are you running/loading Certificate assigned assemblies? If this is true (I wonder why), you
need to make sure you have an internet connection. This because the CLR will try to download
the CRL (Certificate Revocation List) while checking the signature. By tweaking the registry
you did disable the download of CRL's for the whole system.

Willy.
Jan 15 '07 #11
Hi Willy,
Yes, I am loadin a signed assembly...could you suggest recommend
possible solutions...I found a couple of them
1. A simple solution to the CRL check overhead is to use authenticode
certificates that don't have a CDP embedded in them. Of course, this
generally implies a self-signed cert, Is this an acceptable compromise?
2. Write a thin native layer which is the signed entry point, and
delegates to managed code to do the rest of the work as another option.
What do you suggest?

Thanks & regards
Sunil

Willy Denoyette [MVP] wrote:
<su***@volcanomail.comwrote in message
news:11**********************@s34g2000cwa.googlegr oups.com...
Hi Willy,
Finally I could find a solution to this problem...this seems to be
related to Windows2003 Server sp1...
I set the value of the registry value 'State' under the following
registry key as '23e00'.
KEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\WinTr ust\Trust
Providers\Software Publishing
and my Service started within a few seconds...no code changes done..I
guess this is something to do with digital signature/ security...Can
someone throw some light on this issue?

Are you running/loading Certificate assigned assemblies? If this is true (I wonder why), you
need to make sure you have an internet connection. This because the CLR will try to download
the CRL (Certificate Revocation List) while checking the signature. By tweaking the registry
you did disable the download of CRL's for the whole system.

Willy.
Jan 16 '07 #12

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Laszlo Zsolt Nagy | last post by:
Hi All! I have a running service (a small web server) implemented in python, running as a win32 service. I wrote another program that is very similar to the web server but I cannot start the...
50
by: sabarish | last post by:
Hi to all. find out the biggest among two numbers without using any conditional statements and any relational operators.
0
by: Claire | last post by:
Ive written a threaded service application, realtime monitoring across a network, heavy processor usage. Probably will be running on a dedicated pc When it's running as an application it's nippy....
7
by: kunal | last post by:
Hello Friends, I am facing a strange problem which i would like to share with you people and get ur ideas and knowledge about it. Whenever i try to run a C++ program after successfully compiling i...
1
by: Graham Hobbs | last post by:
Hello, My old laptop has DB2 V7 thereon. The only fixpaks I ever applied were FP1 (although I cant truly remember if I actually did this one) and FP2. Because it/they entirely satisfied my needs...
1
by: eblackmo | last post by:
I have a test network consisting of four servers running windows 2003 server R2 SP2. I have set up a domain which functioned correctly for about a day and a half until the other servers decided they...
17
by: joebenjamin | last post by:
This is a problem I was trying to help a few friends figure out for fun. I am not sure how to go about this, but there is something I am missing here. Here is what we want the output to be: Need...
2
by: violeta123 | last post by:
I am stuck! Please help It might be difficult to explain the problem via email, but I will try. I have a Win 2003 Enterprise server running with the only purpose of a membership web site...
0
by: DolphinDB | last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation. Take...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.